Skip to content

Commit c2cb1c4

Browse files
committed
refactor according to the review
1 parent 4b43be2 commit c2cb1c4

File tree

7 files changed

+58
-51
lines changed

7 files changed

+58
-51
lines changed

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

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

33
import static datadog.trace.agent.tooling.bytebuddy.matcher.NameMatchers.named;
4-
import static datadog.trace.instrumentation.jbossmodules.ModuleNameHelper.NAME_EXTRACTOR;
4+
import static datadog.trace.instrumentation.jbossmodules.ModuleNameHelper.extractDeploymentName;
55
import static net.bytebuddy.matcher.ElementMatchers.isConstructor;
66
import static net.bytebuddy.matcher.ElementMatchers.isMethod;
77
import static net.bytebuddy.matcher.ElementMatchers.takesArgument;
@@ -163,7 +163,10 @@ public static void onExit(
163163
public static class CaptureModuleNameAdvice {
164164
@Advice.OnMethodExit(suppress = Throwable.class)
165165
public static void afterConstruct(@Advice.This final Module module) {
166-
ClassloaderServiceNames.addIfMissing(module.getClassLoader(), NAME_EXTRACTOR);
166+
final String name = extractDeploymentName(module.getClassLoader());
167+
if (name != null && !name.isEmpty()) {
168+
ClassloaderServiceNames.addServiceName(module.getClassLoader(), name);
169+
}
167170
}
168171
}
169172
}
Lines changed: 11 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,23 @@
11
package datadog.trace.instrumentation.jbossmodules;
22

3-
import java.util.function.Function;
4-
import java.util.function.Supplier;
53
import java.util.regex.Matcher;
64
import java.util.regex.Pattern;
5+
import javax.annotation.Nonnull;
76
import org.jboss.modules.ModuleClassLoader;
87

98
public class ModuleNameHelper {
109
private ModuleNameHelper() {}
1110

1211
private static final Pattern SUBDEPLOYMENT_MATCH =
1312
Pattern.compile("deployment(?>.+\\.ear)?\\.(.+)\\.[j|w]ar");
14-
public static final Function<ClassLoader, Supplier<String>> NAME_EXTRACTOR =
15-
classLoader -> {
16-
final Matcher matcher =
17-
SUBDEPLOYMENT_MATCH.matcher(
18-
((ModuleClassLoader) classLoader).getModule().getIdentifier().getName());
19-
if (matcher.matches()) {
20-
final String result = matcher.group(1);
21-
return () -> result;
22-
}
23-
return () -> null;
24-
};
13+
14+
public static String extractDeploymentName(@Nonnull final ClassLoader classLoader) {
15+
final Matcher matcher =
16+
SUBDEPLOYMENT_MATCH.matcher(
17+
((ModuleClassLoader) classLoader).getModule().getIdentifier().getName());
18+
if (matcher.matches()) {
19+
return matcher.group(1);
20+
}
21+
return null;
22+
};
2523
}
Lines changed: 14 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,22 @@
11
package datadog.trace.instrumentation.liberty20;
22

33
import com.ibm.ws.classloading.internal.ThreadContextClassLoader;
4-
import java.util.function.Function;
5-
import java.util.function.Supplier;
64

75
public class BundleNameHelper {
86
private BundleNameHelper() {}
97

10-
public static final Function<ClassLoader, Supplier<String>> EXTRACTOR =
11-
classLoader -> {
12-
final String id = ((ThreadContextClassLoader) classLoader).getKey();
13-
// id is something like <type>:name#somethingelse
14-
final int head = id.indexOf(':');
15-
if (head < 0) {
16-
return () -> null;
17-
}
18-
final int tail = id.lastIndexOf('#');
19-
if (tail < 0) {
20-
return () -> null;
21-
}
22-
final String name = id.substring(head + 1, tail);
23-
return () -> name;
24-
};
8+
public static String extractDeploymentName(final ThreadContextClassLoader classLoader) {
9+
final String id = classLoader.getKey();
10+
// id is something like <type>:name#somethingelse
11+
final int head = id.indexOf(':');
12+
if (head < 0) {
13+
return null;
14+
}
15+
final int tail = id.lastIndexOf('#', head);
16+
if (tail < 0) {
17+
return null;
18+
}
19+
final String name = id.substring(head + 1, tail);
20+
return null;
21+
}
2522
}

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

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

3+
import static datadog.trace.instrumentation.liberty20.BundleNameHelper.extractDeploymentName;
34
import static net.bytebuddy.matcher.ElementMatchers.isConstructor;
45

56
import com.google.auto.service.AutoService;
@@ -38,7 +39,10 @@ public void methodAdvice(MethodTransformer transformer) {
3839
public static class ThreadContextClassloaderAdvice {
3940
@Advice.OnMethodExit(suppress = Throwable.class)
4041
public static void afterConstruct(@Advice.This ThreadContextClassLoader self) {
41-
ClassloaderServiceNames.addIfMissing(self, BundleNameHelper.EXTRACTOR);
42+
final String name = extractDeploymentName(self);
43+
if (name != null && !name.isEmpty()) {
44+
ClassloaderServiceNames.addServiceName(self, name);
45+
}
4246
}
4347
}
4448
}

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

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import static datadog.trace.agent.tooling.bytebuddy.matcher.HierarchyMatchers.hasSuperType;
44
import static datadog.trace.agent.tooling.bytebuddy.matcher.NameMatchers.named;
5+
import static datadog.trace.bootstrap.instrumentation.decorator.HttpServerDecorator.DD_SPAN_ATTRIBUTE;
56
import static net.bytebuddy.matcher.ElementMatchers.isMethod;
67
import static net.bytebuddy.matcher.ElementMatchers.isPublic;
78
import static net.bytebuddy.matcher.ElementMatchers.takesArgument;
@@ -56,9 +57,7 @@ public static AgentSpan before(@Advice.Argument(0) final ServletRequest request)
5657
if (!(request instanceof HttpServletRequest)) {
5758
return null;
5859
}
59-
Object span =
60-
request.getAttribute(
61-
"datadog.span"); // hardcode to avoid injecting HttpServiceDecorator just for this
60+
Object span = request.getAttribute(DD_SPAN_ATTRIBUTE);
6261
if (span instanceof AgentSpan
6362
&& CallDepthThreadLocalMap.incrementCallDepth(HttpServletRequest.class) == 0) {
6463
final AgentSpan agentSpan = (AgentSpan) span;

dd-java-agent/instrumentation/tomcat-classloading-9/src/main/java/datadog/trace/instrumentation/tomcat9/WebappClassLoaderInstrumentation.java

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,15 @@
11
package datadog.trace.instrumentation.tomcat9;
22

3-
import static net.bytebuddy.matcher.ElementMatchers.isConstructor;
3+
import static datadog.trace.agent.tooling.bytebuddy.matcher.NameMatchers.named;
4+
import static net.bytebuddy.matcher.ElementMatchers.isMethod;
45

56
import com.google.auto.service.AutoService;
67
import datadog.trace.agent.tooling.Instrumenter;
78
import datadog.trace.agent.tooling.InstrumenterModule;
89
import datadog.trace.api.naming.ClassloaderServiceNames;
910
import net.bytebuddy.asm.Advice;
11+
import org.apache.catalina.Context;
12+
import org.apache.catalina.WebResourceRoot;
1013
import org.apache.catalina.loader.WebappClassLoaderBase;
1114

1215
@AutoService(InstrumenterModule.class)
@@ -30,13 +33,23 @@ public String[] helperClassNames() {
3033

3134
@Override
3235
public void methodAdvice(MethodTransformer transformer) {
33-
transformer.applyAdvice(isConstructor(), getClass().getName() + "$CaptureWebappNameAdvice");
36+
transformer.applyAdvice(
37+
isMethod().and(named("setResources")), getClass().getName() + "$CaptureWebappNameAdvice");
3438
}
3539

3640
public static class CaptureWebappNameAdvice {
3741
@Advice.OnMethodExit(suppress = Throwable.class)
38-
public static void afterConstruct(@Advice.This final WebappClassLoaderBase classLoader) {
39-
ClassloaderServiceNames.addIfMissing(classLoader, ContextNameHelper.ADDER);
42+
public static void onContextAvailable(
43+
@Advice.This final WebappClassLoaderBase classLoader,
44+
@Advice.Argument(0) final WebResourceRoot webResourceRoot) {
45+
// at this moment we have the context set in this classloader, hence its name
46+
final Context context = webResourceRoot.getContext();
47+
if (context != null) {
48+
final String contextName = context.getBaseName();
49+
if (contextName != null && !contextName.isEmpty()) {
50+
ClassloaderServiceNames.addServiceName(classLoader, contextName);
51+
}
52+
}
4053
}
4154
}
4255
}

internal-api/src/main/java/datadog/trace/api/naming/ClassloaderServiceNames.java

Lines changed: 4 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,6 @@
66
import datadog.trace.api.remoteconfig.ServiceNameCollector;
77
import datadog.trace.bootstrap.instrumentation.api.AgentSpan;
88
import java.util.WeakHashMap;
9-
import java.util.function.Function;
10-
import java.util.function.Supplier;
119
import javax.annotation.Nonnull;
1210
import javax.annotation.Nullable;
1311

@@ -16,29 +14,24 @@ private static class Lazy {
1614
private static final ClassloaderServiceNames INSTANCE = new ClassloaderServiceNames();
1715
}
1816

19-
private final WeakHashMap<ClassLoader, Supplier<String>> weakCache = new WeakHashMap<>();
17+
private final WeakHashMap<ClassLoader, String> weakCache = new WeakHashMap<>();
2018
private final String inferredServiceName =
2119
CapturedEnvironment.get().getProperties().get(GeneralConfig.SERVICE_NAME);
2220
private final boolean enabled =
2321
Config.get().isJeeSplitByDeployment() && !Config.get().isServiceNameSetByUser();
2422

2523
private ClassloaderServiceNames() {}
2624

27-
public static void addIfMissing(
28-
@Nonnull ClassLoader classLoader,
29-
@Nonnull Function<? super ClassLoader, Supplier<String>> adder) {
25+
public static void addServiceName(@Nonnull ClassLoader classLoader, @Nonnull String serviceName) {
3026
if (Lazy.INSTANCE.enabled) {
31-
Lazy.INSTANCE.weakCache.computeIfAbsent(classLoader, adder);
27+
Lazy.INSTANCE.weakCache.put(classLoader, serviceName);
3228
}
3329
}
3430

3531
@Nullable
3632
public static String maybeGet(@Nonnull ClassLoader classLoader) {
3733
if (Lazy.INSTANCE.enabled) {
38-
final Supplier<String> supplier = Lazy.INSTANCE.weakCache.get(classLoader);
39-
if (supplier != null) {
40-
return supplier.get();
41-
}
34+
return Lazy.INSTANCE.weakCache.get(classLoader);
4235
}
4336
return null;
4437
}

0 commit comments

Comments
 (0)