diff --git a/example/basic/main.go b/example/basic/main.go index a6ed1940d2c..c051acf86ca 100644 --- a/example/basic/main.go +++ b/example/basic/main.go @@ -21,10 +21,11 @@ import ( "go.opentelemetry.io/api/key" "go.opentelemetry.io/api/metric" "go.opentelemetry.io/api/trace" + "go.opentelemetry.io/global" ) var ( - tracer = trace.GlobalProvider().GetTracer("ex.com/basic") + tracer = global.TraceProvider().GetTracer("ex.com/basic") meter = metric.GlobalMeter() // TODO: should share resources ^^^? diff --git a/example/http-stackdriver/client/client.go b/example/http-stackdriver/client/client.go index 4e7aa3309a3..7a2421e7296 100644 --- a/example/http-stackdriver/client/client.go +++ b/example/http-stackdriver/client/client.go @@ -30,6 +30,7 @@ import ( "go.opentelemetry.io/api/key" "go.opentelemetry.io/api/trace" "go.opentelemetry.io/exporter/trace/stackdriver" + "go.opentelemetry.io/global" "go.opentelemetry.io/plugin/httptrace" sdktrace "go.opentelemetry.io/sdk/trace" ) @@ -53,12 +54,12 @@ func initTracer() { if err != nil { log.Fatal(err) } - trace.SetGlobalProvider(tp) + global.SetTraceProvider(tp) } func main() { initTracer() - tr := trace.GlobalProvider().GetTracer("stackdriver/example/client") + tr := global.TraceProvider().GetTracer("stackdriver/example/client") client := http.DefaultClient ctx := distributedcontext.NewContext(context.Background(), diff --git a/example/http-stackdriver/server/server.go b/example/http-stackdriver/server/server.go index 2672bdaf2a4..35dc27ce124 100644 --- a/example/http-stackdriver/server/server.go +++ b/example/http-stackdriver/server/server.go @@ -23,6 +23,7 @@ import ( "go.opentelemetry.io/api/distributedcontext" "go.opentelemetry.io/api/trace" "go.opentelemetry.io/exporter/trace/stackdriver" + "go.opentelemetry.io/global" "go.opentelemetry.io/plugin/httptrace" sdktrace "go.opentelemetry.io/sdk/trace" ) @@ -46,13 +47,13 @@ func initTracer() { if err != nil { log.Fatal(err) } - trace.SetGlobalProvider(tp) + global.SetTraceProvider(tp) } func main() { initTracer() - tr := trace.GlobalProvider().GetTracer("stackdriver/example/server") + tr := global.TraceProvider().GetTracer("stackdriver/example/server") helloHandler := func(w http.ResponseWriter, req *http.Request) { attrs, entries, spanCtx := httptrace.Extract(req.Context(), req) diff --git a/example/http/client/client.go b/example/http/client/client.go index b5f53c51f7f..134fe06d7b0 100644 --- a/example/http/client/client.go +++ b/example/http/client/client.go @@ -29,6 +29,7 @@ import ( "go.opentelemetry.io/api/key" "go.opentelemetry.io/api/trace" "go.opentelemetry.io/exporter/trace/stdout" + "go.opentelemetry.io/global" "go.opentelemetry.io/plugin/httptrace" sdktrace "go.opentelemetry.io/sdk/trace" ) @@ -49,7 +50,7 @@ func initTracer() { if err != nil { log.Fatal(err) } - trace.SetGlobalProvider(tp) + global.SetTraceProvider(tp) } func main() { @@ -62,7 +63,7 @@ func main() { var body []byte - tr := trace.GlobalProvider().GetTracer("example/client") + tr := global.TraceProvider().GetTracer("example/client") err := tr.WithSpan(ctx, "say hello", func(ctx context.Context) error { req, _ := http.NewRequest("GET", "http://localhost:7777/hello", nil) diff --git a/example/http/server/server.go b/example/http/server/server.go index a43913f9d74..011dcb60164 100644 --- a/example/http/server/server.go +++ b/example/http/server/server.go @@ -22,6 +22,7 @@ import ( "go.opentelemetry.io/api/distributedcontext" "go.opentelemetry.io/api/trace" "go.opentelemetry.io/exporter/trace/stdout" + "go.opentelemetry.io/global" "go.opentelemetry.io/plugin/httptrace" sdktrace "go.opentelemetry.io/sdk/trace" ) @@ -42,12 +43,12 @@ func initTracer() { if err != nil { log.Fatal(err) } - trace.SetGlobalProvider(tp) + global.SetTraceProvider(tp) } func main() { initTracer() - tr := trace.GlobalProvider().GetTracer("example/server") + tr := global.TraceProvider().GetTracer("example/server") helloHandler := func(w http.ResponseWriter, req *http.Request) { attrs, entries, spanCtx := httptrace.Extract(req.Context(), req) diff --git a/example/namedtracer/foo/foo.go b/example/namedtracer/foo/foo.go index e14adf9eef2..a42f159dcb6 100644 --- a/example/namedtracer/foo/foo.go +++ b/example/namedtracer/foo/foo.go @@ -19,6 +19,7 @@ import ( "go.opentelemetry.io/api/key" "go.opentelemetry.io/api/trace" + "go.opentelemetry.io/global" ) var ( @@ -31,7 +32,7 @@ func SubOperation(ctx context.Context) error { // Using global provider. Alternative is to have application provide a getter // for its component to get the instance of the provider. - tr := trace.GlobalProvider().GetTracer("example/namedtracer/foo") + tr := global.TraceProvider().GetTracer("example/namedtracer/foo") return tr.WithSpan( ctx, "Sub operation...", diff --git a/example/namedtracer/main.go b/example/namedtracer/main.go index f0285837f6f..4494e2f8791 100644 --- a/example/namedtracer/main.go +++ b/example/namedtracer/main.go @@ -23,6 +23,7 @@ import ( "go.opentelemetry.io/api/trace" "go.opentelemetry.io/example/namedtracer/foo" "go.opentelemetry.io/exporter/trace/stdout" + "go.opentelemetry.io/global" sdktrace "go.opentelemetry.io/sdk/trace" ) @@ -47,7 +48,7 @@ func initTracer() { if err != nil { log.Panicf("failed to initialize trace provider %v\n", err) } - trace.SetGlobalProvider(tp) + global.SetTraceProvider(tp) } func main() { diff --git a/experimental/bridge/opentracing/mix_test.go b/experimental/bridge/opentracing/mix_test.go index dda0297b836..3f2b32d4ec5 100644 --- a/experimental/bridge/opentracing/mix_test.go +++ b/experimental/bridge/opentracing/mix_test.go @@ -25,6 +25,7 @@ import ( otelcore "go.opentelemetry.io/api/core" oteltrace "go.opentelemetry.io/api/trace" + "go.opentelemetry.io/global" "go.opentelemetry.io/experimental/bridge/opentracing/internal" ) @@ -118,7 +119,7 @@ func TestMixedAPIs(t *testing.T) { }) ctx := context.Background() - oteltrace.SetGlobalProvider(otelProvider) + global.SetTraceProvider(otelProvider) ot.SetGlobalTracer(otTracer) tc.setup(t, mockOtelTracer) @@ -424,7 +425,7 @@ func (tm *tracerMessTest) setup(t *testing.T, tracer *internal.MockTracer) { func (tm *tracerMessTest) check(t *testing.T, tracer *internal.MockTracer) { globalOtTracer := ot.GlobalTracer() - globalOtelTracer := oteltrace.GlobalProvider().GetTracer("") + globalOtelTracer := global.TraceProvider().GetTracer("") if len(tm.recordedOTSpanTracers) != 3 { t.Errorf("Expected 3 recorded OpenTracing tracers from spans, got %d", len(tm.recordedOTSpanTracers)) } @@ -543,7 +544,7 @@ func min(a, b int) int { } func runOtelOTOtel(t *testing.T, ctx context.Context, name string, callback func(*testing.T, context.Context)) { - tr := oteltrace.GlobalProvider().GetTracer("") + tr := global.TraceProvider().GetTracer("") ctx, span := tr.Start(ctx, fmt.Sprintf("%s_Otel_OTOtel", name), oteltrace.WithSpanKind(oteltrace.SpanKindClient)) defer span.End() callback(t, ctx) @@ -560,7 +561,7 @@ func runOtelOTOtel(t *testing.T, ctx context.Context, name string, callback func } func runOTOtelOT(t *testing.T, ctx context.Context, name string, callback func(*testing.T, context.Context)) { - tr := oteltrace.GlobalProvider().GetTracer("") + tr := global.TraceProvider().GetTracer("") span, ctx := ot.StartSpanFromContext(ctx, fmt.Sprintf("%s_OT_OtelOT", name), ot.Tag{Key: "span.kind", Value: "client"}) defer span.Finish() callback(t, ctx) diff --git a/exporter/trace/jaeger/example/main.go b/exporter/trace/jaeger/example/main.go index 5a5824fecba..df74489ad52 100644 --- a/exporter/trace/jaeger/example/main.go +++ b/exporter/trace/jaeger/example/main.go @@ -23,8 +23,8 @@ import ( "go.opentelemetry.io/api/core" "go.opentelemetry.io/api/key" - apitrace "go.opentelemetry.io/api/trace" "go.opentelemetry.io/exporter/trace/jaeger" + "go.opentelemetry.io/global" sdktrace "go.opentelemetry.io/sdk/trace" ) @@ -45,7 +45,6 @@ func initTracer() func() { if err != nil { log.Fatal(err) } - exporter.RegisterSimpleSpanProcessor() // For demoing purposes, always sample. In a production application, you should // configure this to a trace.ProbabilitySampler set at the desired @@ -56,7 +55,7 @@ func initTracer() func() { if err != nil { log.Fatal(err) } - apitrace.SetGlobalProvider(tp) + global.SetTraceProvider(tp) return func() { exporter.Flush() } @@ -68,14 +67,14 @@ func main() { ctx := context.Background() - tr := apitrace.GlobalProvider().GetTracer("component-main") + tr := global.TraceProvider().GetTracer("component-main") ctx, span := tr.Start(ctx, "/foo") bar(ctx) span.End() } func bar(ctx context.Context) { - tr := apitrace.GlobalProvider().GetTracer("component-bar") + tr := global.TraceProvider().GetTracer("component-bar") _, span := tr.Start(ctx, "/bar") defer span.End() diff --git a/api/trace/global.go b/global/global.go similarity index 61% rename from api/trace/global.go rename to global/global.go index 8a0f88bfc8e..cc5377d2724 100644 --- a/api/trace/global.go +++ b/global/global.go @@ -12,28 +12,32 @@ // See the License for the specific language governing permissions and // limitations under the License. -package trace +package global -import "sync/atomic" +import ( + "sync/atomic" + + "go.opentelemetry.io/api/trace" +) type globalProvider struct { - p Provider + p trace.Provider } var globalP atomic.Value -// GlobalProvider returns trace provider registered with global registry. -// If no trace provider is registered then an instance of NoopTraceProvider is returned. +// TraceProvider returns the registered global trace provider. +// If none is registered then an instance of NoopTraceProvider is returned. // Use the trace provider to create a named tracer. E.g. -// tracer := trace.GlobalProvider().GetTracer("example.com/foo") -func GlobalProvider() Provider { +// tracer := global.TraceProvider().GetTracer("example.com/foo") +func TraceProvider() trace.Provider { if gp := globalP.Load(); gp != nil { return gp.(globalProvider).p } - return NoopTraceProvider{} + return trace.NoopTraceProvider{} } -// SetGlobalProvider sets the provider as a global trace provider. -func SetGlobalProvider(m Provider) { - globalP.Store(globalProvider{p: m}) +// SetTraceProvider registers p as the global trace provider. +func SetTraceProvider(p trace.Provider) { + globalP.Store(globalProvider{p: p}) } diff --git a/api/trace/global_test.go b/global/global_test.go similarity index 87% rename from api/trace/global_test.go rename to global/global_test.go index c5a3548e701..9bf475b5824 100644 --- a/api/trace/global_test.go +++ b/global/global_test.go @@ -12,12 +12,13 @@ // See the License for the specific language governing permissions and // limitations under the License. -package trace_test +package global_test import ( "testing" "go.opentelemetry.io/api/trace" + "go.opentelemetry.io/global" ) type TestProvider1 struct { @@ -33,10 +34,10 @@ func TestMulitpleGlobalProvider(t *testing.T) { p1 := TestProvider1{} p2 := trace.NoopTraceProvider{} - trace.SetGlobalProvider(&p1) - trace.SetGlobalProvider(&p2) + global.SetTraceProvider(&p1) + global.SetTraceProvider(&p2) - got := trace.GlobalProvider() + got := global.TraceProvider() want := &p2 if got != want { t.Fatalf("Provider: got %p, want %p\n", got, want) diff --git a/plugin/httptrace/clienttrace.go b/plugin/httptrace/clienttrace.go index 519f611fc25..878c49817d7 100644 --- a/plugin/httptrace/clienttrace.go +++ b/plugin/httptrace/clienttrace.go @@ -28,6 +28,7 @@ import ( "go.opentelemetry.io/api/core" "go.opentelemetry.io/api/key" "go.opentelemetry.io/api/trace" + "go.opentelemetry.io/global" ) var ( @@ -54,7 +55,7 @@ func newClientTracer(ctx context.Context) *clientTracer { Context: ctx, levels: make(map[string]trace.Span), } - ct.tr = trace.GlobalProvider().GetTracer("go.opentelemetry.io/plugin/httptrace") + ct.tr = global.TraceProvider().GetTracer("go.opentelemetry.io/plugin/httptrace") ct.open("http.request") return ct } diff --git a/plugin/othttp/handler.go b/plugin/othttp/handler.go index 49d957a261e..6fe50eefc32 100644 --- a/plugin/othttp/handler.go +++ b/plugin/othttp/handler.go @@ -21,6 +21,7 @@ import ( "go.opentelemetry.io/api/core" "go.opentelemetry.io/api/propagation" "go.opentelemetry.io/api/trace" + "go.opentelemetry.io/global" prop "go.opentelemetry.io/propagation" ) @@ -129,7 +130,7 @@ func WithMessageEvents(events ...event) Option { func NewHandler(handler http.Handler, operation string, opts ...Option) http.Handler { h := Handler{handler: handler, operation: operation} defaultOpts := []Option{ - WithTracer(trace.GlobalProvider().GetTracer("go.opentelemtry.io/plugin/othttp")), + WithTracer(global.TraceProvider().GetTracer("go.opentelemtry.io/plugin/othttp")), WithPropagator(prop.HTTPTraceContextPropagator{}), WithSpanOptions(trace.WithSpanKind(trace.SpanKindServer)), } diff --git a/plugin/othttp/handler_example_test.go b/plugin/othttp/handler_example_test.go index 9f4bdd0c4f1..aaee807031b 100644 --- a/plugin/othttp/handler_example_test.go +++ b/plugin/othttp/handler_example_test.go @@ -25,6 +25,7 @@ import ( "go.opentelemetry.io/api/core" "go.opentelemetry.io/api/trace" "go.opentelemetry.io/exporter/trace/stdout" + "go.opentelemetry.io/global" "go.opentelemetry.io/plugin/othttp" sdktrace "go.opentelemetry.io/sdk/trace" ) @@ -55,7 +56,7 @@ func ExampleNewHandler() { if err != nil { log.Fatal(err) } - trace.SetGlobalProvider(tp) + global.SetTraceProvider(tp) figureOutName := func(ctx context.Context, s string) (string, error) { pp := strings.SplitN(s, "/", 2)