Skip to content

Commit

Permalink
Add metrics qualifiers for structs that inject metrics (#237)
Browse files Browse the repository at this point in the history
* add metrics qualifiers for structs that inject metrics

* add tests for verifying named metrics dependencies
  • Loading branch information
MikeGoldsmith authored Mar 25, 2021
1 parent 1f9bb9b commit 76ab1a9
Show file tree
Hide file tree
Showing 10 changed files with 102 additions and 13 deletions.
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)
}
}

0 comments on commit 76ab1a9

Please sign in to comment.