Merge pull request #1174 from DataDog/tyler/ddtrace-builder

Add Builder to DDTracer
This commit is contained in:
Tyler Benson 2020-01-15 11:49:46 -08:00 committed by GitHub
commit d8bf99555f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
22 changed files with 153 additions and 118 deletions

View File

@ -11,7 +11,7 @@ public class TracerInstaller {
public static synchronized void installGlobalTracer() { public static synchronized void installGlobalTracer() {
if (Config.get().isTraceEnabled()) { if (Config.get().isTraceEnabled()) {
if (!io.opentracing.util.GlobalTracer.isRegistered()) { if (!io.opentracing.util.GlobalTracer.isRegistered()) {
final DDTracer tracer = new DDTracer(); final DDTracer tracer = DDTracer.builder().build();
try { try {
io.opentracing.util.GlobalTracer.register(tracer); io.opentracing.util.GlobalTracer.register(tracer);
datadog.trace.api.GlobalTracer.registerIfAbsent(tracer); datadog.trace.api.GlobalTracer.registerIfAbsent(tracer);

View File

@ -95,7 +95,7 @@ public abstract class AgentTestRunner extends DDSpecification {
return result; return result;
} }
}; };
TEST_TRACER = new DDTracer(TEST_WRITER); TEST_TRACER = DDTracer.builder().writer(TEST_WRITER).build();
GlobalTracerUtils.registerOrReplaceGlobalTracer((Tracer) TEST_TRACER); GlobalTracerUtils.registerOrReplaceGlobalTracer((Tracer) TEST_TRACER);
GlobalTracer.registerIfAbsent((datadog.trace.api.Tracer) TEST_TRACER); GlobalTracer.registerIfAbsent((datadog.trace.api.Tracer) TEST_TRACER);
} }

View File

@ -96,28 +96,61 @@ public class DDTracer implements io.opentracing.Tracer, Closeable, datadog.trace
private final HttpCodec.Injector injector; private final HttpCodec.Injector injector;
private final HttpCodec.Extractor extractor; private final HttpCodec.Extractor extractor;
public static class Builder {
public Builder() {
// Apply the default values from config.
config(Config.get());
}
public Builder withProperties(final Properties properties) {
return config(Config.get(properties));
}
public Builder config(final Config config) {
this.config = config;
serviceName(config.getServiceName());
// Explicitly skip setting writer to avoid allocating resources prematurely.
sampler(Sampler.Builder.forConfig(config));
injector(HttpCodec.createInjector(config));
extractor(HttpCodec.createExtractor(config, config.getHeaderTags()));
localRootSpanTags(config.getLocalRootSpanTags());
defaultSpanTags(config.getMergedSpanTags());
serviceNameMappings(config.getServiceMapping());
taggedHeaders(config.getHeaderTags());
partialFlushMinSpans(config.getPartialFlushMinSpans());
return this;
}
}
/** By default, report to local agent and collect all traces. */ /** By default, report to local agent and collect all traces. */
@Deprecated
public DDTracer() { public DDTracer() {
this(Config.get()); this(Config.get());
} }
@Deprecated
public DDTracer(final String serviceName) { public DDTracer(final String serviceName) {
this(serviceName, Config.get()); this(serviceName, Config.get());
} }
@Deprecated
public DDTracer(final Properties config) { public DDTracer(final Properties config) {
this(Config.get(config)); this(Config.get(config));
} }
@Deprecated
public DDTracer(final Config config) { public DDTracer(final Config config) {
this(config.getServiceName(), config); this(config.getServiceName(), config);
} }
// This constructor is already used in the wild, so we have to keep it inside this API for now. // This constructor is already used in the wild, so we have to keep it inside this API for now.
@Deprecated
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, Config.get().getLocalRootSpanTags()); this(serviceName, writer, sampler, Config.get().getLocalRootSpanTags());
} }
@Deprecated
private DDTracer(final String serviceName, final Config config) { private DDTracer(final String serviceName, final Config config) {
this( this(
serviceName, serviceName,
@ -132,6 +165,7 @@ public class DDTracer implements io.opentracing.Tracer, Closeable, datadog.trace
} }
/** Visible for testing */ /** Visible for testing */
@Deprecated
DDTracer( DDTracer(
final String serviceName, final String serviceName,
final Writer writer, final Writer writer,
@ -148,10 +182,12 @@ public class DDTracer implements io.opentracing.Tracer, Closeable, datadog.trace
0); 0);
} }
@Deprecated
public DDTracer(final Writer writer) { public DDTracer(final Writer writer) {
this(Config.get(), writer); this(Config.get(), writer);
} }
@Deprecated
public DDTracer(final Config config, final Writer writer) { public DDTracer(final Config config, final Writer writer) {
this( this(
config.getServiceName(), config.getServiceName(),
@ -164,9 +200,6 @@ public class DDTracer implements io.opentracing.Tracer, Closeable, datadog.trace
config.getPartialFlushMinSpans()); config.getPartialFlushMinSpans());
} }
/**
* @deprecated Use {@link #DDTracer(String, Writer, Sampler, Map, Map, Map, Map, int)} instead.
*/
@Deprecated @Deprecated
public DDTracer( public DDTracer(
final String serviceName, final String serviceName,
@ -188,9 +221,6 @@ public class DDTracer implements io.opentracing.Tracer, Closeable, datadog.trace
Config.get().getPartialFlushMinSpans()); Config.get().getPartialFlushMinSpans());
} }
/**
* @deprecated Use {@link #DDTracer(String, Writer, Sampler, Map, Map, Map, Map, int)} instead.
*/
@Deprecated @Deprecated
public DDTracer( public DDTracer(
final String serviceName, final String serviceName,
@ -211,6 +241,7 @@ public class DDTracer implements io.opentracing.Tracer, Closeable, datadog.trace
Config.get().getPartialFlushMinSpans()); Config.get().getPartialFlushMinSpans());
} }
@Deprecated
public DDTracer( public DDTracer(
final String serviceName, final String serviceName,
final Writer writer, final Writer writer,
@ -220,20 +251,56 @@ public class DDTracer implements io.opentracing.Tracer, Closeable, datadog.trace
final Map<String, String> serviceNameMappings, final Map<String, String> serviceNameMappings,
final Map<String, String> taggedHeaders, final Map<String, String> taggedHeaders,
final int partialFlushMinSpans) { final int partialFlushMinSpans) {
this(
Config.get(),
serviceName,
writer,
sampler,
HttpCodec.createInjector(Config.get()),
HttpCodec.createExtractor(Config.get(), taggedHeaders),
localRootSpanTags,
defaultSpanTags,
serviceNameMappings,
taggedHeaders,
partialFlushMinSpans);
}
@lombok.Builder(builderClassName = "Builder")
// These field names must be stable to ensure the builder api is stable.
private DDTracer(
final Config config,
final String serviceName,
final Writer writer,
final Sampler sampler,
final HttpCodec.Injector injector,
final HttpCodec.Extractor extractor,
final Map<String, String> localRootSpanTags,
final Map<String, String> defaultSpanTags,
final Map<String, String> serviceNameMappings,
final Map<String, String> taggedHeaders,
final int partialFlushMinSpans) {
assert localRootSpanTags != null; assert localRootSpanTags != null;
assert defaultSpanTags != null; assert defaultSpanTags != null;
assert serviceNameMappings != null; assert serviceNameMappings != null;
assert taggedHeaders != null; assert taggedHeaders != null;
this.serviceName = serviceName; this.serviceName = serviceName;
this.writer = writer; if (writer == null) {
this.writer.start(); this.writer = Writer.Builder.forConfig(config);
} else {
this.writer = writer;
}
this.sampler = sampler; this.sampler = sampler;
this.injector = injector;
this.extractor = extractor;
this.localRootSpanTags = localRootSpanTags; this.localRootSpanTags = localRootSpanTags;
this.defaultSpanTags = defaultSpanTags; this.defaultSpanTags = defaultSpanTags;
this.serviceNameMappings = serviceNameMappings; this.serviceNameMappings = serviceNameMappings;
this.partialFlushMinSpans = partialFlushMinSpans; this.partialFlushMinSpans = partialFlushMinSpans;
this.writer.start();
shutdownCallback = new ShutdownHook(this); shutdownCallback = new ShutdownHook(this);
try { try {
Runtime.getRuntime().addShutdownHook(shutdownCallback); Runtime.getRuntime().addShutdownHook(shutdownCallback);
@ -241,10 +308,6 @@ public class DDTracer implements io.opentracing.Tracer, Closeable, datadog.trace
// The JVM is already shutting down. // The JVM is already shutting down.
} }
// TODO: we have too many constructors, we should move to some sort of builder approach
injector = HttpCodec.createInjector(Config.get());
extractor = HttpCodec.createExtractor(Config.get(), taggedHeaders);
if (this.writer instanceof DDAgentWriter && sampler instanceof DDAgentResponseListener) { if (this.writer instanceof DDAgentWriter && sampler instanceof DDAgentResponseListener) {
((DDAgentWriter) this.writer).addResponseListener((DDAgentResponseListener) this.sampler); ((DDAgentWriter) this.writer).addResponseListener((DDAgentResponseListener) this.sampler);
} }

View File

@ -16,7 +16,7 @@ public class DDTracerResolver extends TracerResolver {
Tracer resolve(final Config config) { Tracer resolve(final Config config) {
if (config.isTraceResolverEnabled()) { if (config.isTraceResolverEnabled()) {
log.info("Creating DDTracer with DDTracerResolver"); log.info("Creating DDTracer with DDTracerResolver");
return new DDTracer(); return DDTracer.builder().config(config).build();
} else { } else {
log.info("DDTracerResolver disabled"); log.info("DDTracerResolver disabled");
return null; return null;

View File

@ -17,7 +17,7 @@ class OT31ApiTest extends DDSpecification {
static final WRITER = new ListWriter() static final WRITER = new ListWriter()
@Subject @Subject
Tracer tracer = new DDTracer(WRITER) Tracer tracer = DDTracer.builder().writer(WRITER).build()
def "test startActive"() { def "test startActive"() {
when: when:

View File

@ -13,7 +13,7 @@ class OT33ApiTest extends DDSpecification {
static final WRITER = new ListWriter() static final WRITER = new ListWriter()
@Subject @Subject
Tracer tracer = new DDTracer(WRITER) Tracer tracer = DDTracer.builder().writer(WRITER).build()
def "test start"() { def "test start"() {
when: when:

View File

@ -16,7 +16,7 @@ class DDSpanBuilderTest extends DDSpecification {
def writer = new ListWriter() def writer = new ListWriter()
def config = Config.get() def config = Config.get()
def tracer = new DDTracer(writer) def tracer = DDTracer.builder().writer(writer).build()
def "build simple span"() { def "build simple span"() {
setup: setup:
@ -458,7 +458,7 @@ class DDSpanBuilderTest extends DDSpecification {
setup: setup:
System.setProperty("dd.trace.span.tags", tagString) System.setProperty("dd.trace.span.tags", tagString)
def config = new Config() def config = new Config()
tracer = new DDTracer(config, writer) tracer = DDTracer.builder().config(config).writer(writer).build()
def span = tracer.buildSpan("op name").withServiceName("foo").start() def span = tracer.buildSpan("op name").withServiceName("foo").start()
expect: expect:

View File

@ -40,7 +40,7 @@ class DDSpanSerializationTest extends DDSpecification {
expected.put("trace_id", 1l) expected.put("trace_id", 1l)
def writer = new ListWriter() def writer = new ListWriter()
def tracer = new DDTracer(writer) def tracer = DDTracer.builder().writer(writer).build()
final DDSpanContext context = final DDSpanContext context =
new DDSpanContext( new DDSpanContext(
1G, 1G,
@ -81,7 +81,7 @@ class DDSpanSerializationTest extends DDSpecification {
setup: setup:
def objectMapper = new ObjectMapper(new MessagePackFactory()) def objectMapper = new ObjectMapper(new MessagePackFactory())
def writer = new ListWriter() def writer = new ListWriter()
def tracer = new DDTracer(writer) def tracer = DDTracer.builder().writer(writer).build()
def context = new DDSpanContext( def context = new DDSpanContext(
value, value,
value, value,

View File

@ -17,8 +17,8 @@ class DDSpanTest extends DDSpecification {
def writer = new ListWriter() def writer = new ListWriter()
def sampler = new RateByServiceSampler() def sampler = new RateByServiceSampler()
def tracer = new DDTracer(DEFAULT_SERVICE_NAME, writer, sampler, [:]) def tracer = DDTracer.builder().writer(writer).sampler(sampler).build()
def "getters and setters"() { def "getters and setters"() {
setup: setup:
final DDSpanContext context = final DDSpanContext context =
@ -91,7 +91,7 @@ class DDSpanTest extends DDSpecification {
when: when:
final String resourceName = "fake" final String resourceName = "fake"
final String serviceName = "myService" final String serviceName = "myService"
span = new DDTracer() span = DDTracer.builder().build()
.buildSpan(opName) .buildSpan(opName)
.withResourceName(resourceName) .withResourceName(resourceName)
.withServiceName(serviceName) .withServiceName(serviceName)

View File

@ -23,7 +23,7 @@ class PendingTraceTest extends DDSpecification {
PendingTraceTest.this.traceCount.incrementAndGet() PendingTraceTest.this.traceCount.incrementAndGet()
} }
} }
def tracer = new DDTracer(writer) def tracer = DDTracer.builder().writer(writer).build()
BigInteger traceId = BigInteger.valueOf(System.identityHashCode(this)) BigInteger traceId = BigInteger.valueOf(System.identityHashCode(this))
@ -195,7 +195,7 @@ class PendingTraceTest extends DDSpecification {
def properties = new Properties() def properties = new Properties()
properties.setProperty(PARTIAL_FLUSH_MIN_SPANS, "1") properties.setProperty(PARTIAL_FLUSH_MIN_SPANS, "1")
def config = Config.get(properties) def config = Config.get(properties)
def tracer = new DDTracer(config, writer) def tracer = DDTracer.builder().config(config).writer(writer).build()
def trace = new PendingTrace(tracer, traceId, [:]) def trace = new PendingTrace(tracer, traceId, [:])
def rootSpan = SpanFactory.newSpanOf(trace) def rootSpan = SpanFactory.newSpanOf(trace)
def child1 = tracer.buildSpan("child1").asChildOf(rootSpan).start() def child1 = tracer.buildSpan("child1").asChildOf(rootSpan).start()
@ -241,7 +241,7 @@ class PendingTraceTest extends DDSpecification {
def properties = new Properties() def properties = new Properties()
properties.setProperty(PARTIAL_FLUSH_MIN_SPANS, "1") properties.setProperty(PARTIAL_FLUSH_MIN_SPANS, "1")
def config = Config.get(properties) def config = Config.get(properties)
def tracer = new DDTracer(config, writer) def tracer = DDTracer.builder().config(config).writer(writer).build()
def trace = new PendingTrace(tracer, traceId, [:]) def trace = new PendingTrace(tracer, traceId, [:])
def rootSpan = SpanFactory.newSpanOf(trace) def rootSpan = SpanFactory.newSpanOf(trace)
def child1 = tracer.buildSpan("child1").asChildOf(rootSpan).start() def child1 = tracer.buildSpan("child1").asChildOf(rootSpan).start()

View File

@ -8,7 +8,7 @@ class SpanFactory {
static DDSpan newSpanOf(long timestampMicro, String threadName = Thread.currentThread().name) { static DDSpan newSpanOf(long timestampMicro, String threadName = Thread.currentThread().name) {
def writer = new ListWriter() def writer = new ListWriter()
def tracer = new DDTracer(writer) def tracer = DDTracer.builder().writer(writer).build()
def currentThreadName = Thread.currentThread().getName() def currentThreadName = Thread.currentThread().getName()
Thread.currentThread().setName(threadName) Thread.currentThread().setName(threadName)
def context = new DDSpanContext( def context = new DDSpanContext(
@ -70,7 +70,7 @@ class SpanFactory {
static DDSpan newSpanOf(String serviceName, String envName) { static DDSpan newSpanOf(String serviceName, String envName) {
def writer = new ListWriter() def writer = new ListWriter()
def tracer = new DDTracer(writer) def tracer = DDTracer.builder().writer(writer).build()
def context = new DDSpanContext( def context = new DDSpanContext(
1G, 1G,
1G, 1G,

View File

@ -10,7 +10,7 @@ class TraceCorrelationTest extends DDSpecification {
static final WRITER = new ListWriter() static final WRITER = new ListWriter()
@Shared @Shared
DDTracer tracer = new DDTracer(WRITER) DDTracer tracer = DDTracer.builder().writer(WRITER).build()
def scope = tracer.buildSpan("test").startActive(true) def scope = tracer.buildSpan("test").startActive(true)

View File

@ -12,7 +12,7 @@ import java.util.concurrent.atomic.AtomicBoolean
class TraceInterceptorTest extends DDSpecification { class TraceInterceptorTest extends DDSpecification {
def writer = new ListWriter() def writer = new ListWriter()
def tracer = new DDTracer(writer) def tracer = DDTracer.builder().writer(writer).build()
def "interceptor is registered as a service"() { def "interceptor is registered as a service"() {
expect: expect:

View File

@ -16,7 +16,6 @@ import io.opentracing.tag.Tags
import static datadog.trace.api.Config.DEFAULT_SERVICE_NAME import static datadog.trace.api.Config.DEFAULT_SERVICE_NAME
import static datadog.trace.api.DDTags.ANALYTICS_SAMPLE_RATE import static datadog.trace.api.DDTags.ANALYTICS_SAMPLE_RATE
import static java.util.Collections.emptyMap
class SpanDecoratorTest extends DDSpecification { class SpanDecoratorTest extends DDSpecification {
static { static {
@ -30,7 +29,7 @@ class SpanDecoratorTest extends DDSpecification {
System.clearProperty("dd.$Config.SPLIT_BY_TAGS") System.clearProperty("dd.$Config.SPLIT_BY_TAGS")
} }
} }
def tracer = new DDTracer(new LoggingWriter()) def tracer = DDTracer.builder().writer(new LoggingWriter()).build()
def span = SpanFactory.newSpanOf(tracer) def span = SpanFactory.newSpanOf(tracer)
def "adding span personalisation using Decorators"() { def "adding span personalisation using Decorators"() {
@ -55,16 +54,12 @@ class SpanDecoratorTest extends DDSpecification {
def "set service name"() { def "set service name"() {
setup: setup:
tracer = new DDTracer( tracer = DDTracer.builder()
"wrong-service", .serviceName("wrong-service")
new LoggingWriter(), .writer(new LoggingWriter())
new AllSampler(), .sampler(new AllSampler())
"some-runtime-id", .serviceNameMappings(mapping)
emptyMap(), .build()
emptyMap(),
mapping,
emptyMap()
)
when: when:
def span = tracer.buildSpan("some span").withTag(tag, name).start() def span = tracer.buildSpan("some span").withTag(tag, name).start()
@ -91,16 +86,12 @@ class SpanDecoratorTest extends DDSpecification {
def "default or configured service name can be remapped without setting tag"() { def "default or configured service name can be remapped without setting tag"() {
setup: setup:
tracer = new DDTracer( tracer = DDTracer.builder()
serviceName, .serviceName(serviceName)
new LoggingWriter(), .writer(new LoggingWriter())
new AllSampler(), .sampler(new AllSampler())
"some-runtime-id", .serviceNameMappings(mapping)
emptyMap(), .build()
emptyMap(),
mapping,
emptyMap()
)
when: when:
def span = tracer.buildSpan("some span").start() def span = tracer.buildSpan("some span").start()
@ -138,16 +129,12 @@ class SpanDecoratorTest extends DDSpecification {
def "set service name from servlet.context with context '#context' for service #serviceName"() { def "set service name from servlet.context with context '#context' for service #serviceName"() {
setup: setup:
tracer = new DDTracer( tracer = DDTracer.builder()
serviceName, .serviceName(serviceName)
new LoggingWriter(), .writer(new LoggingWriter())
new AllSampler(), .sampler(new AllSampler())
"some-runtime-id", .serviceNameMappings(mapping)
emptyMap(), .build()
emptyMap(),
mapping,
emptyMap()
)
when: when:
def span = tracer.buildSpan("some span").start() def span = tracer.buildSpan("some span").start()
@ -172,16 +159,12 @@ class SpanDecoratorTest extends DDSpecification {
} }
static createSplittingTracer(tag) { static createSplittingTracer(tag) {
def tracer = new DDTracer( def tracer = DDTracer.builder()
"my-service", .serviceName("my-service")
new LoggingWriter(), .writer(new LoggingWriter())
new AllSampler(), .sampler(new AllSampler())
"some-runtime-id", .build()
emptyMap(),
emptyMap(),
emptyMap(),
emptyMap()
)
// equivalent to split-by-tags: tag // equivalent to split-by-tags: tag
tracer.addDecorator(new ServiceNameDecorator(tag, true)) tracer.addDecorator(new ServiceNameDecorator(tag, true))
@ -477,16 +460,11 @@ class SpanDecoratorTest extends DDSpecification {
System.setProperty("dd.trace." + PeerServiceDecorator.getSimpleName().toLowerCase() + ".enabled", "false") System.setProperty("dd.trace." + PeerServiceDecorator.getSimpleName().toLowerCase() + ".enabled", "false")
} }
tracer = new DDTracer( tracer = DDTracer.builder()
"some-service", .serviceName("some-service")
new LoggingWriter(), .writer(new LoggingWriter())
new AllSampler(), .sampler(new AllSampler())
"some-runtime-id", .build()
emptyMap(),
emptyMap(),
emptyMap(),
emptyMap()
)
when: when:
def span = tracer.buildSpan("some span").withTag(Tags.PEER_SERVICE.key, "peer-service").start() def span = tracer.buildSpan("some span").withTag(Tags.PEER_SERVICE.key, "peer-service").start()
@ -507,16 +485,11 @@ class SpanDecoratorTest extends DDSpecification {
System.setProperty("dd.trace." + ServiceNameDecorator.getSimpleName().toLowerCase() + ".enabled", "false") System.setProperty("dd.trace." + ServiceNameDecorator.getSimpleName().toLowerCase() + ".enabled", "false")
} }
tracer = new DDTracer( tracer = DDTracer.builder()
"some-service", .serviceName("some-service")
new LoggingWriter(), .writer(new LoggingWriter())
new AllSampler(), .sampler(new AllSampler())
"some-runtime-id", .build()
emptyMap(),
emptyMap(),
emptyMap(),
emptyMap()
)
when: when:
def span = tracer.buildSpan("some span").withTag(tag, name).start() def span = tracer.buildSpan("some span").withTag(tag, name).start()

View File

@ -12,7 +12,7 @@ import spock.lang.Subject
class URLAsResourceNameTest extends DDSpecification { class URLAsResourceNameTest extends DDSpecification {
def writer = new ListWriter() def writer = new ListWriter()
def tracer = new DDTracer(writer) def tracer = DDTracer.builder().writer(writer).build()
@Subject @Subject
def decorator = new URLAsResourceName() def decorator = new URLAsResourceName()

View File

@ -20,7 +20,7 @@ class B3HttpInjectorTest extends DDSpecification {
def "inject http headers"() { def "inject http headers"() {
setup: setup:
def writer = new ListWriter() def writer = new ListWriter()
def tracer = new DDTracer(writer) def tracer = DDTracer.builder().writer(writer).build()
final DDSpanContext mockedContext = final DDSpanContext mockedContext =
new DDSpanContext( new DDSpanContext(
traceId, traceId,

View File

@ -22,7 +22,7 @@ class DatadogHttpInjectorTest extends DDSpecification {
def "inject http headers"() { def "inject http headers"() {
setup: setup:
def writer = new ListWriter() def writer = new ListWriter()
def tracer = new DDTracer(writer) def tracer = DDTracer.builder().writer(writer).build()
final DDSpanContext mockedContext = final DDSpanContext mockedContext =
new DDSpanContext( new DDSpanContext(
traceId, traceId,

View File

@ -20,7 +20,7 @@ class HaystackHttpInjectorTest extends DDSpecification {
def "inject http headers"() { def "inject http headers"() {
setup: setup:
def writer = new ListWriter() def writer = new ListWriter()
def tracer = new DDTracer(writer) def tracer = DDTracer.builder().writer(writer).build()
final DDSpanContext mockedContext = final DDSpanContext mockedContext =
new DDSpanContext( new DDSpanContext(
traceId, traceId,

View File

@ -25,7 +25,7 @@ class HttpInjectorTest extends DDSpecification {
def spanId = 2G def spanId = 2G
def writer = new ListWriter() def writer = new ListWriter()
def tracer = new DDTracer(writer) def tracer = DDTracer.builder().writer(writer).build()
final DDSpanContext mockedContext = final DDSpanContext mockedContext =
new DDSpanContext( new DDSpanContext(
traceId, traceId,

View File

@ -40,7 +40,7 @@ class DDTracerTest extends DDSpecification {
def "verify defaults on tracer"() { def "verify defaults on tracer"() {
when: when:
def tracer = new DDTracer() def tracer = DDTracer.builder().build()
then: then:
tracer.serviceName == "unnamed-java-app" tracer.serviceName == "unnamed-java-app"
@ -63,7 +63,7 @@ class DDTracerTest extends DDSpecification {
System.setProperty(PREFIX + HEALTH_METRICS_ENABLED, "true") System.setProperty(PREFIX + HEALTH_METRICS_ENABLED, "true")
when: when:
def tracer = new DDTracer(new Config()) def tracer = DDTracer.builder().config(new Config()).build()
then: then:
tracer.writer.monitor instanceof Monitor.StatsD tracer.writer.monitor instanceof Monitor.StatsD
@ -75,7 +75,7 @@ class DDTracerTest extends DDSpecification {
setup: setup:
System.setProperty(PREFIX + PRIORITY_SAMPLING, "false") System.setProperty(PREFIX + PRIORITY_SAMPLING, "false")
when: when:
def tracer = new DDTracer(new Config()) def tracer = DDTracer.builder().config(new Config()).build()
then: then:
tracer.sampler instanceof AllSampler tracer.sampler instanceof AllSampler
} }
@ -85,7 +85,7 @@ class DDTracerTest extends DDSpecification {
System.setProperty(PREFIX + WRITER_TYPE, "LoggingWriter") System.setProperty(PREFIX + WRITER_TYPE, "LoggingWriter")
when: when:
def tracer = new DDTracer(new Config()) def tracer = DDTracer.builder().config(new Config()).build()
then: then:
tracer.writer instanceof LoggingWriter tracer.writer instanceof LoggingWriter
@ -98,8 +98,7 @@ class DDTracerTest extends DDSpecification {
System.setProperty(PREFIX + HEADER_TAGS, mapString) System.setProperty(PREFIX + HEADER_TAGS, mapString)
when: when:
def config = new Config() def tracer = DDTracer.builder().config(new Config()).build()
def tracer = new DDTracer(config)
// Datadog extractor gets placed first // Datadog extractor gets placed first
def taggedHeaders = tracer.extractor.extractors[0].taggedHeaders def taggedHeaders = tracer.extractor.extractors[0].taggedHeaders
@ -117,7 +116,7 @@ class DDTracerTest extends DDSpecification {
def "verify overriding host"() { def "verify overriding host"() {
when: when:
System.setProperty(PREFIX + key, value) System.setProperty(PREFIX + key, value)
def tracer = new DDTracer(new Config()) def tracer = DDTracer.builder().config(new Config()).build()
then: then:
tracer.writer instanceof DDAgentWriter tracer.writer instanceof DDAgentWriter
@ -132,7 +131,7 @@ class DDTracerTest extends DDSpecification {
def "verify overriding port"() { def "verify overriding port"() {
when: when:
System.setProperty(PREFIX + key, value) System.setProperty(PREFIX + key, value)
def tracer = new DDTracer(new Config()) def tracer = DDTracer.builder().config(new Config()).build()
then: then:
tracer.writer instanceof DDAgentWriter tracer.writer instanceof DDAgentWriter
@ -148,7 +147,7 @@ class DDTracerTest extends DDSpecification {
def "Writer is instance of LoggingWriter when property set"() { def "Writer is instance of LoggingWriter when property set"() {
when: when:
System.setProperty(PREFIX + "writer.type", "LoggingWriter") System.setProperty(PREFIX + "writer.type", "LoggingWriter")
def tracer = new DDTracer(new Config()) def tracer = DDTracer.builder().config(new Config()).build()
then: then:
tracer.writer instanceof LoggingWriter tracer.writer instanceof LoggingWriter
@ -173,7 +172,7 @@ class DDTracerTest extends DDSpecification {
def "Shares TraceCount with DDApi with #key = #value"() { def "Shares TraceCount with DDApi with #key = #value"() {
setup: setup:
System.setProperty(PREFIX + key, value) System.setProperty(PREFIX + key, value)
final DDTracer tracer = new DDTracer(new Config()) final DDTracer tracer = DDTracer.builder().build()
expect: expect:
tracer.writer instanceof DDAgentWriter tracer.writer instanceof DDAgentWriter
@ -187,7 +186,7 @@ class DDTracerTest extends DDSpecification {
def "root tags are applied only to root spans"() { def "root tags are applied only to root spans"() {
setup: setup:
def tracer = new DDTracer('my_service', new ListWriter(), new AllSampler(), '', ['only_root': 'value'], [:], [:], [:]) def tracer = DDTracer.builder().localRootSpanTags(['only_root': 'value']).build()
def root = tracer.buildSpan('my_root').start() def root = tracer.buildSpan('my_root').start()
def child = tracer.buildSpan('my_child').asChildOf(root).start() def child = tracer.buildSpan('my_child').asChildOf(root).start()
@ -204,7 +203,7 @@ class DDTracerTest extends DDSpecification {
given: given:
Properties properties = new Properties() Properties properties = new Properties()
properties.setProperty("writer.type", "LoggingWriter") properties.setProperty("writer.type", "LoggingWriter")
def tracer = new DDTracer(new Config(properties, Config.get())) def tracer = DDTracer.builder().withProperties(properties).build()
when: when:
def span = tracer.buildSpan("operation").start() def span = tracer.buildSpan("operation").start()
@ -218,7 +217,7 @@ class DDTracerTest extends DDSpecification {
given: given:
Properties properties = new Properties() Properties properties = new Properties()
properties.setProperty("writer.type", "LoggingWriter") properties.setProperty("writer.type", "LoggingWriter")
def tracer = new DDTracer(new Config(properties, Config.get())) def tracer = DDTracer.builder().withProperties(properties).build()
when: when:
def root = tracer.buildSpan("operation").start() def root = tracer.buildSpan("operation").start()
@ -240,7 +239,7 @@ class DDTracerTest extends DDSpecification {
given: given:
Properties properties = new Properties() Properties properties = new Properties()
properties.setProperty("writer.type", "LoggingWriter") properties.setProperty("writer.type", "LoggingWriter")
def tracer = new DDTracer(new Config(properties, Config.get())) def tracer = DDTracer.builder().withProperties(properties).build()
def injector = Mock(TextMapInject) def injector = Mock(TextMapInject)
when: when:
@ -261,7 +260,7 @@ class DDTracerTest extends DDSpecification {
def "span priority only set after first injection"() { def "span priority only set after first injection"() {
given: given:
def sampler = new ControllableSampler() def sampler = new ControllableSampler()
def tracer = new DDTracer("serviceName", new LoggingWriter(), sampler) def tracer = DDTracer.builder().writer(new LoggingWriter()).sampler(sampler).build()
def injector = Mock(TextMapInject) def injector = Mock(TextMapInject)
when: when:
@ -294,7 +293,7 @@ class DDTracerTest extends DDSpecification {
def "injection doesn't override set priority"() { def "injection doesn't override set priority"() {
given: given:
def sampler = new ControllableSampler() def sampler = new ControllableSampler()
def tracer = new DDTracer("serviceName", new LoggingWriter(), sampler) def tracer = DDTracer.builder().writer(new LoggingWriter()).sampler(sampler).build()
def injector = Mock(TextMapInject) def injector = Mock(TextMapInject)
when: when:

View File

@ -74,7 +74,7 @@ class RateByServiceSamplerTest extends DDSpecification {
def "sampling priority set when service later"() { def "sampling priority set when service later"() {
def sampler = new RateByServiceSampler() def sampler = new RateByServiceSampler()
def tracer = new DDTracer("serviceName", new LoggingWriter(), sampler) def tracer = DDTracer.builder().writer(new LoggingWriter()).sampler(sampler).build()
sampler.onResponse("test", new ObjectMapper() sampler.onResponse("test", new ObjectMapper()
.readTree('{"rate_by_service":{"service:,env:":1.0,"service:spock,env:":0.0}}')) .readTree('{"rate_by_service":{"service:,env:":1.0,"service:spock,env:":0.0}}'))
@ -103,7 +103,7 @@ class RateByServiceSamplerTest extends DDSpecification {
def "setting forced tracing via tag"() { def "setting forced tracing via tag"() {
when: when:
def sampler = new RateByServiceSampler() def sampler = new RateByServiceSampler()
def tracer = new DDTracer("serviceName", new LoggingWriter(), sampler) def tracer = DDTracer.builder().writer(new LoggingWriter()).sampler(sampler).build()
def span = tracer.buildSpan("root").start() def span = tracer.buildSpan("root").start()
if (tagName) { if (tagName) {
span.setTag(tagName, tagValue) span.setTag(tagName, tagValue)
@ -122,7 +122,7 @@ class RateByServiceSamplerTest extends DDSpecification {
def "not setting forced tracing via tag or setting it wrong value not causing exception"() { def "not setting forced tracing via tag or setting it wrong value not causing exception"() {
setup: setup:
def sampler = new RateByServiceSampler() def sampler = new RateByServiceSampler()
def tracer = new DDTracer("serviceName", new LoggingWriter(), sampler) def tracer = DDTracer.builder().writer(new LoggingWriter()).sampler(sampler).build()
def span = tracer.buildSpan("root").start() def span = tracer.buildSpan("root").start()
if (tagName) { if (tagName) {
span.setTag(tagName, tagValue) span.setTag(tagName, tagValue)

View File

@ -23,7 +23,7 @@ class DDApiIntegrationTest {
@Requires({ "true" == System.getenv("CI") || jvm.java8Compatible }) @Requires({ "true" == System.getenv("CI") || jvm.java8Compatible })
static class DDAgentApiIntegrationV4Test extends DDSpecification { static class DDAgentApiIntegrationV4Test extends DDSpecification {
static final WRITER = new ListWriter() static final WRITER = new ListWriter()
static final TRACER = new DDTracer(WRITER) static final TRACER = DDTracer.builder().writer(WRITER).build()
static final CONTEXT = new DDSpanContext( static final CONTEXT = new DDSpanContext(
1G, 1G,
1G, 1G,