From b12f072536cd776a7d925b3dc468044b78aeeeb9 Mon Sep 17 00:00:00 2001 From: Marcus Marinelli Date: Mon, 15 Feb 2021 10:55:12 -0800 Subject: [PATCH 1/3] Addresses #1043: add a serviceName attribute to the @Trace annotation --- .../trace_annotation/TraceAdvice.java | 6 +++++ .../test/groovy/TraceAnnotationsTest.groovy | 24 +++++++++++++++++++ .../test/trace/annotation/SayTracedHello.java | 5 ++++ .../main/java/datadog/trace/api/Trace.java | 3 +++ 4 files changed, 38 insertions(+) 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..f66b75d5ece 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,30 @@ 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.sayHello" + operationName "trace.annotation" + spanType "DB" + 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 ""; } From 4d3d0d4612f6e6c6421948d284b357fbf8dc07a1 Mon Sep 17 00:00:00 2001 From: Marcus Marinelli Date: Mon, 15 Feb 2021 11:37:44 -0800 Subject: [PATCH 2/3] Fix resourceName in test to match resource name that the test method generates --- .../src/test/groovy/TraceAnnotationsTest.groovy | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 f66b75d5ece..b0792230f68 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 @@ -87,7 +87,7 @@ class TraceAnnotationsTest extends AgentTestRunner { trace(1) { span { serviceName "testServiceName" - resourceName "SayTracedHello.sayHello" + resourceName "SayTracedHello.sayHelloWithServiceName" operationName "trace.annotation" spanType "DB" parent() From ec0191a2e9c0043fa38fb12a9b76c17b5d75825d Mon Sep 17 00:00:00 2001 From: Marcus Marinelli Date: Mon, 15 Feb 2021 12:02:19 -0800 Subject: [PATCH 3/3] Remove "expected" spanType that wasn't being set in the test --- .../trace-annotation/src/test/groovy/TraceAnnotationsTest.groovy | 1 - 1 file changed, 1 deletion(-) 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 b0792230f68..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 @@ -89,7 +89,6 @@ class TraceAnnotationsTest extends AgentTestRunner { serviceName "testServiceName" resourceName "SayTracedHello.sayHelloWithServiceName" operationName "trace.annotation" - spanType "DB" parent() errored false tags {