1
0
mirror of https://github.com/open-telemetry/opentelemetry-go.git synced 2025-07-15 01:04:25 +02:00

add shorter version for global providers (#538)

This commit is contained in:
Gustavo Silva Paiva
2020-03-11 12:23:32 -03:00
committed by GitHub
parent 9674c81cb7
commit 85751428a3
16 changed files with 49 additions and 29 deletions

View File

@ -54,7 +54,7 @@ func initTracer() {
func main() { func main() {
initTracer() initTracer()
tracer := global.TraceProvider().Tracer("ex.com/basic") tracer := global.Tracer("ex.com/basic")
tracer.WithSpan(context.Background(), "foo", tracer.WithSpan(context.Background(), "foo",
func(ctx context.Context) error { func(ctx context.Context) error {

View File

@ -21,11 +21,21 @@ import (
"go.opentelemetry.io/otel/api/trace" "go.opentelemetry.io/otel/api/trace"
) )
// Tracer creates a named tracer that implements Tracer interface.
// If the name is an empty string then provider uses default name.
//
// This is short for TraceProvider().Tracer(name)
func Tracer(name string) trace.Tracer {
return TraceProvider().Tracer(name)
}
// TraceProvider returns the registered global trace provider. // TraceProvider returns the registered global trace provider.
// If none is registered then an instance of trace.NoopProvider is returned. // If none is registered then an instance of trace.NoopProvider is returned.
// //
// Use the trace provider to create a named tracer. E.g. // Use the trace provider to create a named tracer. E.g.
// tracer := global.TraceProvider().Tracer("example.com/foo") // tracer := global.TraceProvider().Tracer("example.com/foo")
// or
// tracer := global.Tracer("example.com/foo")
func TraceProvider() trace.Provider { func TraceProvider() trace.Provider {
return internal.TraceProvider() return internal.TraceProvider()
} }
@ -35,12 +45,22 @@ func SetTraceProvider(tp trace.Provider) {
internal.SetTraceProvider(tp) internal.SetTraceProvider(tp)
} }
// Meter gets a named Meter interface. If the name is an
// empty string, the provider uses a default name.
//
// This is short for MeterProvider().Meter(name)
func Meter(name string) metric.Meter {
return MeterProvider().Meter(name)
}
// MeterProvider returns the registered global meter provider. If // MeterProvider returns the registered global meter provider. If
// none is registered then a default meter provider is returned that // none is registered then a default meter provider is returned that
// forwards the Meter interface to the first registered Meter. // forwards the Meter interface to the first registered Meter.
// //
// Use the meter provider to create a named meter. E.g. // Use the meter provider to create a named meter. E.g.
// meter := global.MeterProvider().Meter("example.com/foo") // meter := global.MeterProvider().Meter("example.com/foo")
// or
// meter := global.Meter("example.com/foo")
func MeterProvider() metric.Provider { func MeterProvider() metric.Provider {
return internal.MeterProvider() return internal.MeterProvider()
} }

View File

@ -70,7 +70,7 @@ func (fix *benchFixture) Meter(name string) metric.Meter {
func BenchmarkGlobalInt64CounterAddNoSDK(b *testing.B) { func BenchmarkGlobalInt64CounterAddNoSDK(b *testing.B) {
internal.ResetForTest() internal.ResetForTest()
ctx := context.Background() ctx := context.Background()
sdk := global.MeterProvider().Meter("test") sdk := global.Meter("test")
labs := sdk.Labels(key.String("A", "B")) labs := sdk.Labels(key.String("A", "B"))
cnt := sdk.NewInt64Counter("int64.counter") cnt := sdk.NewInt64Counter("int64.counter")
@ -86,7 +86,7 @@ func BenchmarkGlobalInt64CounterAddWithSDK(b *testing.B) {
ctx := context.Background() ctx := context.Background()
fix := newFixture(b) fix := newFixture(b)
sdk := global.MeterProvider().Meter("test") sdk := global.Meter("test")
global.SetMeterProvider(fix) global.SetMeterProvider(fix)
@ -103,7 +103,7 @@ func BenchmarkGlobalInt64CounterAddWithSDK(b *testing.B) {
func BenchmarkStartEndSpan(b *testing.B) { func BenchmarkStartEndSpan(b *testing.B) {
// Comapare with BenchmarkStartEndSpan() in ../../sdk/trace/benchmark_test.go // Comapare with BenchmarkStartEndSpan() in ../../sdk/trace/benchmark_test.go
traceBenchmark(b, func(b *testing.B) { traceBenchmark(b, func(b *testing.B) {
t := global.TraceProvider().Tracer("Benchmark StartEndSpan") t := global.Tracer("Benchmark StartEndSpan")
ctx := context.Background() ctx := context.Background()
b.ResetTimer() b.ResetTimer()
for i := 0; i < b.N; i++ { for i := 0; i < b.N; i++ {

View File

@ -21,8 +21,8 @@ func TestDirect(t *testing.T) {
internal.ResetForTest() internal.ResetForTest()
ctx := context.Background() ctx := context.Background()
meter1 := global.MeterProvider().Meter("test1") meter1 := global.Meter("test1")
meter2 := global.MeterProvider().Meter("test2") meter2 := global.Meter("test2")
lvals1 := key.String("A", "B") lvals1 := key.String("A", "B")
labels1 := meter1.Labels(lvals1) labels1 := meter1.Labels(lvals1)
lvals2 := key.String("C", "D") lvals2 := key.String("C", "D")
@ -141,7 +141,7 @@ func TestBound(t *testing.T) {
// Note: this test uses opposite Float64/Int64 number kinds // Note: this test uses opposite Float64/Int64 number kinds
// vs. the above, to cover all the instruments. // vs. the above, to cover all the instruments.
ctx := context.Background() ctx := context.Background()
glob := global.MeterProvider().Meter("test") glob := global.Meter("test")
lvals1 := key.String("A", "B") lvals1 := key.String("A", "B")
labels1 := glob.Labels(lvals1) labels1 := glob.Labels(lvals1)
@ -191,7 +191,7 @@ func TestUnbind(t *testing.T) {
// Tests Unbind with SDK never installed. // Tests Unbind with SDK never installed.
internal.ResetForTest() internal.ResetForTest()
glob := global.MeterProvider().Meter("test") glob := global.Meter("test")
lvals1 := key.New("A").String("B") lvals1 := key.New("A").String("B")
labels1 := glob.Labels(lvals1) labels1 := glob.Labels(lvals1)
@ -214,7 +214,7 @@ func TestDefaultSDK(t *testing.T) {
internal.ResetForTest() internal.ResetForTest()
ctx := context.Background() ctx := context.Background()
meter1 := global.MeterProvider().Meter("builtin") meter1 := global.Meter("builtin")
lvals1 := key.String("A", "B") lvals1 := key.String("A", "B")
labels1 := meter1.Labels(lvals1) labels1 := meter1.Labels(lvals1)
@ -251,7 +251,7 @@ func TestUnbindThenRecordOne(t *testing.T) {
ctx := context.Background() ctx := context.Background()
sdk := metrictest.NewProvider() sdk := metrictest.NewProvider()
meter := global.MeterProvider().Meter("test") meter := global.Meter("test")
counter := meter.NewInt64Counter("test.counter") counter := meter.NewInt64Counter("test.counter")
boundC := counter.Bind(meter.Labels()) boundC := counter.Bind(meter.Labels())
global.SetMeterProvider(sdk) global.SetMeterProvider(sdk)
@ -260,6 +260,6 @@ func TestUnbindThenRecordOne(t *testing.T) {
require.NotPanics(t, func() { require.NotPanics(t, func() {
boundC.Add(ctx, 1) boundC.Add(ctx, 1)
}) })
mock := global.MeterProvider().Meter("test").(*metrictest.Meter) mock := global.Meter("test").(*metrictest.Meter)
require.Equal(t, 0, len(mock.MeasurementBatches)) require.Equal(t, 0, len(mock.MeasurementBatches))
} }

View File

@ -441,7 +441,7 @@ func (tm *tracerMessTest) setup(t *testing.T, tracer *internal.MockTracer) {
func (tm *tracerMessTest) check(t *testing.T, tracer *internal.MockTracer) { func (tm *tracerMessTest) check(t *testing.T, tracer *internal.MockTracer) {
globalOtTracer := ot.GlobalTracer() globalOtTracer := ot.GlobalTracer()
globalOtelTracer := otelglobal.TraceProvider().Tracer("") globalOtelTracer := otelglobal.Tracer("")
if len(tm.recordedOTSpanTracers) != 3 { if len(tm.recordedOTSpanTracers) != 3 {
t.Errorf("Expected 3 recorded OpenTracing tracers from spans, got %d", len(tm.recordedOTSpanTracers)) t.Errorf("Expected 3 recorded OpenTracing tracers from spans, got %d", len(tm.recordedOTSpanTracers))
} }
@ -685,7 +685,7 @@ func min(a, b int) int {
} }
func runOtelOTOtel(t *testing.T, ctx context.Context, name string, callback func(*testing.T, context.Context) context.Context) { func runOtelOTOtel(t *testing.T, ctx context.Context, name string, callback func(*testing.T, context.Context) context.Context) {
tr := otelglobal.TraceProvider().Tracer("") tr := otelglobal.Tracer("")
ctx, span := tr.Start(ctx, fmt.Sprintf("%s_Otel_OTOtel", name), oteltrace.WithSpanKind(oteltrace.SpanKindClient)) ctx, span := tr.Start(ctx, fmt.Sprintf("%s_Otel_OTOtel", name), oteltrace.WithSpanKind(oteltrace.SpanKindClient))
defer span.End() defer span.End()
ctx = callback(t, ctx) ctx = callback(t, ctx)
@ -702,7 +702,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) context.Context) { func runOTOtelOT(t *testing.T, ctx context.Context, name string, callback func(*testing.T, context.Context) context.Context) {
tr := otelglobal.TraceProvider().Tracer("") tr := otelglobal.Tracer("")
span, ctx := ot.StartSpanFromContext(ctx, fmt.Sprintf("%s_OT_OtelOT", name), ot.Tag{Key: "span.kind", Value: "client"}) span, ctx := ot.StartSpanFromContext(ctx, fmt.Sprintf("%s_OT_OtelOT", name), ot.Tag{Key: "span.kind", Value: "client"})
defer span.Finish() defer span.Finish()
ctx = callback(t, ctx) ctx = callback(t, ctx)

View File

@ -70,8 +70,8 @@ func main() {
// Note: Have to get the meter and tracer after the global is // Note: Have to get the meter and tracer after the global is
// initialized. See OTEP 0005. // initialized. See OTEP 0005.
tracer := global.TraceProvider().Tracer("ex.com/basic") tracer := global.Tracer("ex.com/basic")
meter := global.MeterProvider().Meter("ex.com/basic") meter := global.Meter("ex.com/basic")
commonLabels := meter.Labels(lemonsKey.Int(10), key.String("A", "1"), key.String("B", "2"), key.String("C", "3")) commonLabels := meter.Labels(lemonsKey.Int(10), key.String("A", "1"), key.String("B", "2"), key.String("C", "3"))

View File

@ -47,7 +47,7 @@ func UnaryServerInterceptor(ctx context.Context, req interface{}, info *grpc.Una
grpcServerKey.String("hello-world-server"), grpcServerKey.String("hello-world-server"),
} }
tr := global.TraceProvider().Tracer("example/grpc") tr := global.Tracer("example/grpc")
ctx, span := tr.Start( ctx, span := tr.Start(
trace.ContextWithRemoteSpanContext(ctx, spanCtx), trace.ContextWithRemoteSpanContext(ctx, spanCtx),
"hello-api-op", "hello-api-op",
@ -64,7 +64,7 @@ func UnaryClientInterceptor(ctx context.Context, method string, req, reply inter
requestMetadata, _ := metadata.FromOutgoingContext(ctx) requestMetadata, _ := metadata.FromOutgoingContext(ctx)
metadataCopy := requestMetadata.Copy() metadataCopy := requestMetadata.Copy()
tr := global.TraceProvider().Tracer("example/grpc") tr := global.Tracer("example/grpc")
err := tr.WithSpan(ctx, "hello-api-op", err := tr.WithSpan(ctx, "hello-api-op",
func(ctx context.Context) error { func(ctx context.Context) error {
grpctrace.Inject(ctx, &metadataCopy) grpctrace.Inject(ctx, &metadataCopy)

View File

@ -59,7 +59,7 @@ func main() {
var body []byte var body []byte
tr := global.TraceProvider().Tracer("example/client") tr := global.Tracer("example/client")
err := tr.WithSpan(ctx, "say hello", err := tr.WithSpan(ctx, "say hello",
func(ctx context.Context) error { func(ctx context.Context) error {
req, _ := http.NewRequest("GET", "http://localhost:7777/hello", nil) req, _ := http.NewRequest("GET", "http://localhost:7777/hello", nil)

View File

@ -47,7 +47,7 @@ func initTracer() {
func main() { func main() {
initTracer() initTracer()
tr := global.TraceProvider().Tracer("example/server") tr := global.Tracer("example/server")
helloHandler := func(w http.ResponseWriter, req *http.Request) { helloHandler := func(w http.ResponseWriter, req *http.Request) {
attrs, entries, spanCtx := httptrace.Extract(req.Context(), req) attrs, entries, spanCtx := httptrace.Extract(req.Context(), req)

View File

@ -58,14 +58,14 @@ func main() {
ctx := context.Background() ctx := context.Background()
tr := global.TraceProvider().Tracer("component-main") tr := global.Tracer("component-main")
ctx, span := tr.Start(ctx, "foo") ctx, span := tr.Start(ctx, "foo")
bar(ctx) bar(ctx)
span.End() span.End()
} }
func bar(ctx context.Context) { func bar(ctx context.Context) {
tr := global.TraceProvider().Tracer("component-bar") tr := global.Tracer("component-bar")
_, span := tr.Start(ctx, "bar") _, span := tr.Start(ctx, "bar")
defer span.End() defer span.End()

View File

@ -32,7 +32,7 @@ func SubOperation(ctx context.Context) error {
// Using global provider. Alternative is to have application provide a getter // Using global provider. Alternative is to have application provide a getter
// for its component to get the instance of the provider. // for its component to get the instance of the provider.
tr := global.TraceProvider().Tracer("example/namedtracer/foo") tr := global.Tracer("example/namedtracer/foo")
return tr.WithSpan( return tr.WithSpan(
ctx, ctx,
"Sub operation...", "Sub operation...",

View File

@ -50,7 +50,7 @@ func initMeter() *push.Controller {
func main() { func main() {
defer initMeter().Stop() defer initMeter().Stop()
meter := global.MeterProvider().Meter("ex.com/basic") meter := global.Meter("ex.com/basic")
observerLock := new(sync.RWMutex) observerLock := new(sync.RWMutex)
observerValueToReport := new(float64) observerValueToReport := new(float64)
observerLabelSetToReport := new(metric.LabelSet) observerLabelSetToReport := new(metric.LabelSet)

View File

@ -48,7 +48,7 @@ func Example_insecure() {
global.SetTraceProvider(tp) global.SetTraceProvider(tp)
tracer := global.TraceProvider().Tracer("test-tracer") tracer := global.Tracer("test-tracer")
// Then use the OpenTelemetry tracing library, like we normally would. // Then use the OpenTelemetry tracing library, like we normally would.
ctx, span := tracer.Start(context.Background(), "CollectorExporter-Example") ctx, span := tracer.Start(context.Background(), "CollectorExporter-Example")
@ -89,7 +89,7 @@ func Example_withTLS() {
global.SetTraceProvider(tp) global.SetTraceProvider(tp)
tracer := global.TraceProvider().Tracer("test-tracer") tracer := global.Tracer("test-tracer")
// Then use the OpenTelemetry tracing library, like we normally would. // Then use the OpenTelemetry tracing library, like we normally would.
ctx, span := tracer.Start(context.Background(), "Securely-Talking-To-Collector-Span") ctx, span := tracer.Start(context.Background(), "Securely-Talking-To-Collector-Span")

View File

@ -158,7 +158,7 @@ func TestExporter_ExportSpan(t *testing.T) {
assert.NoError(t, err) assert.NoError(t, err)
global.SetTraceProvider(tp) global.SetTraceProvider(tp)
_, span := global.TraceProvider().Tracer("test-tracer").Start(context.Background(), "test-span") _, span := global.Tracer("test-tracer").Start(context.Background(), "test-span")
span.End() span.End()
assert.True(t, span.SpanContext().IsValid()) assert.True(t, span.SpanContext().IsValid())

View File

@ -53,7 +53,7 @@ func NewClientTrace(ctx context.Context) *httptrace.ClientTrace {
activeHooks: make(map[string]trace.Span), activeHooks: make(map[string]trace.Span),
} }
ct.tr = global.TraceProvider().Tracer("go.opentelemetry.io/otel/plugin/httptrace") ct.tr = global.Tracer("go.opentelemetry.io/otel/plugin/httptrace")
return &httptrace.ClientTrace{ return &httptrace.ClientTrace{
GetConn: ct.getConn, GetConn: ct.getConn,

View File

@ -128,7 +128,7 @@ func WithMessageEvents(events ...event) Option {
func NewHandler(handler http.Handler, operation string, opts ...Option) http.Handler { func NewHandler(handler http.Handler, operation string, opts ...Option) http.Handler {
h := Handler{handler: handler, operation: operation} h := Handler{handler: handler, operation: operation}
defaultOpts := []Option{ defaultOpts := []Option{
WithTracer(global.TraceProvider().Tracer("go.opentelemetry.io/plugin/othttp")), WithTracer(global.Tracer("go.opentelemetry.io/plugin/othttp")),
WithPropagators(global.Propagators()), WithPropagators(global.Propagators()),
WithSpanOptions(trace.WithSpanKind(trace.SpanKindServer)), WithSpanOptions(trace.WithSpanKind(trace.SpanKindServer)),
} }