mirror of
https://gitee.com/johng/gf
synced 2026-06-06 16:21:40 +08:00
improve package gtrace
This commit is contained in:
@ -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()
|
||||
|
||||
|
||||
@ -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(
|
||||
|
||||
@ -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
|
||||
}
|
||||
|
||||
|
||||
@ -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")
|
||||
|
||||
Reference in New Issue
Block a user