From 6135085d619dc918fd26994c7ad285d042d9c26a Mon Sep 17 00:00:00 2001 From: jianchenma Date: Wed, 3 Feb 2021 15:27:41 +0800 Subject: [PATCH] improve package gtrace --- net/ghttp/ghttp_middleware_tracing.go | 2 +- net/ghttp/internal/client/client_tracing.go | 2 +- net/gtrace/gtrace.go | 17 +++++++++++++++-- net/gtrace/gtrace_unit_carrier_test.go | 5 +++-- 4 files changed, 20 insertions(+), 6 deletions(-) diff --git a/net/ghttp/ghttp_middleware_tracing.go b/net/ghttp/ghttp_middleware_tracing.go index f8b19122b..22b4cdc2b 100644 --- a/net/ghttp/ghttp_middleware_tracing.go +++ b/net/ghttp/ghttp_middleware_tracing.go @@ -41,7 +41,7 @@ func MiddlewareClientTracing(c *Client, r *http.Request) (*ClientResponse, error // MiddlewareServerTracing is a serer middleware that enables tracing feature using standards of OpenTelemetry. func MiddlewareServerTracing(r *Request) { tr := otel.GetTracerProvider().Tracer(tracingInstrumentName, trace.WithInstrumentationVersion(gf.VERSION)) - ctx := gtrace.DefaultTextMapPropagator().Extract(r.Context(), r.Header) + ctx := otel.GetTextMapPropagator().Extract(r.Context(), r.Header) ctx, span := tr.Start(ctx, r.URL.String(), trace.WithSpanKind(trace.SpanKindServer)) defer span.End() diff --git a/net/ghttp/internal/client/client_tracing.go b/net/ghttp/internal/client/client_tracing.go index 5f7e914bb..244ea05b9 100644 --- a/net/ghttp/internal/client/client_tracing.go +++ b/net/ghttp/internal/client/client_tracing.go @@ -48,7 +48,7 @@ func MiddlewareTracing(c *Client, r *http.Request) (response *Response, err erro span.SetAttributes(gtrace.CommonLabels()...) // Inject tracing content into http header. - gtrace.DefaultTextMapPropagator().Inject(ctx, r.Header) + otel.GetTextMapPropagator().Inject(ctx, r.Header) // Continue client handler executing. response, err = c.Next( diff --git a/net/gtrace/gtrace.go b/net/gtrace/gtrace.go index aaa1b3e68..a166ddcb0 100644 --- a/net/gtrace/gtrace.go +++ b/net/gtrace/gtrace.go @@ -12,6 +12,7 @@ import ( "github.com/gogf/gf/container/gmap" "github.com/gogf/gf/container/gvar" "github.com/gogf/gf/net/gipv4" + "go.opentelemetry.io/otel" "go.opentelemetry.io/otel/label" "go.opentelemetry.io/otel/propagation" "go.opentelemetry.io/otel/trace" @@ -35,6 +36,10 @@ var ( ) ) +func init() { + CheckSetDefaultTextMapPropagator() +} + // CommonLabels returns common used attribute labels: // ip.intranet, hostname. func CommonLabels() []label.KeyValue { @@ -49,8 +54,16 @@ func IsActivated(ctx context.Context) bool { return GetTraceId(ctx) != "" } -// DefaultTextMapPropagator returns the default propagator for context propagation between peers. -func DefaultTextMapPropagator() propagation.TextMapPropagator { +// CheckSetDefaultTextMapPropagator sets the default TextMapPropagator if it is not set previously. +func CheckSetDefaultTextMapPropagator() { + p := otel.GetTextMapPropagator() + if len(p.Fields()) == 0 { + otel.SetTextMapPropagator(GetDefaultTextMapPropagator()) + } +} + +// GetDefaultTextMapPropagator returns the default propagator for context propagation between peers. +func GetDefaultTextMapPropagator() propagation.TextMapPropagator { return defaultTextMapPropagator } diff --git a/net/gtrace/gtrace_unit_carrier_test.go b/net/gtrace/gtrace_unit_carrier_test.go index 81080815c..85720a3ba 100644 --- a/net/gtrace/gtrace_unit_carrier_test.go +++ b/net/gtrace/gtrace_unit_carrier_test.go @@ -10,6 +10,7 @@ import ( "context" "github.com/gogf/gf/net/gtrace" "github.com/gogf/gf/test/gtest" + "go.opentelemetry.io/otel" "go.opentelemetry.io/otel/oteltest" "go.opentelemetry.io/otel/trace" "testing" @@ -52,10 +53,10 @@ func TestNewCarrier(t *testing.T) { }) ctx, _ = oteltest.DefaultTracer().Start(ctx, "inject") carrier1 := gtrace.NewCarrier() - gtrace.DefaultTextMapPropagator().Inject(ctx, carrier1) + otel.GetTextMapPropagator().Inject(ctx, carrier1) t.Assert(carrier1.String(), `{"traceparent":"00-4bf92f3577b34da6a3ce929d0e0e4736-0000000000000002-01","tracestate":""}`) - ctx = gtrace.DefaultTextMapPropagator().Extract(ctx, carrier1) + ctx = otel.GetTextMapPropagator().Extract(ctx, carrier1) gotSc := trace.RemoteSpanContextFromContext(ctx) t.Assert(gotSc.TraceID.String(), traceID.String()) t.Assert(gotSc.SpanID.String(), "0000000000000002")