Skip to content

Commit faaf7c0

Browse files
XSAMMrAlias
andauthored
Unify instrumentation *Provider options (#303)
* Unify instrumentation options for mongo-driver * Unify instrumentation options for gin * Unify instrumentation options for gorilla * Unify instrumentation options for labstack echo * Unify instrumentation options for go-restful * Unify instrumentation options for gomemcache * Unify instrumentation options for sarama * Unify instrumentation options for net/http * Unify instrumentation options for beego * Update instrumentation guidelines about uniform *Provider options * update CHANGELOG * Update guidelines * Fix naming and remove unnecessary fields * Avoid the escalation of a test failure to panic * Make config struct of instrumentation unexported * Update style guide * Update CHANGELOG Co-authored-by: Tyler Yahn <[email protected]>
1 parent dc7145c commit faaf7c0

File tree

40 files changed

+353
-329
lines changed

40 files changed

+353
-329
lines changed

CHANGELOG.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,13 @@ This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.htm
1313
- Benchmark tests for the gRPC instrumentation. (#296)
1414
- Integration testing for the gRPC instrumentation. (#297)
1515

16+
### Changed
17+
18+
- Unify instrumentation about provider options for `go.mongodb.org/mongo-driver`, `gin-gonic/gin`, `gorilla/mux`,
19+
`labstack/echo`, `emicklei/go-restful`, `bradfitz/gomemcache`, `Shopify/sarama`, `net/http` and `beego`. (#303)
20+
- Update instrumentation guidelines about uniform provider options. Also, update style guide. (#303)
21+
- Make config struct of instrumentation unexported. (#303)
22+
1623
## [0.11.0] - 2020-08-25
1724

1825
### Added

CONTRIBUTING.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,7 @@ Any Maintainer can merge the PR once it is **ready to merge**.
9191

9292
* Make sure to run `make precommit` - this will find and fix the code
9393
formatting.
94+
* Check [opentelemetry-go Style Guide](https://github.com/open-telemetry/opentelemetry-go/blob/master/CONTRIBUTING.md#style-guide)
9495

9596
## Adding a new Contrib package
9697

instrumentation/README.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,10 @@ Additionally the following guidelines for package composition need to be followe
3535
This documentation SHOULD be in a dedicated `doc.go` file if the package is more than one file.
3636
It SHOULD contain useful information like what the purpose of the instrumentation is, how to use it, and any compatibility restrictions that might exist.
3737
- Examples of how to actually use the instrumentation SHOULD be included.
38+
- All instrumentation packages MUST provide an option to accept a `TracerProvider` if it uses a Tracer, a `MeterProvider` if it uses a Meter, and `Propagators` if it handles any context propagation.
39+
Also, packages MUST use the default `TracerProvider`, `MeterProvider`, and `Propagators` supplied by the `global` package if no optional one is provided.
40+
- All instrumentation packages MUST NOT provide an option to accept a `Tracer` or `Meter`.
41+
- All instrumentation packages MUST create any used `Tracer` or `Meter` with a name matching the instrumentation package name.
3842

3943
## Additional Instrumentation Packages
4044

instrumentation/github.com/Shopify/sarama/consumer_test.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ func TestWrapPartitionConsumer(t *testing.T) {
5353
partitionConsumer, err := consumer.ConsumePartition(topic, 0, 0)
5454
require.NoError(t, err)
5555

56-
partitionConsumer = WrapPartitionConsumer(partitionConsumer, WithTraceProvider(provider))
56+
partitionConsumer = WrapPartitionConsumer(partitionConsumer, WithTracerProvider(provider))
5757

5858
consumeAndCheck(t, mt, mockPartitionConsumer, partitionConsumer)
5959
}
@@ -67,7 +67,7 @@ func TestWrapConsumer(t *testing.T) {
6767
mockPartitionConsumer := mockConsumer.ExpectConsumePartition(topic, 0, 0)
6868

6969
// Wrap consumer
70-
consumer := WrapConsumer(mockConsumer, WithTraceProvider(provider))
70+
consumer := WrapConsumer(mockConsumer, WithTracerProvider(provider))
7171

7272
// Create partition consumer
7373
partitionConsumer, err := consumer.ConsumePartition(topic, 0, 0)
@@ -170,7 +170,7 @@ func BenchmarkWrapPartitionConsumer(b *testing.B) {
170170

171171
mockPartitionConsumer, partitionConsumer := createMockPartitionConsumer(b)
172172

173-
partitionConsumer = WrapPartitionConsumer(partitionConsumer, WithTraceProvider(provider))
173+
partitionConsumer = WrapPartitionConsumer(partitionConsumer, WithTracerProvider(provider))
174174
message := sarama.ConsumerMessage{Key: []byte("foo")}
175175

176176
b.ReportAllocs()

instrumentation/github.com/Shopify/sarama/option.go

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -28,35 +28,35 @@ const (
2828
)
2929

3030
type config struct {
31-
TraceProvider trace.Provider
32-
Propagators otelpropagation.Propagators
31+
TracerProvider trace.Provider
32+
Propagators otelpropagation.Propagators
3333

3434
Tracer trace.Tracer
3535
}
3636

3737
// newConfig returns a config with all Options set.
3838
func newConfig(opts ...Option) config {
3939
cfg := config{
40-
Propagators: global.Propagators(),
41-
TraceProvider: global.TraceProvider(),
40+
Propagators: global.Propagators(),
41+
TracerProvider: global.TraceProvider(),
4242
}
4343
for _, opt := range opts {
4444
opt(&cfg)
4545
}
4646

47-
cfg.Tracer = cfg.TraceProvider.Tracer(defaultTracerName)
47+
cfg.Tracer = cfg.TracerProvider.Tracer(defaultTracerName)
4848

4949
return cfg
5050
}
5151

5252
// Option specifies instrumentation configuration options.
5353
type Option func(*config)
5454

55-
// WithTraceProvider specifies a trace provider to use for creating a tracer for spans.
55+
// WithTracerProvider specifies a tracer provider to use for creating a tracer.
5656
// If none is specified, the global provider is used.
57-
func WithTraceProvider(provider trace.Provider) Option {
57+
func WithTracerProvider(provider trace.Provider) Option {
5858
return func(cfg *config) {
59-
cfg.TraceProvider = provider
59+
cfg.TracerProvider = provider
6060
}
6161
}
6262

instrumentation/github.com/Shopify/sarama/option_test.go

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -31,12 +31,12 @@ func TestNewConfig(t *testing.T) {
3131
{
3232
name: "with provider",
3333
opts: []Option{
34-
WithTraceProvider(global.TraceProvider()),
34+
WithTracerProvider(global.TraceProvider()),
3535
},
3636
expected: config{
37-
TraceProvider: global.TraceProvider(),
38-
Tracer: global.TraceProvider().Tracer(defaultTracerName),
39-
Propagators: global.Propagators(),
37+
TracerProvider: global.TraceProvider(),
38+
Tracer: global.TraceProvider().Tracer(defaultTracerName),
39+
Propagators: global.Propagators(),
4040
},
4141
},
4242
{
@@ -45,9 +45,9 @@ func TestNewConfig(t *testing.T) {
4545
WithPropagators(nil),
4646
},
4747
expected: config{
48-
TraceProvider: global.TraceProvider(),
49-
Tracer: global.TraceProvider().Tracer(defaultTracerName),
50-
Propagators: nil,
48+
TracerProvider: global.TraceProvider(),
49+
Tracer: global.TraceProvider().Tracer(defaultTracerName),
50+
Propagators: nil,
5151
},
5252
},
5353
}

instrumentation/github.com/Shopify/sarama/producer_test.go

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ func TestWrapSyncProducer(t *testing.T) {
5252
mockSyncProducer := mocks.NewSyncProducer(t, cfg)
5353

5454
// Wrap sync producer
55-
syncProducer := WrapSyncProducer(cfg, mockSyncProducer, WithTraceProvider(provider))
55+
syncProducer := WrapSyncProducer(cfg, mockSyncProducer, WithTracerProvider(provider))
5656

5757
// Create message with span context
5858
ctx, _ := mt.Start(context.Background(), "")
@@ -167,7 +167,7 @@ func TestWrapAsyncProducer(t *testing.T) {
167167

168168
cfg := newSaramaConfig()
169169
mockAsyncProducer := mocks.NewAsyncProducer(t, cfg)
170-
ap := WrapAsyncProducer(cfg, mockAsyncProducer, WithTraceProvider(provider))
170+
ap := WrapAsyncProducer(cfg, mockAsyncProducer, WithTracerProvider(provider))
171171

172172
msgList := createMessages(mt)
173173
// Send message
@@ -237,7 +237,7 @@ func TestWrapAsyncProducer(t *testing.T) {
237237
cfg.Producer.Return.Successes = true
238238

239239
mockAsyncProducer := mocks.NewAsyncProducer(t, cfg)
240-
ap := WrapAsyncProducer(cfg, mockAsyncProducer, WithTraceProvider(provider))
240+
ap := WrapAsyncProducer(cfg, mockAsyncProducer, WithTracerProvider(provider))
241241

242242
msgList := createMessages(mt)
243243
// Send message
@@ -315,7 +315,7 @@ func TestWrapAsyncProducerError(t *testing.T) {
315315
cfg.Producer.Return.Successes = true
316316

317317
mockAsyncProducer := mocks.NewAsyncProducer(t, cfg)
318-
ap := WrapAsyncProducer(cfg, mockAsyncProducer, WithTraceProvider(provider))
318+
ap := WrapAsyncProducer(cfg, mockAsyncProducer, WithTracerProvider(provider))
319319

320320
mockAsyncProducer.ExpectInputAndFail(errors.New("test"))
321321
ap.Input() <- &sarama.ProducerMessage{Topic: topic, Key: sarama.StringEncoder("foo2")}
@@ -349,7 +349,7 @@ func BenchmarkWrapSyncProducer(b *testing.B) {
349349
mockSyncProducer := mocks.NewSyncProducer(b, cfg)
350350

351351
// Wrap sync producer
352-
syncProducer := WrapSyncProducer(cfg, mockSyncProducer, WithTraceProvider(provider))
352+
syncProducer := WrapSyncProducer(cfg, mockSyncProducer, WithTracerProvider(provider))
353353
message := sarama.ProducerMessage{Key: sarama.StringEncoder("foo")}
354354

355355
b.ReportAllocs()
@@ -390,7 +390,7 @@ func BenchmarkWrapAsyncProducer(b *testing.B) {
390390
mockAsyncProducer := mocks.NewAsyncProducer(b, cfg)
391391

392392
// Wrap sync producer
393-
asyncProducer := WrapAsyncProducer(cfg, mockAsyncProducer, WithTraceProvider(provider))
393+
asyncProducer := WrapAsyncProducer(cfg, mockAsyncProducer, WithTracerProvider(provider))
394394
message := sarama.ProducerMessage{Key: sarama.StringEncoder("foo")}
395395

396396
b.ReportAllocs()

instrumentation/github.com/astaxie/beego/beego.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -67,8 +67,8 @@ func NewOTelBeegoMiddleWare(service string, options ...Option) beego.MiddleWare
6767
cfg := configure(options...)
6868

6969
httpOptions := []otelhttp.Option{
70-
otelhttp.WithTracer(cfg.traceProvider.Tracer(packageName)),
71-
otelhttp.WithMeter(cfg.meterProvider.Meter(packageName)),
70+
otelhttp.WithTracerProvider(cfg.tracerProvider),
71+
otelhttp.WithMeterProvider(cfg.meterProvider),
7272
otelhttp.WithPropagators(cfg.propagators),
7373
}
7474

instrumentation/github.com/astaxie/beego/beego_test.go

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -43,16 +43,16 @@ import (
4343

4444
// ------------------------------------------ Mock Trace Provider
4545

46-
type MockTraceProvider struct {
46+
type MockTracerProvider struct {
4747
tracer *mocktrace.Tracer
4848
}
4949

50-
func (m *MockTraceProvider) Tracer(name string, options ...trace.TracerOption) trace.Tracer {
50+
func (m *MockTracerProvider) Tracer(name string, options ...trace.TracerOption) trace.Tracer {
5151
return m.tracer
5252
}
5353

54-
func NewTraceProvider() *MockTraceProvider {
55-
return &MockTraceProvider{
54+
func NewTracerProvider() *MockTracerProvider {
55+
return &MockTracerProvider{
5656
tracer: mocktrace.NewTracer(packageName),
5757
}
5858
}
@@ -205,7 +205,7 @@ func TestSpanFromContextDefaultProvider(t *testing.T) {
205205
defer replaceBeego()
206206
_, provider := mockmeter.NewProvider()
207207
global.SetMeterProvider(provider)
208-
global.SetTraceProvider(NewTraceProvider())
208+
global.SetTraceProvider(NewTracerProvider())
209209
router := beego.NewControllerRegister()
210210
router.Get("/hello-with-span", func(ctx *beegoCtx.Context) {
211211
assertSpanFromContext(ctx.Request.Context(), t)
@@ -238,7 +238,7 @@ func TestSpanFromContextCustomProvider(t *testing.T) {
238238

239239
mw := NewOTelBeegoMiddleWare(
240240
middleWareName,
241-
WithTraceProvider(NewTraceProvider()),
241+
WithTracerProvider(NewTracerProvider()),
242242
WithMeterProvider(provider),
243243
)
244244

@@ -249,7 +249,7 @@ func TestSpanFromContextCustomProvider(t *testing.T) {
249249

250250
func TestStatic(t *testing.T) {
251251
defer replaceBeego()
252-
traceProvider := NewTraceProvider()
252+
tracerProvider := NewTracerProvider()
253253
meterimpl, meterProvider := mockmeter.NewProvider()
254254
file, err := ioutil.TempFile("", "static-*.html")
255255
require.NoError(t, err)
@@ -261,7 +261,7 @@ func TestStatic(t *testing.T) {
261261
defer beego.SetStaticPath("/", "")
262262

263263
mw := NewOTelBeegoMiddleWare(middleWareName,
264-
WithTraceProvider(traceProvider),
264+
WithTracerProvider(tracerProvider),
265265
WithMeterProvider(meterProvider),
266266
)
267267

@@ -278,7 +278,7 @@ func TestStatic(t *testing.T) {
278278
body, err := ioutil.ReadAll(rr.Result().Body)
279279
require.NoError(t, err)
280280
require.Equal(t, "<h1>Hello, world!</h1>", string(body))
281-
spans := traceProvider.tracer.EndedSpans()
281+
spans := tracerProvider.tracer.EndedSpans()
282282
require.Len(t, spans, 1)
283283
assertSpan(t, spans[0], tc)
284284
assertMetrics(t, meterimpl.MeasurementBatches, tc)
@@ -308,11 +308,11 @@ func TestRender(t *testing.T) {
308308
beego.SetViewsPath(dir)
309309
_, tplName = filepath.Split(file.Name())
310310

311-
traceProvider := NewTraceProvider()
311+
tracerProvider := NewTracerProvider()
312312

313313
mw := NewOTelBeegoMiddleWare(
314314
middleWareName,
315-
WithTraceProvider(traceProvider),
315+
WithTracerProvider(tracerProvider),
316316
)
317317
for _, str := range []string{"/render", "/renderstring", "/renderbytes"} {
318318
rr := httptest.NewRecorder()
@@ -324,7 +324,7 @@ func TestRender(t *testing.T) {
324324
require.NoError(t, err)
325325
}
326326

327-
spans := traceProvider.tracer.EndedSpans()
327+
spans := tracerProvider.tracer.EndedSpans()
328328
require.Len(t, spans, 6) // 3 HTTP requests, each creating 2 spans
329329
for _, span := range spans {
330330
switch span.Name {
@@ -347,7 +347,7 @@ func TestRender(t *testing.T) {
347347
// ------------------------------------------ Utilities
348348

349349
func runTest(t *testing.T, tc *testCase, url string) {
350-
traceProvider := NewTraceProvider()
350+
tracerProvider := NewTracerProvider()
351351
meterimpl, meterProvider := mockmeter.NewProvider()
352352
addTestRoutes(t)
353353
defer replaceBeego()
@@ -366,7 +366,7 @@ func runTest(t *testing.T, tc *testCase, url string) {
366366
middleWareName,
367367
append(
368368
tc.options,
369-
WithTraceProvider(traceProvider),
369+
WithTracerProvider(tracerProvider),
370370
WithMeterProvider(meterProvider),
371371
)...,
372372
)
@@ -380,7 +380,7 @@ func runTest(t *testing.T, tc *testCase, url string) {
380380
require.NoError(t, json.Unmarshal(body, &message))
381381
require.Equal(t, tc.expectedResponse, message)
382382

383-
spans := traceProvider.tracer.EndedSpans()
383+
spans := tracerProvider.tracer.EndedSpans()
384384
if tc.hasSpan {
385385
require.Len(t, spans, 1)
386386
assertSpan(t, spans[0], tc)

0 commit comments

Comments
 (0)