* 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
 | |
| }
 |