From e31cbd6c89bfff105f6da5030bd7457e1f709d43 Mon Sep 17 00:00:00 2001 From: Tyler Benson Date: Tue, 14 Jan 2020 17:05:05 -0800 Subject: [PATCH] Add Builder to DDTracer Deprecate previous constructors. --- .../trace/agent/tooling/TracerInstaller.java | 2 +- .../trace/agent/test/AgentTestRunner.java | 2 +- .../java/datadog/opentracing/DDTracer.java | 87 ++++++++++++++--- .../resolver/DDTracerResolver.java | 2 +- .../groovy/OT31ApiTest.groovy | 2 +- .../groovy/OT33ApiTest.groovy | 2 +- .../opentracing/DDSpanBuilderTest.groovy | 4 +- .../DDSpanSerializationTest.groovy | 4 +- .../datadog/opentracing/DDSpanTest.groovy | 6 +- .../opentracing/PendingTraceTest.groovy | 6 +- .../datadog/opentracing/SpanFactory.groovy | 4 +- .../opentracing/TraceCorrelationTest.groovy | 2 +- .../opentracing/TraceInterceptorTest.groovy | 2 +- .../decorators/SpanDecoratorTest.groovy | 97 +++++++------------ .../decorators/URLAsResourceNameTest.groovy | 2 +- .../propagation/B3HttpInjectorTest.groovy | 2 +- .../DatadogHttpInjectorTest.groovy | 2 +- .../HaystackHttpInjectorTest.groovy | 2 +- .../propagation/HttpInjectorTest.groovy | 2 +- .../groovy/datadog/trace/DDTracerTest.groovy | 31 +++--- .../sampling/RateByServiceSamplerTest.groovy | 6 +- .../groovy/DDApiIntegrationTest.groovy | 2 +- 22 files changed, 154 insertions(+), 117 deletions(-) diff --git a/dd-java-agent/agent-tooling/src/main/java/datadog/trace/agent/tooling/TracerInstaller.java b/dd-java-agent/agent-tooling/src/main/java/datadog/trace/agent/tooling/TracerInstaller.java index a9d9e04041..88370ab63b 100644 --- a/dd-java-agent/agent-tooling/src/main/java/datadog/trace/agent/tooling/TracerInstaller.java +++ b/dd-java-agent/agent-tooling/src/main/java/datadog/trace/agent/tooling/TracerInstaller.java @@ -11,7 +11,7 @@ public class TracerInstaller { public static synchronized void installGlobalTracer() { if (Config.get().isTraceEnabled()) { if (!io.opentracing.util.GlobalTracer.isRegistered()) { - final DDTracer tracer = new DDTracer(); + final DDTracer tracer = DDTracer.builder().build(); try { io.opentracing.util.GlobalTracer.register(tracer); datadog.trace.api.GlobalTracer.registerIfAbsent(tracer); diff --git a/dd-java-agent/testing/src/main/groovy/datadog/trace/agent/test/AgentTestRunner.java b/dd-java-agent/testing/src/main/groovy/datadog/trace/agent/test/AgentTestRunner.java index 894caba16f..6c93f4cc66 100644 --- a/dd-java-agent/testing/src/main/groovy/datadog/trace/agent/test/AgentTestRunner.java +++ b/dd-java-agent/testing/src/main/groovy/datadog/trace/agent/test/AgentTestRunner.java @@ -95,7 +95,7 @@ public abstract class AgentTestRunner extends DDSpecification { return result; } }; - TEST_TRACER = new DDTracer(TEST_WRITER); + TEST_TRACER = DDTracer.builder().writer(TEST_WRITER).build(); GlobalTracerUtils.registerOrReplaceGlobalTracer((Tracer) TEST_TRACER); GlobalTracer.registerIfAbsent((datadog.trace.api.Tracer) TEST_TRACER); } diff --git a/dd-trace-ot/src/main/java/datadog/opentracing/DDTracer.java b/dd-trace-ot/src/main/java/datadog/opentracing/DDTracer.java index ae5a0c4301..28389f839e 100644 --- a/dd-trace-ot/src/main/java/datadog/opentracing/DDTracer.java +++ b/dd-trace-ot/src/main/java/datadog/opentracing/DDTracer.java @@ -96,28 +96,68 @@ public class DDTracer implements io.opentracing.Tracer, Closeable, datadog.trace private final HttpCodec.Injector injector; private final HttpCodec.Extractor extractor; + public static class Builder { + public Builder() { + // Apply the default values from config. + withConfig(Config.get()); + } + + public Builder writer(final Writer writer) { + if (this.writer != null && this.writer != writer) { + // Try to avoid leaking resources + this.writer.close(); + } + this.writer = writer; + return this; + } + + public Builder withProperties(final Properties properties) { + return withConfig(Config.get(properties)); + } + + public Builder withConfig(final Config config) { + serviceName(config.getServiceName()); + writer(Writer.Builder.forConfig(config)); + 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. */ + @Deprecated public DDTracer() { this(Config.get()); } + @Deprecated public DDTracer(final String serviceName) { this(serviceName, Config.get()); } + @Deprecated public DDTracer(final Properties config) { this(Config.get(config)); } + @Deprecated public DDTracer(final Config config) { this(config.getServiceName(), config); } // 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) { this(serviceName, writer, sampler, Config.get().getLocalRootSpanTags()); } + @Deprecated private DDTracer(final String serviceName, final Config config) { this( serviceName, @@ -132,6 +172,7 @@ public class DDTracer implements io.opentracing.Tracer, Closeable, datadog.trace } /** Visible for testing */ + @Deprecated DDTracer( final String serviceName, final Writer writer, @@ -148,10 +189,12 @@ public class DDTracer implements io.opentracing.Tracer, Closeable, datadog.trace 0); } + @Deprecated public DDTracer(final Writer writer) { this(Config.get(), writer); } + @Deprecated public DDTracer(final Config config, final Writer writer) { this( config.getServiceName(), @@ -164,9 +207,6 @@ public class DDTracer implements io.opentracing.Tracer, Closeable, datadog.trace config.getPartialFlushMinSpans()); } - /** - * @deprecated Use {@link #DDTracer(String, Writer, Sampler, Map, Map, Map, Map, int)} instead. - */ @Deprecated public DDTracer( final String serviceName, @@ -188,9 +228,6 @@ public class DDTracer implements io.opentracing.Tracer, Closeable, datadog.trace Config.get().getPartialFlushMinSpans()); } - /** - * @deprecated Use {@link #DDTracer(String, Writer, Sampler, Map, Map, Map, Map, int)} instead. - */ @Deprecated public DDTracer( final String serviceName, @@ -211,6 +248,7 @@ public class DDTracer implements io.opentracing.Tracer, Closeable, datadog.trace Config.get().getPartialFlushMinSpans()); } + @Deprecated public DDTracer( final String serviceName, final Writer writer, @@ -220,6 +258,34 @@ public class DDTracer implements io.opentracing.Tracer, Closeable, datadog.trace final Map serviceNameMappings, final Map taggedHeaders, final int partialFlushMinSpans) { + this( + 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 String serviceName, + final Writer writer, + final Sampler sampler, + final HttpCodec.Injector injector, + final HttpCodec.Extractor extractor, + final Map localRootSpanTags, + final Map defaultSpanTags, + final Map serviceNameMappings, + final Map taggedHeaders, + final int partialFlushMinSpans) { + + assert writer != null; assert localRootSpanTags != null; assert defaultSpanTags != null; assert serviceNameMappings != null; @@ -227,13 +293,16 @@ public class DDTracer implements io.opentracing.Tracer, Closeable, datadog.trace this.serviceName = serviceName; this.writer = writer; - this.writer.start(); this.sampler = sampler; + this.injector = injector; + this.extractor = extractor; this.localRootSpanTags = localRootSpanTags; this.defaultSpanTags = defaultSpanTags; this.serviceNameMappings = serviceNameMappings; this.partialFlushMinSpans = partialFlushMinSpans; + this.writer.start(); + shutdownCallback = new ShutdownHook(this); try { Runtime.getRuntime().addShutdownHook(shutdownCallback); @@ -241,10 +310,6 @@ public class DDTracer implements io.opentracing.Tracer, Closeable, datadog.trace // 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) { ((DDAgentWriter) this.writer).addResponseListener((DDAgentResponseListener) this.sampler); } diff --git a/dd-trace-ot/src/main/java/datadog/opentracing/resolver/DDTracerResolver.java b/dd-trace-ot/src/main/java/datadog/opentracing/resolver/DDTracerResolver.java index 571323780b..1522978d21 100644 --- a/dd-trace-ot/src/main/java/datadog/opentracing/resolver/DDTracerResolver.java +++ b/dd-trace-ot/src/main/java/datadog/opentracing/resolver/DDTracerResolver.java @@ -16,7 +16,7 @@ public class DDTracerResolver extends TracerResolver { Tracer resolve(final Config config) { if (config.isTraceResolverEnabled()) { log.info("Creating DDTracer with DDTracerResolver"); - return new DDTracer(); + return DDTracer.builder().withConfig(config).build(); } else { log.info("DDTracerResolver disabled"); return null; diff --git a/dd-trace-ot/src/ot31CompatabilityTest/groovy/OT31ApiTest.groovy b/dd-trace-ot/src/ot31CompatabilityTest/groovy/OT31ApiTest.groovy index dc0dd2d99e..a08b90a9f1 100644 --- a/dd-trace-ot/src/ot31CompatabilityTest/groovy/OT31ApiTest.groovy +++ b/dd-trace-ot/src/ot31CompatabilityTest/groovy/OT31ApiTest.groovy @@ -17,7 +17,7 @@ class OT31ApiTest extends DDSpecification { static final WRITER = new ListWriter() @Subject - Tracer tracer = new DDTracer(WRITER) + Tracer tracer = DDTracer.builder().writer(WRITER).build() def "test startActive"() { when: diff --git a/dd-trace-ot/src/ot33CompatabilityTest/groovy/OT33ApiTest.groovy b/dd-trace-ot/src/ot33CompatabilityTest/groovy/OT33ApiTest.groovy index 3e8d3811e3..371b11dada 100644 --- a/dd-trace-ot/src/ot33CompatabilityTest/groovy/OT33ApiTest.groovy +++ b/dd-trace-ot/src/ot33CompatabilityTest/groovy/OT33ApiTest.groovy @@ -13,7 +13,7 @@ class OT33ApiTest extends DDSpecification { static final WRITER = new ListWriter() @Subject - Tracer tracer = new DDTracer(WRITER) + Tracer tracer = DDTracer.builder().writer(WRITER).build() def "test start"() { when: diff --git a/dd-trace-ot/src/test/groovy/datadog/opentracing/DDSpanBuilderTest.groovy b/dd-trace-ot/src/test/groovy/datadog/opentracing/DDSpanBuilderTest.groovy index 8ab6c32d0e..c55df14468 100644 --- a/dd-trace-ot/src/test/groovy/datadog/opentracing/DDSpanBuilderTest.groovy +++ b/dd-trace-ot/src/test/groovy/datadog/opentracing/DDSpanBuilderTest.groovy @@ -16,7 +16,7 @@ class DDSpanBuilderTest extends DDSpecification { def writer = new ListWriter() def config = Config.get() - def tracer = new DDTracer(writer) + def tracer = DDTracer.builder().writer(writer).build() def "build simple span"() { setup: @@ -458,7 +458,7 @@ class DDSpanBuilderTest extends DDSpecification { setup: System.setProperty("dd.trace.span.tags", tagString) def config = new Config() - tracer = new DDTracer(config, writer) + tracer = DDTracer.builder().withConfig(config).writer(writer).build() def span = tracer.buildSpan("op name").withServiceName("foo").start() expect: diff --git a/dd-trace-ot/src/test/groovy/datadog/opentracing/DDSpanSerializationTest.groovy b/dd-trace-ot/src/test/groovy/datadog/opentracing/DDSpanSerializationTest.groovy index 630da87044..757f562cb0 100644 --- a/dd-trace-ot/src/test/groovy/datadog/opentracing/DDSpanSerializationTest.groovy +++ b/dd-trace-ot/src/test/groovy/datadog/opentracing/DDSpanSerializationTest.groovy @@ -40,7 +40,7 @@ class DDSpanSerializationTest extends DDSpecification { expected.put("trace_id", 1l) def writer = new ListWriter() - def tracer = new DDTracer(writer) + def tracer = DDTracer.builder().writer(writer).build() final DDSpanContext context = new DDSpanContext( 1G, @@ -81,7 +81,7 @@ class DDSpanSerializationTest extends DDSpecification { setup: def objectMapper = new ObjectMapper(new MessagePackFactory()) def writer = new ListWriter() - def tracer = new DDTracer(writer) + def tracer = DDTracer.builder().writer(writer).build() def context = new DDSpanContext( value, value, diff --git a/dd-trace-ot/src/test/groovy/datadog/opentracing/DDSpanTest.groovy b/dd-trace-ot/src/test/groovy/datadog/opentracing/DDSpanTest.groovy index bd87fc452a..88de2df8df 100644 --- a/dd-trace-ot/src/test/groovy/datadog/opentracing/DDSpanTest.groovy +++ b/dd-trace-ot/src/test/groovy/datadog/opentracing/DDSpanTest.groovy @@ -17,8 +17,8 @@ class DDSpanTest extends DDSpecification { def writer = new ListWriter() 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"() { setup: final DDSpanContext context = @@ -91,7 +91,7 @@ class DDSpanTest extends DDSpecification { when: final String resourceName = "fake" final String serviceName = "myService" - span = new DDTracer() + span = DDTracer.builder().build() .buildSpan(opName) .withResourceName(resourceName) .withServiceName(serviceName) diff --git a/dd-trace-ot/src/test/groovy/datadog/opentracing/PendingTraceTest.groovy b/dd-trace-ot/src/test/groovy/datadog/opentracing/PendingTraceTest.groovy index 8242e6ffd5..b987e5227f 100644 --- a/dd-trace-ot/src/test/groovy/datadog/opentracing/PendingTraceTest.groovy +++ b/dd-trace-ot/src/test/groovy/datadog/opentracing/PendingTraceTest.groovy @@ -23,7 +23,7 @@ class PendingTraceTest extends DDSpecification { PendingTraceTest.this.traceCount.incrementAndGet() } } - def tracer = new DDTracer(writer) + def tracer = DDTracer.builder().writer(writer).build() BigInteger traceId = BigInteger.valueOf(System.identityHashCode(this)) @@ -195,7 +195,7 @@ class PendingTraceTest extends DDSpecification { def properties = new Properties() properties.setProperty(PARTIAL_FLUSH_MIN_SPANS, "1") def config = Config.get(properties) - def tracer = new DDTracer(config, writer) + def tracer = DDTracer.builder().withConfig(config).writer(writer).build() def trace = new PendingTrace(tracer, traceId, [:]) def rootSpan = SpanFactory.newSpanOf(trace) def child1 = tracer.buildSpan("child1").asChildOf(rootSpan).start() @@ -241,7 +241,7 @@ class PendingTraceTest extends DDSpecification { def properties = new Properties() properties.setProperty(PARTIAL_FLUSH_MIN_SPANS, "1") def config = Config.get(properties) - def tracer = new DDTracer(config, writer) + def tracer = DDTracer.builder().withConfig(config).writer(writer).build() def trace = new PendingTrace(tracer, traceId, [:]) def rootSpan = SpanFactory.newSpanOf(trace) def child1 = tracer.buildSpan("child1").asChildOf(rootSpan).start() diff --git a/dd-trace-ot/src/test/groovy/datadog/opentracing/SpanFactory.groovy b/dd-trace-ot/src/test/groovy/datadog/opentracing/SpanFactory.groovy index c2ff699e80..5b1028c969 100644 --- a/dd-trace-ot/src/test/groovy/datadog/opentracing/SpanFactory.groovy +++ b/dd-trace-ot/src/test/groovy/datadog/opentracing/SpanFactory.groovy @@ -8,7 +8,7 @@ class SpanFactory { static DDSpan newSpanOf(long timestampMicro, String threadName = Thread.currentThread().name) { def writer = new ListWriter() - def tracer = new DDTracer(writer) + def tracer = DDTracer.builder().writer(writer).build() def currentThreadName = Thread.currentThread().getName() Thread.currentThread().setName(threadName) def context = new DDSpanContext( @@ -70,7 +70,7 @@ class SpanFactory { static DDSpan newSpanOf(String serviceName, String envName) { def writer = new ListWriter() - def tracer = new DDTracer(writer) + def tracer = DDTracer.builder().writer(writer).build() def context = new DDSpanContext( 1G, 1G, diff --git a/dd-trace-ot/src/test/groovy/datadog/opentracing/TraceCorrelationTest.groovy b/dd-trace-ot/src/test/groovy/datadog/opentracing/TraceCorrelationTest.groovy index b12eee8b44..f20f03f0d5 100644 --- a/dd-trace-ot/src/test/groovy/datadog/opentracing/TraceCorrelationTest.groovy +++ b/dd-trace-ot/src/test/groovy/datadog/opentracing/TraceCorrelationTest.groovy @@ -10,7 +10,7 @@ class TraceCorrelationTest extends DDSpecification { static final WRITER = new ListWriter() @Shared - DDTracer tracer = new DDTracer(WRITER) + DDTracer tracer = DDTracer.builder().writer(WRITER).build() def scope = tracer.buildSpan("test").startActive(true) diff --git a/dd-trace-ot/src/test/groovy/datadog/opentracing/TraceInterceptorTest.groovy b/dd-trace-ot/src/test/groovy/datadog/opentracing/TraceInterceptorTest.groovy index afc47d5cd4..5ccc3372bd 100644 --- a/dd-trace-ot/src/test/groovy/datadog/opentracing/TraceInterceptorTest.groovy +++ b/dd-trace-ot/src/test/groovy/datadog/opentracing/TraceInterceptorTest.groovy @@ -12,7 +12,7 @@ import java.util.concurrent.atomic.AtomicBoolean class TraceInterceptorTest extends DDSpecification { def writer = new ListWriter() - def tracer = new DDTracer(writer) + def tracer = DDTracer.builder().writer(writer).build() def "interceptor is registered as a service"() { expect: diff --git a/dd-trace-ot/src/test/groovy/datadog/opentracing/decorators/SpanDecoratorTest.groovy b/dd-trace-ot/src/test/groovy/datadog/opentracing/decorators/SpanDecoratorTest.groovy index f1386e4154..ceb265e0ff 100644 --- a/dd-trace-ot/src/test/groovy/datadog/opentracing/decorators/SpanDecoratorTest.groovy +++ b/dd-trace-ot/src/test/groovy/datadog/opentracing/decorators/SpanDecoratorTest.groovy @@ -16,7 +16,6 @@ import io.opentracing.tag.Tags import static datadog.trace.api.Config.DEFAULT_SERVICE_NAME import static datadog.trace.api.DDTags.ANALYTICS_SAMPLE_RATE -import static java.util.Collections.emptyMap class SpanDecoratorTest extends DDSpecification { static { @@ -30,7 +29,7 @@ class SpanDecoratorTest extends DDSpecification { 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 "adding span personalisation using Decorators"() { @@ -55,16 +54,12 @@ class SpanDecoratorTest extends DDSpecification { def "set service name"() { setup: - tracer = new DDTracer( - "wrong-service", - new LoggingWriter(), - new AllSampler(), - "some-runtime-id", - emptyMap(), - emptyMap(), - mapping, - emptyMap() - ) + tracer = DDTracer.builder() + .serviceName("wrong-service") + .writer(new LoggingWriter()) + .sampler(new AllSampler()) + .serviceNameMappings(mapping) + .build() when: 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"() { setup: - tracer = new DDTracer( - serviceName, - new LoggingWriter(), - new AllSampler(), - "some-runtime-id", - emptyMap(), - emptyMap(), - mapping, - emptyMap() - ) + tracer = DDTracer.builder() + .serviceName(serviceName) + .writer(new LoggingWriter()) + .sampler(new AllSampler()) + .serviceNameMappings(mapping) + .build() when: 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"() { setup: - tracer = new DDTracer( - serviceName, - new LoggingWriter(), - new AllSampler(), - "some-runtime-id", - emptyMap(), - emptyMap(), - mapping, - emptyMap() - ) + tracer = DDTracer.builder() + .serviceName(serviceName) + .writer(new LoggingWriter()) + .sampler(new AllSampler()) + .serviceNameMappings(mapping) + .build() when: def span = tracer.buildSpan("some span").start() @@ -172,16 +159,12 @@ class SpanDecoratorTest extends DDSpecification { } static createSplittingTracer(tag) { - def tracer = new DDTracer( - "my-service", - new LoggingWriter(), - new AllSampler(), - "some-runtime-id", - emptyMap(), - emptyMap(), - emptyMap(), - emptyMap() - ) + def tracer = DDTracer.builder() + .serviceName("my-service") + .writer(new LoggingWriter()) + .sampler(new AllSampler()) + .build() + // equivalent to split-by-tags: tag tracer.addDecorator(new ServiceNameDecorator(tag, true)) @@ -477,16 +460,11 @@ class SpanDecoratorTest extends DDSpecification { System.setProperty("dd.trace." + PeerServiceDecorator.getSimpleName().toLowerCase() + ".enabled", "false") } - tracer = new DDTracer( - "some-service", - new LoggingWriter(), - new AllSampler(), - "some-runtime-id", - emptyMap(), - emptyMap(), - emptyMap(), - emptyMap() - ) + tracer = DDTracer.builder() + .serviceName("some-service") + .writer(new LoggingWriter()) + .sampler(new AllSampler()) + .build() when: 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") } - tracer = new DDTracer( - "some-service", - new LoggingWriter(), - new AllSampler(), - "some-runtime-id", - emptyMap(), - emptyMap(), - emptyMap(), - emptyMap() - ) + tracer = DDTracer.builder() + .serviceName("some-service") + .writer(new LoggingWriter()) + .sampler(new AllSampler()) + .build() when: def span = tracer.buildSpan("some span").withTag(tag, name).start() diff --git a/dd-trace-ot/src/test/groovy/datadog/opentracing/decorators/URLAsResourceNameTest.groovy b/dd-trace-ot/src/test/groovy/datadog/opentracing/decorators/URLAsResourceNameTest.groovy index 3c6d6522ec..8f4366c7f5 100644 --- a/dd-trace-ot/src/test/groovy/datadog/opentracing/decorators/URLAsResourceNameTest.groovy +++ b/dd-trace-ot/src/test/groovy/datadog/opentracing/decorators/URLAsResourceNameTest.groovy @@ -12,7 +12,7 @@ import spock.lang.Subject class URLAsResourceNameTest extends DDSpecification { def writer = new ListWriter() - def tracer = new DDTracer(writer) + def tracer = DDTracer.builder().writer(writer).build() @Subject def decorator = new URLAsResourceName() diff --git a/dd-trace-ot/src/test/groovy/datadog/opentracing/propagation/B3HttpInjectorTest.groovy b/dd-trace-ot/src/test/groovy/datadog/opentracing/propagation/B3HttpInjectorTest.groovy index 227d126b0b..5634abcf96 100644 --- a/dd-trace-ot/src/test/groovy/datadog/opentracing/propagation/B3HttpInjectorTest.groovy +++ b/dd-trace-ot/src/test/groovy/datadog/opentracing/propagation/B3HttpInjectorTest.groovy @@ -20,7 +20,7 @@ class B3HttpInjectorTest extends DDSpecification { def "inject http headers"() { setup: def writer = new ListWriter() - def tracer = new DDTracer(writer) + def tracer = DDTracer.builder().writer(writer).build() final DDSpanContext mockedContext = new DDSpanContext( traceId, diff --git a/dd-trace-ot/src/test/groovy/datadog/opentracing/propagation/DatadogHttpInjectorTest.groovy b/dd-trace-ot/src/test/groovy/datadog/opentracing/propagation/DatadogHttpInjectorTest.groovy index 80f361ae9a..b8433cc226 100644 --- a/dd-trace-ot/src/test/groovy/datadog/opentracing/propagation/DatadogHttpInjectorTest.groovy +++ b/dd-trace-ot/src/test/groovy/datadog/opentracing/propagation/DatadogHttpInjectorTest.groovy @@ -22,7 +22,7 @@ class DatadogHttpInjectorTest extends DDSpecification { def "inject http headers"() { setup: def writer = new ListWriter() - def tracer = new DDTracer(writer) + def tracer = DDTracer.builder().writer(writer).build() final DDSpanContext mockedContext = new DDSpanContext( traceId, diff --git a/dd-trace-ot/src/test/groovy/datadog/opentracing/propagation/HaystackHttpInjectorTest.groovy b/dd-trace-ot/src/test/groovy/datadog/opentracing/propagation/HaystackHttpInjectorTest.groovy index eee64fd8ce..d9f9276eeb 100644 --- a/dd-trace-ot/src/test/groovy/datadog/opentracing/propagation/HaystackHttpInjectorTest.groovy +++ b/dd-trace-ot/src/test/groovy/datadog/opentracing/propagation/HaystackHttpInjectorTest.groovy @@ -20,7 +20,7 @@ class HaystackHttpInjectorTest extends DDSpecification { def "inject http headers"() { setup: def writer = new ListWriter() - def tracer = new DDTracer(writer) + def tracer = DDTracer.builder().writer(writer).build() final DDSpanContext mockedContext = new DDSpanContext( traceId, diff --git a/dd-trace-ot/src/test/groovy/datadog/opentracing/propagation/HttpInjectorTest.groovy b/dd-trace-ot/src/test/groovy/datadog/opentracing/propagation/HttpInjectorTest.groovy index aa1cefbf39..9aed342a91 100644 --- a/dd-trace-ot/src/test/groovy/datadog/opentracing/propagation/HttpInjectorTest.groovy +++ b/dd-trace-ot/src/test/groovy/datadog/opentracing/propagation/HttpInjectorTest.groovy @@ -25,7 +25,7 @@ class HttpInjectorTest extends DDSpecification { def spanId = 2G def writer = new ListWriter() - def tracer = new DDTracer(writer) + def tracer = DDTracer.builder().writer(writer).build() final DDSpanContext mockedContext = new DDSpanContext( traceId, diff --git a/dd-trace-ot/src/test/groovy/datadog/trace/DDTracerTest.groovy b/dd-trace-ot/src/test/groovy/datadog/trace/DDTracerTest.groovy index 5a7ac705c5..19ed3b7e83 100644 --- a/dd-trace-ot/src/test/groovy/datadog/trace/DDTracerTest.groovy +++ b/dd-trace-ot/src/test/groovy/datadog/trace/DDTracerTest.groovy @@ -40,7 +40,7 @@ class DDTracerTest extends DDSpecification { def "verify defaults on tracer"() { when: - def tracer = new DDTracer() + def tracer = DDTracer.builder().build() then: tracer.serviceName == "unnamed-java-app" @@ -63,7 +63,7 @@ class DDTracerTest extends DDSpecification { System.setProperty(PREFIX + HEALTH_METRICS_ENABLED, "true") when: - def tracer = new DDTracer(new Config()) + def tracer = DDTracer.builder().withConfig(new Config()).build() then: tracer.writer.monitor instanceof Monitor.StatsD @@ -75,7 +75,7 @@ class DDTracerTest extends DDSpecification { setup: System.setProperty(PREFIX + PRIORITY_SAMPLING, "false") when: - def tracer = new DDTracer(new Config()) + def tracer = DDTracer.builder().withConfig(new Config()).build() then: tracer.sampler instanceof AllSampler } @@ -85,7 +85,7 @@ class DDTracerTest extends DDSpecification { System.setProperty(PREFIX + WRITER_TYPE, "LoggingWriter") when: - def tracer = new DDTracer(new Config()) + def tracer = DDTracer.builder().withConfig(new Config()).build() then: tracer.writer instanceof LoggingWriter @@ -98,8 +98,7 @@ class DDTracerTest extends DDSpecification { System.setProperty(PREFIX + HEADER_TAGS, mapString) when: - def config = new Config() - def tracer = new DDTracer(config) + def tracer = DDTracer.builder().withConfig(new Config()).build() // Datadog extractor gets placed first def taggedHeaders = tracer.extractor.extractors[0].taggedHeaders @@ -117,7 +116,7 @@ class DDTracerTest extends DDSpecification { def "verify overriding host"() { when: System.setProperty(PREFIX + key, value) - def tracer = new DDTracer(new Config()) + def tracer = DDTracer.builder().withConfig(new Config()).build() then: tracer.writer instanceof DDAgentWriter @@ -132,7 +131,7 @@ class DDTracerTest extends DDSpecification { def "verify overriding port"() { when: System.setProperty(PREFIX + key, value) - def tracer = new DDTracer(new Config()) + def tracer = DDTracer.builder().withConfig(new Config()).build() then: tracer.writer instanceof DDAgentWriter @@ -148,7 +147,7 @@ class DDTracerTest extends DDSpecification { def "Writer is instance of LoggingWriter when property set"() { when: System.setProperty(PREFIX + "writer.type", "LoggingWriter") - def tracer = new DDTracer(new Config()) + def tracer = DDTracer.builder().withConfig(new Config()).build() then: tracer.writer instanceof LoggingWriter @@ -173,7 +172,7 @@ class DDTracerTest extends DDSpecification { def "Shares TraceCount with DDApi with #key = #value"() { setup: System.setProperty(PREFIX + key, value) - final DDTracer tracer = new DDTracer(new Config()) + final DDTracer tracer = DDTracer.builder().build() expect: tracer.writer instanceof DDAgentWriter @@ -187,7 +186,7 @@ class DDTracerTest extends DDSpecification { def "root tags are applied only to root spans"() { 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 child = tracer.buildSpan('my_child').asChildOf(root).start() @@ -204,7 +203,7 @@ class DDTracerTest extends DDSpecification { given: Properties properties = new Properties() properties.setProperty("writer.type", "LoggingWriter") - def tracer = new DDTracer(new Config(properties, Config.get())) + def tracer = DDTracer.builder().withProperties(properties).build() when: def span = tracer.buildSpan("operation").start() @@ -218,7 +217,7 @@ class DDTracerTest extends DDSpecification { given: Properties properties = new Properties() properties.setProperty("writer.type", "LoggingWriter") - def tracer = new DDTracer(new Config(properties, Config.get())) + def tracer = DDTracer.builder().withProperties(properties).build() when: def root = tracer.buildSpan("operation").start() @@ -240,7 +239,7 @@ class DDTracerTest extends DDSpecification { given: Properties properties = new Properties() 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) when: @@ -261,7 +260,7 @@ class DDTracerTest extends DDSpecification { def "span priority only set after first injection"() { given: 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) when: @@ -294,7 +293,7 @@ class DDTracerTest extends DDSpecification { def "injection doesn't override set priority"() { given: 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) when: diff --git a/dd-trace-ot/src/test/groovy/datadog/trace/api/sampling/RateByServiceSamplerTest.groovy b/dd-trace-ot/src/test/groovy/datadog/trace/api/sampling/RateByServiceSamplerTest.groovy index 7a6b7a6fa9..b5709f1066 100644 --- a/dd-trace-ot/src/test/groovy/datadog/trace/api/sampling/RateByServiceSamplerTest.groovy +++ b/dd-trace-ot/src/test/groovy/datadog/trace/api/sampling/RateByServiceSamplerTest.groovy @@ -74,7 +74,7 @@ class RateByServiceSamplerTest extends DDSpecification { def "sampling priority set when service later"() { 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() .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"() { when: 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() if (tagName) { 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"() { setup: 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() if (tagName) { span.setTag(tagName, tagValue) diff --git a/dd-trace-ot/src/traceAgentTest/groovy/DDApiIntegrationTest.groovy b/dd-trace-ot/src/traceAgentTest/groovy/DDApiIntegrationTest.groovy index 00db0a213d..ff793e9aaf 100644 --- a/dd-trace-ot/src/traceAgentTest/groovy/DDApiIntegrationTest.groovy +++ b/dd-trace-ot/src/traceAgentTest/groovy/DDApiIntegrationTest.groovy @@ -23,7 +23,7 @@ class DDApiIntegrationTest { @Requires({ "true" == System.getenv("CI") || jvm.java8Compatible }) static class DDAgentApiIntegrationV4Test extends DDSpecification { static final WRITER = new ListWriter() - static final TRACER = new DDTracer(WRITER) + static final TRACER = DDTracer.builder().writer(WRITER).build() static final CONTEXT = new DDSpanContext( 1G, 1G,