feat(tracing): map injection support
This commit is contained in:
parent
3c254e8768
commit
261161b911
2 changed files with 45 additions and 7 deletions
|
@ -146,7 +146,7 @@ func (t *Telemetry) FiberMiddleware(config ...FiberMiddlewareConfig) fiber.Handl
|
||||||
description,
|
description,
|
||||||
WithOtelOptions(trace.WithSpanKind(trace.SpanKindServer)),
|
WithOtelOptions(trace.WithSpanKind(trace.SpanKindServer)),
|
||||||
WithOtelTracer(tracer),
|
WithOtelTracer(tracer),
|
||||||
t.ContinueFromRequest(&stdRequest),
|
t.ContinueFromHeaders(stdRequest.Header),
|
||||||
)
|
)
|
||||||
defer func() {
|
defer func() {
|
||||||
if err := recover(); err != nil {
|
if err := recover(); err != nil {
|
||||||
|
|
48
tracing.go
48
tracing.go
|
@ -14,6 +14,11 @@ type contextKey struct {
|
||||||
Key string
|
Key string
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const (
|
||||||
|
SentryTraceHeader = "sentry-trace"
|
||||||
|
SentryBaggageHeader = "sentry-baggage"
|
||||||
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
tracerContextKey = contextKey{"tracer"}
|
tracerContextKey = contextKey{"tracer"}
|
||||||
)
|
)
|
||||||
|
@ -63,16 +68,49 @@ func (t *Telemetry) InjectIntoHeaders(ctx context.Context, headers http.Header)
|
||||||
// this should never happen...
|
// this should never happen...
|
||||||
log.Trace().Msgf("failed to inject Sentry span ID, Sentry span could not be extracted from the context.Context")
|
log.Trace().Msgf("failed to inject Sentry span ID, Sentry span could not be extracted from the context.Context")
|
||||||
} else {
|
} else {
|
||||||
headers.Set("sentry-trace", sentrySpan.ToSentryTrace())
|
headers.Set(SentryTraceHeader, sentrySpan.ToSentryTrace())
|
||||||
headers.Set("sentry-baggage", sentrySpan.ToBaggage())
|
headers.Set(SentryBaggageHeader, sentrySpan.ToBaggage())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (t *Telemetry) ContinueFromRequest(r *http.Request) ConfigureSpanStartFunc {
|
func (t *Telemetry) InjectIntoMap(ctx context.Context, m map[string]string) {
|
||||||
|
t.propagator.Inject(ctx, propagation.MapCarrier(m))
|
||||||
|
|
||||||
|
if sentrySpan := sentry.SpanFromContext(ctx); sentrySpan == nil {
|
||||||
|
// this should never happen...
|
||||||
|
log.Trace().Msgf("failed to inject Sentry span ID, Sentry span could not be extracted from the context.Context")
|
||||||
|
} else {
|
||||||
|
m[SentryTraceHeader] = sentrySpan.ToSentryTrace()
|
||||||
|
m[SentryBaggageHeader] = sentrySpan.ToBaggage()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (t *Telemetry) ContinueFromHeaders(h http.Header) ConfigureSpanStartFunc {
|
||||||
return func(ctx context.Context) (context.Context, []trace.SpanStartOption, []sentry.SpanOption) {
|
return func(ctx context.Context) (context.Context, []trace.SpanStartOption, []sentry.SpanOption) {
|
||||||
ctx = t.propagator.Extract(ctx, propagation.HeaderCarrier(r.Header))
|
ctx = t.propagator.Extract(ctx, propagation.HeaderCarrier(h))
|
||||||
|
|
||||||
return ctx, []trace.SpanStartOption{}, []sentry.SpanOption{sentry.ContinueFromRequest(r), sentry.WithTransactionSource(sentry.SourceURL)}
|
return ctx,
|
||||||
|
[]trace.SpanStartOption{},
|
||||||
|
[]sentry.SpanOption{
|
||||||
|
sentry.ContinueFromHeaders(h.Get(sentry.SentryTraceHeader), h.Get(sentry.SentryBaggageHeader)),
|
||||||
|
sentry.WithTransactionSource(sentry.SourceURL),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (t *Telemetry) ContinueFromMap(m map[string]string) ConfigureSpanStartFunc {
|
||||||
|
return func(ctx context.Context) (context.Context, []trace.SpanStartOption, []sentry.SpanOption) {
|
||||||
|
ctx = t.propagator.Extract(ctx, propagation.MapCarrier(m))
|
||||||
|
|
||||||
|
sentryTrace := m[sentry.SentryTraceHeader]
|
||||||
|
sentryBaggage := m[sentry.SentryBaggageHeader]
|
||||||
|
|
||||||
|
return ctx,
|
||||||
|
[]trace.SpanStartOption{},
|
||||||
|
[]sentry.SpanOption{
|
||||||
|
sentry.ContinueFromHeaders(sentryTrace, sentryBaggage),
|
||||||
|
sentry.WithTransactionSource(sentry.SourceURL),
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue