diff --git a/internal/telemetry/event.go b/internal/telemetry/event.go index df202665fa..5b2d226f9c 100644 --- a/internal/telemetry/event.go +++ b/internal/telemetry/event.go @@ -16,6 +16,7 @@ const ( EventStartSpan EventEndSpan EventTag + EventDetach ) type Event struct { diff --git a/internal/telemetry/export/trace.go b/internal/telemetry/export/trace.go index bf28285f20..9f15a4689b 100644 --- a/internal/telemetry/export/trace.go +++ b/internal/telemetry/export/trace.go @@ -70,16 +70,12 @@ func ContextSpan(ctx context.Context, event telemetry.Event) context.Context { if span := GetSpan(ctx); span != nil { span.Finish = event.At } + case telemetry.EventDetach: + return context.WithValue(ctx, spanContextKey, nil) } return ctx } -// Detach returns a context without an associated span. -// This allows the creation of spans that are not children of the current span. -func Detach(ctx context.Context) context.Context { - return context.WithValue(ctx, spanContextKey, nil) -} - func (s *SpanContext) Format(f fmt.State, r rune) { fmt.Fprintf(f, "%v:%v", s.TraceID, s.SpanID) } diff --git a/internal/telemetry/trace/trace.go b/internal/telemetry/trace/trace.go index 603b0bcb7c..3ffe0ad2da 100644 --- a/internal/telemetry/trace/trace.go +++ b/internal/telemetry/trace/trace.go @@ -31,5 +31,8 @@ func StartSpan(ctx context.Context, name string, tags ...telemetry.Tag) (context // Detach returns a context without an associated span. // This allows the creation of spans that are not children of the current span. func Detach(ctx context.Context) context.Context { - return export.Detach(ctx) + return export.ProcessEvent(ctx, telemetry.Event{ + Type: telemetry.EventDetach, + At: time.Now(), + }) }