From f67810e72913dd7904c0faa24b060bab331dde35 Mon Sep 17 00:00:00 2001 From: Guillaume Polaert Date: Thu, 20 Jul 2017 16:42:41 +0200 Subject: [PATCH] Fixing issue with the tracer factory (decorators aren't loaded) --- .../trace/resolver/DDTracerFactory.java | 9 +++++ .../trace/resolver/DDTracerResolver.java | 6 +--- .../com/datadoghq/trace/SpanFactory.groovy | 17 +++++++++ .../integration/SpanDecoratorTest.groovy | 36 +++++++++++++++++++ 4 files changed, 63 insertions(+), 5 deletions(-) create mode 100644 dd-trace/src/test/groovy/com/datadoghq/trace/integration/SpanDecoratorTest.groovy diff --git a/dd-trace/src/main/java/com/datadoghq/trace/resolver/DDTracerFactory.java b/dd-trace/src/main/java/com/datadoghq/trace/resolver/DDTracerFactory.java index 67d7d764d8..3e678b0abf 100644 --- a/dd-trace/src/main/java/com/datadoghq/trace/resolver/DDTracerFactory.java +++ b/dd-trace/src/main/java/com/datadoghq/trace/resolver/DDTracerFactory.java @@ -1,6 +1,7 @@ package com.datadoghq.trace.resolver; import com.datadoghq.trace.DDTracer; +import com.datadoghq.trace.integration.DDSpanContextDecorator; import com.datadoghq.trace.sampling.AbstractSampler; import com.datadoghq.trace.sampling.AllSampler; import com.datadoghq.trace.sampling.RateSampler; @@ -9,6 +10,8 @@ import com.datadoghq.trace.writer.DDAgentWriter; import com.datadoghq.trace.writer.DDApi; import com.datadoghq.trace.writer.LoggingWriter; import com.datadoghq.trace.writer.Writer; + +import java.util.List; import java.util.Map; import java.util.regex.Pattern; import lombok.extern.slf4j.Slf4j; @@ -99,6 +102,12 @@ public class DDTracerFactory { tracer = DDTracerFactory.create(tracerConfig); } + //Create decorators from resource files + final List decorators = DDDecoratorsFactory.createFromResources(); + for (final DDSpanContextDecorator decorator : decorators) { + tracer.addDecorator(decorator); + } + return tracer; } } diff --git a/dd-trace/src/main/java/com/datadoghq/trace/resolver/DDTracerResolver.java b/dd-trace/src/main/java/com/datadoghq/trace/resolver/DDTracerResolver.java index 2088546881..353d533ce7 100644 --- a/dd-trace/src/main/java/com/datadoghq/trace/resolver/DDTracerResolver.java +++ b/dd-trace/src/main/java/com/datadoghq/trace/resolver/DDTracerResolver.java @@ -23,11 +23,7 @@ public class DDTracerResolver extends TracerResolver { //Create tracer from resource files tracer = DDTracerFactory.createFromConfigurationFile(); - //Create decorators from resource files - final List decorators = DDDecoratorsFactory.createFromResources(); - for (final DDSpanContextDecorator decorator : decorators) { - tracer.addDecorator(decorator); - } + return tracer; } diff --git a/dd-trace/src/test/groovy/com/datadoghq/trace/SpanFactory.groovy b/dd-trace/src/test/groovy/com/datadoghq/trace/SpanFactory.groovy index a9fb32e9c8..151d6c5658 100644 --- a/dd-trace/src/test/groovy/com/datadoghq/trace/SpanFactory.groovy +++ b/dd-trace/src/test/groovy/com/datadoghq/trace/SpanFactory.groovy @@ -17,4 +17,21 @@ class SpanFactory { null) return new DDSpan(timestampMicro, context) } + + static newSpanTracer(DDTracer tracer) { + def context = new DDSpanContext( + 1L, + 1L, + 0L, + "fakeService", + "fakeOperation", + "fakeResource", + Collections.emptyMap(), + false, + "fakeType", + Collections.emptyMap(), + null, + tracer) + return new DDSpan(0, context) + } } diff --git a/dd-trace/src/test/groovy/com/datadoghq/trace/integration/SpanDecoratorTest.groovy b/dd-trace/src/test/groovy/com/datadoghq/trace/integration/SpanDecoratorTest.groovy new file mode 100644 index 0000000000..2a2b61cdd9 --- /dev/null +++ b/dd-trace/src/test/groovy/com/datadoghq/trace/integration/SpanDecoratorTest.groovy @@ -0,0 +1,36 @@ +package com.datadoghq.trace.integration + +import com.datadoghq.trace.DDSpanContext +import com.datadoghq.trace.DDTracer +import com.datadoghq.trace.SpanFactory +import io.opentracing.tag.StringTag +import spock.lang.Specification + +class SpanDecoratorTest extends Specification { + + def "adding span personalisation using Decorators"() { + setup: + def tracer = new DDTracer() + def decorator = new DDSpanContextDecorator() { + + @Override + boolean afterSetTag(DDSpanContext context, String tag, Object value) { + return super.afterSetTag(context, tag, value) + } + + } + decorator.setMatchingTag("foo") + decorator.setMatchingValue("bar") + decorator.setSetTag("newFoo") + decorator.setSetValue("newBar") + tracer.addDecorator(decorator) + + def span = SpanFactory.newSpanTracer(tracer) + new StringTag("foo").set(span, "bar") + + expect: + span.getTags().containsKey("newFoo") + ((String) span.getTags().get("newFoo")) == "newBar" + + } +}