* swarm: propagate ctx, enable opentracing * swarm/tracing: log error when tracing is misconfigured
		
			
				
	
	
		
			50 lines
		
	
	
		
			994 B
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			50 lines
		
	
	
		
			994 B
		
	
	
	
		
			Go
		
	
	
	
	
	
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
 | 
						|
}
 |