You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
|
package correlation
|
|
|
|
|
|
|
|
import (
|
|
|
|
"net/url"
|
|
|
|
|
|
|
|
"github.com/rs/zerolog"
|
|
|
|
"go.opentelemetry.io/otel/propagation"
|
|
|
|
"go.opentelemetry.io/otel/trace"
|
|
|
|
)
|
|
|
|
|
|
|
|
type TraceContextHook struct{}
|
|
|
|
|
|
|
|
func (h TraceContextHook) Run(e *zerolog.Event, level zerolog.Level, msg string) {
|
|
|
|
ctx := e.GetCtx()
|
|
|
|
spanContext := trace.SpanContextFromContext(ctx)
|
|
|
|
trace_id := spanContext.TraceID()
|
|
|
|
if trace_id.IsValid() {
|
|
|
|
e.Stringer("trace_id", trace_id)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
var _ propagation.TextMapCarrier = UrlValuesCarrier{}
|
|
|
|
|
|
|
|
type UrlValuesCarrier url.Values
|
|
|
|
|
|
|
|
// Get implements propagation.TextMapCarrier.
|
|
|
|
func (u UrlValuesCarrier) Get(key string) string {
|
|
|
|
return url.Values(u).Get(key)
|
|
|
|
}
|
|
|
|
|
|
|
|
// Keys implements propagation.TextMapCarrier.
|
|
|
|
func (u UrlValuesCarrier) Keys() []string {
|
|
|
|
raw := map[string][]string(u)
|
|
|
|
ks := make([]string, 0, len(raw))
|
|
|
|
for k := range raw {
|
|
|
|
ks = append(ks, k)
|
|
|
|
}
|
|
|
|
return ks
|
|
|
|
}
|
|
|
|
|
|
|
|
// Set implements propagation.TextMapCarrier.
|
|
|
|
func (u UrlValuesCarrier) Set(key string, value string) {
|
|
|
|
url.Values(u).Set(key, value)
|
|
|
|
}
|