improve package gtrace

This commit is contained in:
jianchenma
2021-02-03 15:27:41 +08:00
parent 40bdc76af1
commit 6135085d61
4 changed files with 20 additions and 6 deletions

View File

@ -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()

View File

@ -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(

View File

@ -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
}

View File

@ -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")