Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add metrics qualifiers for structs that inject metrics #237

Merged
merged 2 commits into from
Mar 25, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion app/app.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ type App struct {
IncomingRouter route.Router `inject:"inline"`
PeerRouter route.Router `inject:"inline"`
Collector collect.Collector `inject:""`
Metrics metrics.Metrics `inject:""`
Metrics metrics.Metrics `inject:"metrics"`

// Version is the build ID for Refinery so that the running process may answer
// requests for the version
Expand Down
2 changes: 1 addition & 1 deletion app/app_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -185,7 +185,7 @@ func newStartedApp(
&inject.Object{Value: &transmit.DefaultTransmission{LibhClient: peerClient, Name: "peer_"}, Name: "peerTransmission"},
&inject.Object{Value: shrdr},
&inject.Object{Value: collector},
&inject.Object{Value: metricsr},
&inject.Object{Value: metricsr, Name: "metrics"},
&inject.Object{Value: "test", Name: "version"},
&inject.Object{Value: samplerFactory},
&inject.Object{Value: &a},
Expand Down
2 changes: 1 addition & 1 deletion collect/collect.go
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ type InMemCollector struct {
Config config.Config `inject:""`
Logger logger.Logger `inject:""`
Transmission transmit.Transmission `inject:"upstreamTransmission"`
Metrics metrics.Metrics `inject:""`
Metrics metrics.Metrics `inject:"metrics"`
SamplerFactory *sample.SamplerFactory `inject:""`

// For test use only
Expand Down
19 changes: 19 additions & 0 deletions collect/collect_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import (
"testing"
"time"

"github.com/facebookgo/inject"
lru "github.com/hashicorp/golang-lru"
"github.com/stretchr/testify/assert"

Expand Down Expand Up @@ -569,3 +570,21 @@ func TestAddSpanNoBlock(t *testing.T) {
err = coll.AddSpanFromPeer(span)
assert.Error(t, err)
}

func TestDependencyInjection(t *testing.T) {
var g inject.Graph
err := g.Provide(
&inject.Object{Value: &InMemCollector{}},
&inject.Object{Value: &config.MockConfig{}},
&inject.Object{Value: &logger.NullLogger{}},
&inject.Object{Value: &transmit.MockTransmission{}, Name: "upstreamTransmission"},
&inject.Object{Value: &metrics.NullMetrics{}, Name: "metrics"},
&inject.Object{Value: &sample.SamplerFactory{}},
)
if err != nil {
t.Error(err)
}
if err := g.Populate(); err != nil {
t.Error(err)
}
}
2 changes: 1 addition & 1 deletion route/route.go
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,7 @@ type Router struct {
PeerTransmission transmit.Transmission `inject:"peerTransmission"`
Sharder sharder.Sharder `inject:""`
Collector collect.Collector `inject:""`
Metrics metrics.Metrics `inject:""`
Metrics metrics.Metrics `inject:"metrics"`

// version is set on startup so that the router may answer HTTP requests for
// the version
Expand Down
39 changes: 32 additions & 7 deletions route/route_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,13 +7,6 @@ import (
"compress/gzip"
"context"
"fmt"
"github.com/honeycombio/refinery/config"
collectortrace "github.com/honeycombio/refinery/internal/opentelemetry-proto-gen/collector/trace/v1"
common "github.com/honeycombio/refinery/internal/opentelemetry-proto-gen/common/v1"
trace "github.com/honeycombio/refinery/internal/opentelemetry-proto-gen/trace/v1"
"github.com/honeycombio/refinery/logger"
"github.com/honeycombio/refinery/metrics"
"github.com/honeycombio/refinery/transmit"
"io"
"io/ioutil"
"math"
Expand All @@ -23,6 +16,16 @@ import (
"testing"
"time"

"github.com/facebookgo/inject"
"github.com/honeycombio/refinery/collect"
"github.com/honeycombio/refinery/config"
collectortrace "github.com/honeycombio/refinery/internal/opentelemetry-proto-gen/collector/trace/v1"
common "github.com/honeycombio/refinery/internal/opentelemetry-proto-gen/common/v1"
trace "github.com/honeycombio/refinery/internal/opentelemetry-proto-gen/trace/v1"
"github.com/honeycombio/refinery/logger"
"github.com/honeycombio/refinery/metrics"
"github.com/honeycombio/refinery/transmit"

"github.com/gorilla/mux"
"github.com/honeycombio/refinery/sharder"
"github.com/klauspost/compress/zstd"
Expand Down Expand Up @@ -441,6 +444,28 @@ func TestOTLPHandler(t *testing.T) {
})
}

func TestDependencyInjection(t *testing.T) {
var g inject.Graph
err := g.Provide(
&inject.Object{Value: &Router{}},

&inject.Object{Value: &config.MockConfig{}},
&inject.Object{Value: &logger.NullLogger{}},
&inject.Object{Value: http.DefaultTransport, Name: "upstreamTransport"},
&inject.Object{Value: &transmit.MockTransmission{}, Name: "upstreamTransmission"},
&inject.Object{Value: &transmit.MockTransmission{}, Name: "peerTransmission"},
&inject.Object{Value: &TestSharder{}},
&inject.Object{Value: &collect.InMemCollector{}},
&inject.Object{Value: &metrics.NullMetrics{}, Name: "metrics"},
)
if err != nil {
t.Error(err)
}
if err := g.Populate(); err != nil {
t.Error(err)
}
}

func helperOTLPRequestSpansWithoutStatus() []*trace.Span {
now := time.Now()
return []*trace.Span{
Expand Down
2 changes: 1 addition & 1 deletion sample/sample.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ type Sampler interface {
type SamplerFactory struct {
Config config.Config `inject:""`
Logger logger.Logger `inject:""`
Metrics metrics.Metrics `inject:""`
Metrics metrics.Metrics `inject:"metrics"`
}

// GetSamplerImplementationForDataset returns the sampler implementation for the dataset,
Expand Down
26 changes: 26 additions & 0 deletions sample/sample_test.go
Original file line number Diff line number Diff line change
@@ -1,3 +1,29 @@
// +build all race

package sample

import (
"testing"

"github.com/facebookgo/inject"
"github.com/honeycombio/refinery/config"
"github.com/honeycombio/refinery/logger"
"github.com/honeycombio/refinery/metrics"
)

func TestDependencyInjection(t *testing.T) {
var g inject.Graph
err := g.Provide(
&inject.Object{Value: &SamplerFactory{}},

&inject.Object{Value: &config.MockConfig{}},
&inject.Object{Value: &logger.NullLogger{}},
&inject.Object{Value: &metrics.NullMetrics{}, Name: "metrics"},
)
if err != nil {
t.Error(err)
}
if err := g.Populate(); err != nil {
t.Error(err)
}
}
2 changes: 1 addition & 1 deletion transmit/transmit.go
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ const (
type DefaultTransmission struct {
Config config.Config `inject:""`
Logger logger.Logger `inject:""`
Metrics metrics.Metrics `inject:""`
Metrics metrics.Metrics `inject:"metrics"`
Version string `inject:"version"`
LibhClient *libhoney.Client

Expand Down
19 changes: 19 additions & 0 deletions transmit/transmit_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ package transmit
import (
"testing"

"github.com/facebookgo/inject"
"github.com/honeycombio/refinery/config"
"github.com/honeycombio/refinery/logger"
"github.com/honeycombio/refinery/metrics"
Expand All @@ -27,3 +28,21 @@ func TestDefaultTransmissionUpdatesUserAgentAdditionAfterStart(t *testing.T) {
assert.Nil(t, err)
assert.Equal(t, libhoney.UserAgentAddition, "refinery/test")
}

func TestDependencyInjection(t *testing.T) {
var g inject.Graph
err := g.Provide(
&inject.Object{Value: &DefaultTransmission{}},

&inject.Object{Value: &config.MockConfig{}},
&inject.Object{Value: &logger.NullLogger{}},
&inject.Object{Value: &metrics.NullMetrics{}, Name: "metrics"},
&inject.Object{Value: "test", Name: "version"},
)
if err != nil {
t.Error(err)
}
if err := g.Populate(); err != nil {
t.Error(err)
}
}