Closes #222: Introduce a ScopeManager property

This commit is contained in:
Jon Mort 2018-02-08 17:43:34 +00:00 committed by Tyler Benson
parent 91c56dea96
commit f78c290b40
1 changed files with 16 additions and 8 deletions

View File

@ -34,7 +34,7 @@ import lombok.extern.slf4j.Slf4j;
/** DDTracer makes it easy to send traces and span to DD using the OpenTracing API. */ /** DDTracer makes it easy to send traces and span to DD using the OpenTracing API. */
@Slf4j @Slf4j
public class DDTracer extends ThreadLocalScopeManager implements io.opentracing.Tracer { public class DDTracer implements io.opentracing.Tracer {
public static final String UNASSIGNED_DEFAULT_SERVICE_NAME = "unnamed-java-app"; public static final String UNASSIGNED_DEFAULT_SERVICE_NAME = "unnamed-java-app";
@ -44,6 +44,10 @@ public class DDTracer extends ThreadLocalScopeManager implements io.opentracing.
final Writer writer; final Writer writer;
/** Sampler defines the sampling policy in order to reduce the number of traces for instance */ /** Sampler defines the sampling policy in order to reduce the number of traces for instance */
final Sampler sampler; final Sampler sampler;
/**
* Scope manager is in charge of managing the scopes from which spans are created
*/
final ScopeManager scopeManager;
/** A set of tags that are added to every span */ /** A set of tags that are added to every span */
private final Map<String, Object> spanTags; private final Map<String, Object> spanTags;
@ -68,7 +72,8 @@ public class DDTracer extends ThreadLocalScopeManager implements io.opentracing.
config.getProperty(DDTraceConfig.SERVICE_NAME), config.getProperty(DDTraceConfig.SERVICE_NAME),
Writer.Builder.forConfig(config), Writer.Builder.forConfig(config),
Sampler.Builder.forConfig(config), Sampler.Builder.forConfig(config),
DDTraceConfig.parseMap(config.getProperty(DDTraceConfig.SPAN_TAGS))); new ThreadLocalScopeManager(),
DDTraceConfig.parseMap(config.getProperty(DDTraceConfig.SPAN_TAGS)));
log.debug("Using config: {}", config); log.debug("Using config: {}", config);
// Create decorators from resource files // Create decorators from resource files
@ -80,18 +85,20 @@ public class DDTracer extends ThreadLocalScopeManager implements io.opentracing.
} }
public DDTracer(final String serviceName, final Writer writer, final Sampler sampler) { public DDTracer(final String serviceName, final Writer writer, final Sampler sampler) {
this(serviceName, writer, sampler, Collections.<String, Object>emptyMap()); this(serviceName, writer, sampler, new ThreadLocalScopeManager(), Collections.<String, Object>emptyMap());
} }
public DDTracer( public DDTracer(
final String serviceName, final String serviceName,
final Writer writer, final Writer writer,
final Sampler sampler, final Sampler sampler,
final ScopeManager scopeManager,
final Map<String, Object> spanTags) { final Map<String, Object> spanTags) {
this.serviceName = serviceName; this.serviceName = serviceName;
this.writer = writer; this.writer = writer;
this.writer.start(); this.writer.start();
this.sampler = sampler; this.sampler = sampler;
this.scopeManager = scopeManager;
this.spanTags = spanTags; this.spanTags = spanTags;
registry = new CodecRegistry(); registry = new CodecRegistry();
@ -109,7 +116,8 @@ public class DDTracer extends ThreadLocalScopeManager implements io.opentracing.
UNASSIGNED_DEFAULT_SERVICE_NAME, UNASSIGNED_DEFAULT_SERVICE_NAME,
writer, writer,
new AllSampler(), new AllSampler(),
DDTraceConfig.parseMap(new DDTraceConfig().getProperty(DDTraceConfig.SPAN_TAGS))); new ThreadLocalScopeManager(),
DDTraceConfig.parseMap(new DDTraceConfig().getProperty(DDTraceConfig.SPAN_TAGS)));
} }
/** /**
@ -139,18 +147,18 @@ public class DDTracer extends ThreadLocalScopeManager implements io.opentracing.
@Override @Override
public ScopeManager scopeManager() { public ScopeManager scopeManager() {
return this; return scopeManager;
} }
@Override @Override
public Span activeSpan() { public Span activeSpan() {
final Scope active = active(); final Scope active = scopeManager.active();
return active == null ? null : active.span(); return active == null ? null : active.span();
} }
@Override @Override
public DDSpanBuilder buildSpan(final String operationName) { public DDSpanBuilder buildSpan(final String operationName) {
return new DDSpanBuilder(operationName, this); return new DDSpanBuilder(operationName, scopeManager);
} }
@Override @Override
@ -412,7 +420,7 @@ public class DDTracer extends ThreadLocalScopeManager implements io.opentracing.
SpanContext parentContext = this.parent; SpanContext parentContext = this.parent;
if (parentContext == null && !ignoreScope) { if (parentContext == null && !ignoreScope) {
// use the Scope as parent unless overridden or ignored. // use the Scope as parent unless overridden or ignored.
final Scope scope = active(); final Scope scope = scopeManager.active();
if (scope != null) parentContext = scope.span().context(); if (scope != null) parentContext = scope.span().context();
} }