swarm: integrate OpenTracing; propagate ctx to internal APIs (#17169)
* swarm: propagate ctx, enable opentracing * swarm/tracing: log error when tracing is misconfigured
This commit is contained in:
committed by
Balint Gabor
parent
f7d3678c28
commit
7c9314f231
49
swarm/spancontext/spancontext.go
Normal file
49
swarm/spancontext/spancontext.go
Normal file
@ -0,0 +1,49 @@
|
||||
package spancontext
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
opentracing "github.com/opentracing/opentracing-go"
|
||||
)
|
||||
|
||||
func WithContext(ctx context.Context, sctx opentracing.SpanContext) context.Context {
|
||||
return context.WithValue(ctx, "span_context", sctx)
|
||||
}
|
||||
|
||||
func FromContext(ctx context.Context) opentracing.SpanContext {
|
||||
sctx, ok := ctx.Value("span_context").(opentracing.SpanContext)
|
||||
if ok {
|
||||
return sctx
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func StartSpan(ctx context.Context, name string) (context.Context, opentracing.Span) {
|
||||
tracer := opentracing.GlobalTracer()
|
||||
|
||||
sctx := FromContext(ctx)
|
||||
|
||||
var sp opentracing.Span
|
||||
if sctx != nil {
|
||||
sp = tracer.StartSpan(
|
||||
name,
|
||||
opentracing.ChildOf(sctx))
|
||||
} else {
|
||||
sp = tracer.StartSpan(name)
|
||||
}
|
||||
|
||||
nctx := context.WithValue(ctx, "span_context", sp.Context())
|
||||
|
||||
return nctx, sp
|
||||
}
|
||||
|
||||
func StartSpanFrom(name string, sctx opentracing.SpanContext) opentracing.Span {
|
||||
tracer := opentracing.GlobalTracer()
|
||||
|
||||
sp := tracer.StartSpan(
|
||||
name,
|
||||
opentracing.ChildOf(sctx))
|
||||
|
||||
return sp
|
||||
}
|
Reference in New Issue
Block a user