Only apply service name mapping on finish

If done in the decorator, it would be applied twice.  Only want it done once.
This commit is contained in:
Tyler Benson 2018-07-25 13:22:27 +10:00
parent 7807615605
commit 5fe08d20fc
4 changed files with 7 additions and 18 deletions

View File

@ -24,7 +24,7 @@ public class DDDecoratorsFactory {
httpDecorator2, httpDecorator2,
new OperationDecorator(), new OperationDecorator(),
new ResourceNameDecorator(), new ResourceNameDecorator(),
new ServiceNameDecorator(mappings), new ServiceNameDecorator(),
new ServletContextDecorator(), new ServletContextDecorator(),
new SpanTypeDecorator(), new SpanTypeDecorator(),
new Status5XXDecorator(), new Status5XXDecorator(),

View File

@ -2,25 +2,17 @@ package datadog.opentracing.decorators;
import datadog.opentracing.DDSpanContext; import datadog.opentracing.DDSpanContext;
import datadog.trace.api.DDTags; import datadog.trace.api.DDTags;
import java.util.Map;
public class ServiceNameDecorator extends AbstractDecorator { public class ServiceNameDecorator extends AbstractDecorator {
private final Map<String, String> mappings; public ServiceNameDecorator() {
public ServiceNameDecorator(final Map<String, String> mappings) {
super(); super();
this.setMatchingTag(DDTags.SERVICE_NAME); this.setMatchingTag(DDTags.SERVICE_NAME);
this.mappings = mappings;
} }
@Override @Override
public boolean shouldSetTag(final DDSpanContext context, final String tag, final Object value) { public boolean shouldSetTag(final DDSpanContext context, final String tag, final Object value) {
if (mappings.containsKey(String.valueOf(value))) {
context.setServiceName(mappings.get(String.valueOf(value)));
} else {
context.setServiceName(String.valueOf(value)); context.setServiceName(String.valueOf(value));
}
return false; return false;
} }
} }

View File

@ -42,10 +42,11 @@ class SpanDecoratorTest extends Specification {
def "set service name"() { def "set service name"() {
setup: setup:
tracer.addDecorator(new ServiceNameDecorator(mapping)) tracer = new DDTracer("wrong-service", new LoggingWriter(), new AllSampler(), emptyMap(), mapping, emptyMap())
when: when:
span.setTag(DDTags.SERVICE_NAME, name) def span = tracer.buildSpan("some span").withTag(DDTags.SERVICE_NAME, name).start()
span.finish()
then: then:
span.getServiceName() == expected span.getServiceName() == expected

View File

@ -1,7 +1,6 @@
package datadog.trace package datadog.trace
import datadog.opentracing.DDTracer import datadog.opentracing.DDTracer
import datadog.opentracing.decorators.ServiceNameDecorator
import datadog.trace.common.DDTraceConfig import datadog.trace.common.DDTraceConfig
import datadog.trace.common.sampling.AllSampler import datadog.trace.common.sampling.AllSampler
import datadog.trace.common.writer.DDAgentWriter import datadog.trace.common.writer.DDAgentWriter
@ -119,14 +118,11 @@ class DDTraceConfigTest extends Specification {
when: when:
def tracer = new DDTracer() def tracer = new DDTracer()
ServiceNameDecorator decorator = tracer.spanContextDecorators.values().flatten().find {
it instanceof ServiceNameDecorator
}
def taggedHeaders = tracer.registry.codecs.values().first().taggedHeaders def taggedHeaders = tracer.registry.codecs.values().first().taggedHeaders
then: then:
tracer.spanTags == map tracer.spanTags == map
decorator.mappings == map tracer.serviceNameMappings == map
taggedHeaders == map taggedHeaders == map
where: where: