diff --git a/dd-java-agent/instrumentation/spring-webmvc-6.0/build.gradle b/dd-java-agent/instrumentation/spring-webmvc-6.0/build.gradle index f37139560e6..99e2e6b2155 100644 --- a/dd-java-agent/instrumentation/spring-webmvc-6.0/build.gradle +++ b/dd-java-agent/instrumentation/spring-webmvc-6.0/build.gradle @@ -33,6 +33,9 @@ dependencies { main_java17CompileOnly(group: 'org.springframework', name: 'spring-webmvc', version: '6.0.0') main_java17CompileOnly group: 'jakarta.servlet', name: 'jakarta.servlet-api', version: '5.0.0' + implementation project(':dd-java-agent:instrumentation:span-origin') + main_java17Implementation project(':dd-java-agent:instrumentation:span-origin') + testImplementation(project(':dd-java-agent:testing')) { exclude(module: 'jetty-server') // incompatible servlet api } diff --git a/dd-java-agent/instrumentation/spring-webmvc-6.0/src/main/java/datadog/trace/instrumentation/springweb6/SpringWebCodeOriginInstrumentation.java b/dd-java-agent/instrumentation/spring-webmvc-6.0/src/main/java/datadog/trace/instrumentation/springweb6/SpringWebCodeOriginInstrumentation.java new file mode 100644 index 00000000000..cf5e2bb3a72 --- /dev/null +++ b/dd-java-agent/instrumentation/spring-webmvc-6.0/src/main/java/datadog/trace/instrumentation/springweb6/SpringWebCodeOriginInstrumentation.java @@ -0,0 +1,30 @@ +package datadog.trace.instrumentation.springweb6; + +import static java.util.Arrays.asList; + +import com.google.auto.service.AutoService; +import datadog.trace.agent.tooling.InstrumenterModule; +import datadog.trace.instrumentation.codeorigin.CodeOriginInstrumentation; +import java.util.HashSet; +import java.util.Set; + +@AutoService(InstrumenterModule.class) +public class SpringWebCodeOriginInstrumentation extends CodeOriginInstrumentation { + private static final String WEB_BIND_ANNOTATION = "org.springframework.web.bind.annotation."; + + public SpringWebCodeOriginInstrumentation() { + super("spring-web-code-origin"); + } + + @Override + protected Set getAnnotations() { + return new HashSet<>( + asList( + WEB_BIND_ANNOTATION + "DeleteMapping", + WEB_BIND_ANNOTATION + "GetMapping", + WEB_BIND_ANNOTATION + "PatchMapping", + WEB_BIND_ANNOTATION + "PostMapping", + WEB_BIND_ANNOTATION + "PutMapping", + WEB_BIND_ANNOTATION + "RequestMapping")); + } +} diff --git a/dd-java-agent/testing/src/main/groovy/datadog/trace/agent/test/AgentTestRunner.groovy b/dd-java-agent/testing/src/main/groovy/datadog/trace/agent/test/AgentTestRunner.groovy index 23cb2025f44..a7b2a2116f1 100644 --- a/dd-java-agent/testing/src/main/groovy/datadog/trace/agent/test/AgentTestRunner.groovy +++ b/dd-java-agent/testing/src/main/groovy/datadog/trace/agent/test/AgentTestRunner.groovy @@ -30,6 +30,7 @@ import datadog.trace.api.IdGenerationStrategy import datadog.trace.api.StatsDClient import datadog.trace.api.TraceConfig import datadog.trace.api.WellKnownTags +import datadog.trace.api.config.DebuggerConfig import datadog.trace.api.config.GeneralConfig import datadog.trace.api.config.TracerConfig import datadog.trace.api.gateway.RequestContext @@ -84,6 +85,7 @@ import static datadog.communication.http.OkHttpUtils.buildHttpClient import static datadog.trace.api.ConfigDefaults.DEFAULT_AGENT_HOST import static datadog.trace.api.ConfigDefaults.DEFAULT_AGENT_TIMEOUT import static datadog.trace.api.ConfigDefaults.DEFAULT_TRACE_AGENT_PORT +import static datadog.trace.api.config.DebuggerConfig.* import static datadog.trace.api.config.DebuggerConfig.DYNAMIC_INSTRUMENTATION_ENABLED import static datadog.trace.api.config.DebuggerConfig.DYNAMIC_INSTRUMENTATION_VERIFY_BYTECODE import static datadog.trace.api.config.TraceInstrumentationConfig.CODE_ORIGIN_FOR_SPANS_ENABLED @@ -307,7 +309,6 @@ abstract class AgentTestRunner extends DDSpecification implements AgentBuilder.L def codeOriginSetup() { injectSysConfig(CODE_ORIGIN_FOR_SPANS_ENABLED, "true", true) - injectSysConfig(DYNAMIC_INSTRUMENTATION_ENABLED, "false", true) injectSysConfig(DYNAMIC_INSTRUMENTATION_VERIFY_BYTECODE, "false", true) def configuration = Configuration.builder()