Skip to content

Commit a3a8fe6

Browse files
amarzialiPerfectSlayermcculls
authored
Use env-entry to add tags per webapp deployment (#8138)
* Use env-entry to add tags per webapp deployment * fix gradle file * Migrate to hasmethodadvice * exclude classes from coverage * codenarc * add more repos * jacoco * Update internal-api/src/main/java/datadog/trace/api/ClassloaderConfigurationOverrides.java Co-authored-by: Bruce Bujon <[email protected]> * review * use our named * more coverage * Update internal-api/src/main/java/datadog/trace/api/ClassloaderConfigurationOverrides.java Co-authored-by: Stuart McCulloch <[email protected]> * Update internal-api/src/main/java/datadog/trace/api/ClassloaderConfigurationOverrides.java Co-authored-by: Stuart McCulloch <[email protected]> * review * add jmh * optimize * widen muzzle excludes * exclude lazy from branch coverage * clean * Do not set contextual service name if jee-split-by-deployment is not enabled --------- Co-authored-by: Bruce Bujon <[email protected]> Co-authored-by: Stuart McCulloch <[email protected]>
1 parent 22458b3 commit a3a8fe6

File tree

30 files changed

+954
-121
lines changed

30 files changed

+954
-121
lines changed

dd-java-agent/instrumentation/jboss-modules/src/main/java/datadog/trace/instrumentation/jbossmodules/ModuleInstrumentation.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
import com.google.auto.service.AutoService;
1010
import datadog.trace.agent.tooling.Instrumenter;
1111
import datadog.trace.agent.tooling.InstrumenterModule;
12-
import datadog.trace.api.naming.ClassloaderServiceNames;
12+
import datadog.trace.api.ClassloaderConfigurationOverrides;
1313
import datadog.trace.bootstrap.AgentClassLoading;
1414
import java.io.IOException;
1515
import java.io.InputStream;
@@ -164,7 +164,7 @@ public static class CaptureModuleNameAdvice {
164164
public static void afterConstruct(@Advice.This final Module module) {
165165
final String name = ModuleNameHelper.extractDeploymentName(module.getClassLoader());
166166
if (name != null && !name.isEmpty()) {
167-
ClassloaderServiceNames.addServiceName(module.getClassLoader(), name);
167+
ClassloaderConfigurationOverrides.withPinnedServiceName(module.getClassLoader(), name);
168168
}
169169
}
170170
}

dd-java-agent/instrumentation/liberty-20/src/main/java/datadog/trace/instrumentation/liberty20/LibertyServerInstrumentation.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,11 @@
1616
import com.ibm.wsspi.webcontainer.webapp.IWebAppDispatcherContext;
1717
import datadog.trace.agent.tooling.Instrumenter;
1818
import datadog.trace.agent.tooling.InstrumenterModule;
19+
import datadog.trace.api.ClassloaderConfigurationOverrides;
1920
import datadog.trace.api.Config;
2021
import datadog.trace.api.CorrelationIdentifier;
2122
import datadog.trace.api.GlobalTracer;
2223
import datadog.trace.api.gateway.Flow;
23-
import datadog.trace.api.naming.ClassloaderServiceNames;
2424
import datadog.trace.bootstrap.ActiveSubsystems;
2525
import datadog.trace.bootstrap.ContextStore;
2626
import datadog.trace.bootstrap.InstrumentationContext;
@@ -116,7 +116,7 @@ public static class HandleRequestAdvice {
116116
if (webapp != null) {
117117
final ClassLoader cl = webapp.getClassLoader();
118118
if (cl != null) {
119-
ClassloaderServiceNames.maybeSetToSpan(span, cl);
119+
ClassloaderConfigurationOverrides.maybeEnrichSpan(span, cl);
120120
}
121121
}
122122
}

dd-java-agent/instrumentation/liberty-20/src/main/java/datadog/trace/instrumentation/liberty20/ThreadContextClassloaderInstrumentation.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
import com.ibm.ws.classloading.internal.ThreadContextClassLoader;
77
import datadog.trace.agent.tooling.Instrumenter;
88
import datadog.trace.agent.tooling.InstrumenterModule;
9-
import datadog.trace.api.naming.ClassloaderServiceNames;
9+
import datadog.trace.api.ClassloaderConfigurationOverrides;
1010
import net.bytebuddy.asm.Advice;
1111

1212
@AutoService(InstrumenterModule.class)
@@ -40,7 +40,7 @@ public static class ThreadContextClassloaderAdvice {
4040
public static void afterConstruct(@Advice.This ThreadContextClassLoader self) {
4141
final String name = BundleNameHelper.extractDeploymentName(self);
4242
if (name != null && !name.isEmpty()) {
43-
ClassloaderServiceNames.addServiceName(self, name);
43+
ClassloaderConfigurationOverrides.withPinnedServiceName(self, name);
4444
}
4545
}
4646
}

dd-java-agent/instrumentation/liberty-23/src/main/java/datadog/trace/instrumentation/liberty23/LibertyServerInstrumentation.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,11 @@
1616
import com.ibm.wsspi.webcontainer.webapp.IWebAppDispatcherContext;
1717
import datadog.trace.agent.tooling.Instrumenter;
1818
import datadog.trace.agent.tooling.InstrumenterModule;
19+
import datadog.trace.api.ClassloaderConfigurationOverrides;
1920
import datadog.trace.api.Config;
2021
import datadog.trace.api.CorrelationIdentifier;
2122
import datadog.trace.api.GlobalTracer;
2223
import datadog.trace.api.gateway.Flow;
23-
import datadog.trace.api.naming.ClassloaderServiceNames;
2424
import datadog.trace.bootstrap.ActiveSubsystems;
2525
import datadog.trace.bootstrap.ContextStore;
2626
import datadog.trace.bootstrap.InstrumentationContext;
@@ -118,7 +118,7 @@ public static class HandleRequestAdvice {
118118
if (webapp != null) {
119119
final ClassLoader cl = webapp.getClassLoader();
120120
if (cl != null) {
121-
ClassloaderServiceNames.maybeSetToSpan(span, cl);
121+
ClassloaderConfigurationOverrides.maybeEnrichSpan(span, cl);
122122
}
123123
}
124124
}

dd-java-agent/instrumentation/servlet/request-2/src/main/java/datadog/trace/instrumentation/servlet2/Servlet2Advice.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,12 @@
44
import static datadog.trace.bootstrap.instrumentation.decorator.HttpServerDecorator.DD_SPAN_ATTRIBUTE;
55
import static datadog.trace.instrumentation.servlet2.Servlet2Decorator.DECORATE;
66

7+
import datadog.trace.api.ClassloaderConfigurationOverrides;
78
import datadog.trace.api.Config;
89
import datadog.trace.api.CorrelationIdentifier;
910
import datadog.trace.api.DDTags;
1011
import datadog.trace.api.GlobalTracer;
1112
import datadog.trace.api.gateway.Flow;
12-
import datadog.trace.api.naming.ClassloaderServiceNames;
1313
import datadog.trace.bootstrap.InstrumentationContext;
1414
import datadog.trace.bootstrap.instrumentation.api.AgentScope;
1515
import datadog.trace.bootstrap.instrumentation.api.AgentSpan;
@@ -42,7 +42,7 @@ public static boolean onEnter(
4242
final boolean hasServletTrace = spanAttr instanceof AgentSpan;
4343
if (hasServletTrace) {
4444
final AgentSpan span = (AgentSpan) spanAttr;
45-
ClassloaderServiceNames.maybeSetToSpan(span);
45+
ClassloaderConfigurationOverrides.maybeEnrichSpan(span);
4646
// Tracing might already be applied by the FilterChain or a parent request (forward/include).
4747
return false;
4848
}

dd-java-agent/instrumentation/servlet/request-3/src/main/java/datadog/trace/instrumentation/servlet3/Servlet3Advice.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,12 @@
77
import static datadog.trace.bootstrap.instrumentation.decorator.HttpServerDecorator.DD_SPAN_ATTRIBUTE;
88
import static datadog.trace.instrumentation.servlet3.Servlet3Decorator.DECORATE;
99

10+
import datadog.trace.api.ClassloaderConfigurationOverrides;
1011
import datadog.trace.api.Config;
1112
import datadog.trace.api.CorrelationIdentifier;
1213
import datadog.trace.api.DDTags;
1314
import datadog.trace.api.GlobalTracer;
1415
import datadog.trace.api.gateway.Flow;
15-
import datadog.trace.api.naming.ClassloaderServiceNames;
1616
import datadog.trace.bootstrap.instrumentation.api.AgentScope;
1717
import datadog.trace.bootstrap.instrumentation.api.AgentSpan;
1818
import datadog.trace.bootstrap.instrumentation.api.AgentSpanContext;
@@ -63,7 +63,7 @@ public static boolean onEnter(
6363
final boolean hasServletTrace = spanAttrValue instanceof AgentSpan;
6464
if (hasServletTrace) {
6565
final AgentSpan span = (AgentSpan) spanAttrValue;
66-
ClassloaderServiceNames.maybeSetToSpan(span);
66+
ClassloaderConfigurationOverrides.maybeEnrichSpan(span);
6767
// Tracing might already be applied by other instrumentation,
6868
// the FilterChain or a parent request (forward/include).
6969
return false;

dd-java-agent/instrumentation/servlet/request-3/src/main/java/datadog/trace/instrumentation/servlet3/Servlet3Decorator.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package datadog.trace.instrumentation.servlet3;
22

3-
import datadog.trace.api.naming.ClassloaderServiceNames;
3+
import datadog.trace.api.ClassloaderConfigurationOverrides;
44
import datadog.trace.bootstrap.instrumentation.api.AgentPropagation;
55
import datadog.trace.bootstrap.instrumentation.api.AgentSpan;
66
import datadog.trace.bootstrap.instrumentation.api.AgentSpanContext;
@@ -84,7 +84,7 @@ public AgentSpan onRequest(
8484
final HttpServletRequest request,
8585
AgentSpanContext.Extracted context) {
8686
assert span != null;
87-
ClassloaderServiceNames.maybeSetToSpan(span);
87+
ClassloaderConfigurationOverrides.maybeEnrichSpan(span);
8888
if (request != null) {
8989
String contextPath = request.getContextPath();
9090
String servletPath = request.getServletPath();

dd-java-agent/instrumentation/servlet/request-5/src/main/java/datadog/trace/instrumentation/servlet5/JakartaServletInstrumentation.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,9 @@
1111
import com.google.auto.service.AutoService;
1212
import datadog.trace.agent.tooling.Instrumenter;
1313
import datadog.trace.agent.tooling.InstrumenterModule;
14+
import datadog.trace.api.ClassloaderConfigurationOverrides;
1415
import datadog.trace.api.Config;
1516
import datadog.trace.api.DDTags;
16-
import datadog.trace.api.naming.ClassloaderServiceNames;
1717
import datadog.trace.bootstrap.CallDepthThreadLocalMap;
1818
import datadog.trace.bootstrap.instrumentation.api.AgentSpan;
1919
import jakarta.servlet.ServletRequest;
@@ -61,7 +61,7 @@ public static AgentSpan before(@Advice.Argument(0) final ServletRequest request)
6161
if (span instanceof AgentSpan
6262
&& CallDepthThreadLocalMap.incrementCallDepth(HttpServletRequest.class) == 0) {
6363
final AgentSpan agentSpan = (AgentSpan) span;
64-
ClassloaderServiceNames.maybeSetToSpan(agentSpan);
64+
ClassloaderConfigurationOverrides.maybeEnrichSpan(agentSpan);
6565
return agentSpan;
6666
}
6767
return null;

dd-java-agent/instrumentation/tomcat-5.5/src/latestDepTest/groovy/TomcatServer.groovy

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,6 @@ class TomcatServer implements HttpServer {
3838
return false
3939
}
4040
}
41-
4241
setupServlets(servletContext)
4342

4443
(server.host as StandardHost).errorReportValveClass = TomcatServletTest.ErrorHandlerValve.name

dd-java-agent/instrumentation/tomcat-5.5/src/latestDepTest/groovy/TomcatServletTest.groovy

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import org.apache.catalina.connector.Request
99
import org.apache.catalina.connector.Response
1010
import org.apache.catalina.startup.Tomcat
1111
import org.apache.catalina.valves.ErrorReportValve
12+
import org.apache.tomcat.util.descriptor.web.ContextEnvironment
1213
import org.apache.tomcat.util.descriptor.web.FilterDef
1314
import org.apache.tomcat.util.descriptor.web.FilterMap
1415

@@ -213,4 +214,32 @@ class TomcatServletClassloaderNamingForkedTest extends TomcatServletTest {
213214
}
214215
}
215216

217+
class TomcatServletEnvEntriesTagTest extends TomcatServletTest {
218+
def addEntry (context, name, value) {
219+
def envEntry = new ContextEnvironment()
220+
envEntry.setName(name)
221+
envEntry.setValue(value)
222+
envEntry.setType("java.lang.String")
223+
context.getNamingResources().addEnvironment(envEntry)
224+
}
225+
@Override
226+
protected void setupServlets(Context context) {
227+
super.setupServlets(context)
228+
addEntry(context, "datadog/tags/custom-tag", "custom-value")
229+
addEntry(context, "java:comp/env/datadog/tags/service", "custom-service")
230+
}
231+
232+
@Override
233+
String expectedServiceName() {
234+
"custom-service"
235+
}
236+
237+
@Override
238+
Map<String, Serializable> expectedExtraServerTags(ServerEndpoint endpoint) {
239+
super.expectedExtraServerTags(endpoint) + ["custom-tag": "custom-value"] as Map<String, Serializable>
240+
}
241+
}
242+
243+
244+
216245

0 commit comments

Comments
 (0)