diff --git a/dd-java-agent/instrumentation/trace-annotation/src/main/java/datadog/trace/instrumentation/trace_annotation/TraceAdvice.java b/dd-java-agent/instrumentation/trace-annotation/src/main/java/datadog/trace/instrumentation/trace_annotation/TraceAdvice.java index 4c71d275b96..9f6305479f8 100644 --- a/dd-java-agent/instrumentation/trace-annotation/src/main/java/datadog/trace/instrumentation/trace_annotation/TraceAdvice.java +++ b/dd-java-agent/instrumentation/trace-annotation/src/main/java/datadog/trace/instrumentation/trace_annotation/TraceAdvice.java @@ -28,6 +28,12 @@ public static AgentScope onEnter(@Advice.Origin final Method method) { resourceName = DECORATE.spanNameForMethod(method); } span.setResourceName(resourceName); + + String serviceName = traceAnnotation == null ? null : traceAnnotation.serviceName(); + if (serviceName != null && serviceName.length() > 0) { + span.setServiceName(serviceName); + } + DECORATE.afterStart(span); final AgentScope scope = activateSpan(span); diff --git a/dd-java-agent/instrumentation/trace-annotation/src/test/groovy/TraceAnnotationsTest.groovy b/dd-java-agent/instrumentation/trace-annotation/src/test/groovy/TraceAnnotationsTest.groovy index d102acf308d..9aaa33e9a68 100644 --- a/dd-java-agent/instrumentation/trace-annotation/src/test/groovy/TraceAnnotationsTest.groovy +++ b/dd-java-agent/instrumentation/trace-annotation/src/test/groovy/TraceAnnotationsTest.groovy @@ -77,6 +77,29 @@ class TraceAnnotationsTest extends AgentTestRunner { } } + def "test simple case with only service name set"() { + setup: + // Test single span in new trace + SayTracedHello.sayHelloWithServiceName() + + expect: + assertTraces(1) { + trace(1) { + span { + serviceName "testServiceName" + resourceName "SayTracedHello.sayHelloWithServiceName" + operationName "trace.annotation" + parent() + errored false + tags { + "$Tags.COMPONENT" "trace" + defaultTags() + } + } + } + } + } + def "test simple case with both resource and operation name set"() { setup: // Test single span in new trace diff --git a/dd-java-agent/instrumentation/trace-annotation/src/test/java/dd/test/trace/annotation/SayTracedHello.java b/dd-java-agent/instrumentation/trace-annotation/src/test/java/dd/test/trace/annotation/SayTracedHello.java index 90f15df910b..6c39df2e239 100644 --- a/dd-java-agent/instrumentation/trace-annotation/src/test/java/dd/test/trace/annotation/SayTracedHello.java +++ b/dd-java-agent/instrumentation/trace-annotation/src/test/java/dd/test/trace/annotation/SayTracedHello.java @@ -34,6 +34,11 @@ public static String sayHAWithResource() { return "HA EARTH!!"; } + @Trace(serviceName = "testServiceName") + public static String sayHelloWithServiceName() { + return "hello!"; + } + @Trace(operationName = "NEW_TRACE") public static String sayHELLOsayHA() { activeSpan().setTag(DDTags.SERVICE_NAME, "test2"); diff --git a/dd-trace-api/src/main/java/datadog/trace/api/Trace.java b/dd-trace-api/src/main/java/datadog/trace/api/Trace.java index 5ae2bd58af8..99e6e801a9d 100644 --- a/dd-trace-api/src/main/java/datadog/trace/api/Trace.java +++ b/dd-trace-api/src/main/java/datadog/trace/api/Trace.java @@ -16,4 +16,7 @@ /** The resource name. By default it uses the same value as the operation name */ String resourceName() default ""; + + /** The service name. By default it will inherit the default service name */ + String serviceName() default ""; }