audit-go/audit/api/trace.go
Christian Schaible (EXT) 618be58a26 Merged PR 752362: feat: Apply stricter linter rules
Security-concept-update-needed: false.

JIRA Work Item: STACKITALO-184
2025-03-25 08:40:27 +00:00

34 lines
1.1 KiB
Go

package api
import (
"context"
"go.opentelemetry.io/otel/propagation"
)
const traceParentHeader = "traceparent"
const traceStateHeader = "tracestate"
// TraceParentAndStateFromContext returns W3C conform trace parent and state from context
func TraceParentAndStateFromContext(ctx context.Context) (string, string) {
mapCarrier := propagation.MapCarrier{}
propagator := propagation.TraceContext{}
propagator.Inject(ctx, mapCarrier)
// Get trace parent from context w3c conform format
// Format: <version>-<trace-id>-<parent-id>-<trace-flags>
// Example: "00-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-01"
traceParent := mapCarrier[traceParentHeader]
traceState := mapCarrier[traceStateHeader]
return traceParent, traceState
}
// AddTraceParentAndStateToContext adds trace and state related information to the given context.
func AddTraceParentAndStateToContext(ctx context.Context, traceParent, traceState string) context.Context {
mapCarrier := propagation.MapCarrier{}
mapCarrier[traceParentHeader] = traceParent
mapCarrier[traceStateHeader] = traceState
propagator := propagation.TraceContext{}
return propagator.Extract(ctx, mapCarrier)
}