aboutsummaryrefslogtreecommitdiffstats
path: root/swarm/spancontext
diff options
context:
space:
mode:
authorAnton Evangelatov <anton.evangelatov@gmail.com>2018-07-13 23:40:28 +0800
committerBalint Gabor <balint.g@gmail.com>2018-07-13 23:40:28 +0800
commit7c9314f231a7ddffbbbc5fec16c65519a0121eeb (patch)
treedbc4021b66ee8968ad747036741fac7e1b972a39 /swarm/spancontext
parentf7d3678c28c4b92e45a458e4785bd0f1cdc20e34 (diff)
downloadgo-tangerine-7c9314f231a7ddffbbbc5fec16c65519a0121eeb.tar
go-tangerine-7c9314f231a7ddffbbbc5fec16c65519a0121eeb.tar.gz
go-tangerine-7c9314f231a7ddffbbbc5fec16c65519a0121eeb.tar.bz2
go-tangerine-7c9314f231a7ddffbbbc5fec16c65519a0121eeb.tar.lz
go-tangerine-7c9314f231a7ddffbbbc5fec16c65519a0121eeb.tar.xz
go-tangerine-7c9314f231a7ddffbbbc5fec16c65519a0121eeb.tar.zst
go-tangerine-7c9314f231a7ddffbbbc5fec16c65519a0121eeb.zip
swarm: integrate OpenTracing; propagate ctx to internal APIs (#17169)
* swarm: propagate ctx, enable opentracing * swarm/tracing: log error when tracing is misconfigured
Diffstat (limited to 'swarm/spancontext')
-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
+}