aboutsummaryrefslogtreecommitdiffstats
path: root/swarm/spancontext/spancontext.go
diff options
context:
space:
mode:
Diffstat (limited to 'swarm/spancontext/spancontext.go')
-rw-r--r--swarm/spancontext/spancontext.go49
1 files changed, 49 insertions, 0 deletions
diff --git a/swarm/spancontext/spancontext.go b/swarm/spancontext/spancontext.go
new file mode 100644
index 000000000..2cb9f82f7
--- /dev/null
+++ b/swarm/spancontext/spancontext.go
@@ -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
+}