Skip to content

Commit 1240647

Browse files
author
Brian Devins-Suresh
committed
Allow manual specification of resource names based on request path
1 parent 80e91c8 commit 1240647

File tree

21 files changed

+864
-73
lines changed

21 files changed

+864
-73
lines changed

Diff for: LICENSE-3rdparty.csv

+1
Original file line numberDiff line numberDiff line change
@@ -23,3 +23,4 @@ import
2323
import ,org.owasp.encoder ,BSD 3-Clause,Copyright (c) 2012 Jeff Ichnowski
2424
https://github.com/DataDog/dd-trace-java/blob/master/internal-api/src/main/java/datadog/trace/bootstrap/instrumentation/ci/git/RawParseUtils.java ,JGit ,EDL-1.0 ,
2525
https://github.com/DataDog/dd-trace-java/blob/master/internal-api/src/main/java/datadog/trace/bootstrap/instrumentation/ci/git/LocalFSGitInfoExtractor.java,JGit ,EDL-1.0 ,
26+
https://github.com/DataDog/dd-trace-java/blob/master/internal-api/src/main/java/datadog/trace/api/http/AntPathMatcher.java ,https://github.com/apache/shiro ,Apache-2.0 ,Copyright 2008-2020 The Apache Software Foundation

Diff for: dd-java-agent/agent-bootstrap/src/main/java/datadog/trace/bootstrap/instrumentation/decorator/HttpClientDecorator.java

+3-2
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,13 @@
22

33
import static datadog.trace.api.Functions.PATH_BASED_RESOURCE_NAME;
44
import static datadog.trace.api.cache.RadixTreeCache.UNSET_STATUS;
5+
import static datadog.trace.api.http.UrlBasedResourceNameCalculator.SIMPLE_PATH_NORMALIZER;
56

67
import datadog.trace.api.Config;
78
import datadog.trace.api.DDTags;
89
import datadog.trace.api.Pair;
910
import datadog.trace.api.cache.DDCache;
1011
import datadog.trace.api.cache.DDCaches;
11-
import datadog.trace.api.normalize.PathNormalizer;
1212
import datadog.trace.bootstrap.instrumentation.api.AgentSpan;
1313
import datadog.trace.bootstrap.instrumentation.api.InternalSpanTypes;
1414
import datadog.trace.bootstrap.instrumentation.api.Tags;
@@ -81,7 +81,8 @@ public AgentSpan onRequest(final AgentSpan span, final REQUEST request) {
8181
if (shouldSetResourceName() && !span.hasResourceName()) {
8282
span.setResourceName(
8383
RESOURCE_NAMES.computeIfAbsent(
84-
Pair.of(method, PathNormalizer.normalize(path)), PATH_BASED_RESOURCE_NAME));
84+
Pair.of(method, SIMPLE_PATH_NORMALIZER.normalize(path)),
85+
PATH_BASED_RESOURCE_NAME));
8586
}
8687
} else if (shouldSetResourceName() && !span.hasResourceName()) {
8788
span.setResourceName(DEFAULT_RESOURCE_NAME);

Diff for: dd-java-agent/agent-bootstrap/src/main/java/datadog/trace/bootstrap/instrumentation/decorator/HttpServerDecorator.java

+2-10
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,11 @@
11
package datadog.trace.bootstrap.instrumentation.decorator;
22

3-
import static datadog.trace.api.Functions.PATH_BASED_RESOURCE_NAME;
43
import static datadog.trace.api.cache.RadixTreeCache.UNSET_STATUS;
5-
import static datadog.trace.api.normalize.PathNormalizer.normalize;
4+
import static datadog.trace.api.http.UrlBasedResourceNameCalculator.RESOURCE_NAME_CALCULATOR;
65
import static datadog.trace.bootstrap.instrumentation.decorator.RouteHandlerDecorator.ROUTE_HANDLER_DECORATOR;
76

87
import datadog.trace.api.Config;
98
import datadog.trace.api.DDTags;
10-
import datadog.trace.api.Pair;
11-
import datadog.trace.api.cache.DDCache;
12-
import datadog.trace.api.cache.DDCaches;
139
import datadog.trace.bootstrap.instrumentation.api.AgentSpan;
1410
import datadog.trace.bootstrap.instrumentation.api.InternalSpanTypes;
1511
import datadog.trace.bootstrap.instrumentation.api.Tags;
@@ -36,8 +32,6 @@ public abstract class HttpServerDecorator<REQUEST, CONNECTION, RESPONSE> extends
3632
&& Config.get().isRuleEnabled("Status404Decorator");
3733
private static final boolean SHOULD_SET_URL_RESOURCE_NAME =
3834
Config.get().isRuleEnabled("URLAsResourceNameRule");
39-
private static final DDCache<Pair<String, String>, UTF8BytesString> RESOURCE_NAMES =
40-
DDCaches.newFixedSizeCache(512);
4135

4236
private static final BitSet SERVER_ERROR_STATUSES = Config.get().getHttpServerErrorStatuses();
4337

@@ -113,9 +107,7 @@ public AgentSpan onRequest(
113107
}
114108
// TODO is this ever false?
115109
if (SHOULD_SET_URL_RESOURCE_NAME && !span.hasResourceName()) {
116-
span.setResourceName(
117-
RESOURCE_NAMES.computeIfAbsent(
118-
Pair.of(method, normalize(path, encoded)), PATH_BASED_RESOURCE_NAME));
110+
span.setResourceName(RESOURCE_NAME_CALCULATOR.calculate(method, path, encoded));
119111
}
120112
} else if (SHOULD_SET_URL_RESOURCE_NAME && !span.hasResourceName()) {
121113
span.setResourceName(DEFAULT_RESOURCE_NAME);

Diff for: dd-java-agent/instrumentation/elasticsearch/src/main/java/datadog/trace/instrumentation/elasticsearch/ElasticsearchRestClientDecorator.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
package datadog.trace.instrumentation.elasticsearch;
22

33
import static datadog.trace.api.Functions.PATH_BASED_RESOURCE_NAME;
4+
import static datadog.trace.api.http.UrlBasedResourceNameCalculator.SIMPLE_PATH_NORMALIZER;
45
import static datadog.trace.bootstrap.instrumentation.api.Tags.DB_TYPE;
56

67
import datadog.trace.api.Pair;
78
import datadog.trace.api.cache.DDCache;
89
import datadog.trace.api.cache.DDCaches;
9-
import datadog.trace.api.normalize.PathNormalizer;
1010
import datadog.trace.bootstrap.instrumentation.api.AgentSpan;
1111
import datadog.trace.bootstrap.instrumentation.api.InternalSpanTypes;
1212
import datadog.trace.bootstrap.instrumentation.api.Tags;
@@ -79,7 +79,7 @@ public AgentSpan onRequest(final AgentSpan span, final String method, final Stri
7979
span.setTag(Tags.HTTP_URL, endpoint);
8080
span.setResourceName(
8181
RESOURCE_NAMES.computeIfAbsent(
82-
Pair.of(method, PathNormalizer.normalize(endpoint)), PATH_BASED_RESOURCE_NAME));
82+
Pair.of(method, SIMPLE_PATH_NORMALIZER.normalize(endpoint)), PATH_BASED_RESOURCE_NAME));
8383
return span;
8484
}
8585

Diff for: dd-java-agent/instrumentation/http-url-connection/src/main/java/datadog/trace/instrumentation/http_url_connection/UrlInstrumentation.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import static datadog.trace.agent.tooling.bytebuddy.matcher.NameMatchers.named;
44
import static datadog.trace.api.cache.RadixTreeCache.PORTS;
55
import static datadog.trace.api.cache.RadixTreeCache.UNSET_PORT;
6+
import static datadog.trace.api.http.UrlBasedResourceNameCalculator.SIMPLE_PATH_NORMALIZER;
67
import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan;
78
import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.startSpan;
89
import static net.bytebuddy.matcher.ElementMatchers.isMethod;
@@ -11,7 +12,6 @@
1112
import com.google.auto.service.AutoService;
1213
import datadog.trace.agent.tooling.Instrumenter;
1314
import datadog.trace.api.Config;
14-
import datadog.trace.api.normalize.PathNormalizer;
1515
import datadog.trace.bootstrap.InternalJarURLHandler;
1616
import datadog.trace.bootstrap.instrumentation.api.AgentScope;
1717
import datadog.trace.bootstrap.instrumentation.api.AgentSpan;
@@ -79,7 +79,7 @@ public static void errorSpan(
7979
span.setServiceName(host);
8080
}
8181
if (!span.hasResourceName()) {
82-
span.setResourceName(PathNormalizer.normalize(url.getPath()));
82+
span.setResourceName(SIMPLE_PATH_NORMALIZER.normalize(url.getPath()));
8383
}
8484

8585
span.setError(true);

Diff for: dd-java-agent/testing/src/main/groovy/datadog/trace/agent/test/base/HttpServerTest.groovy

+2-2
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@ import datadog.trace.api.DDSpanTypes
77
import datadog.trace.api.DDTags
88
import datadog.trace.api.config.GeneralConfig
99
import datadog.trace.api.env.CapturedEnvironment
10-
import datadog.trace.api.normalize.PathNormalizer
1110
import datadog.trace.bootstrap.instrumentation.api.Tags
1211
import datadog.trace.bootstrap.instrumentation.api.URIUtils
1312
import okhttp3.HttpUrl
@@ -38,6 +37,7 @@ import static datadog.trace.api.config.TraceInstrumentationConfig.HTTP_SERVER_RA
3837
import static datadog.trace.api.config.TraceInstrumentationConfig.HTTP_SERVER_RAW_RESOURCE
3938
import static datadog.trace.api.config.TraceInstrumentationConfig.HTTP_SERVER_TAG_QUERY_STRING
4039
import static datadog.trace.api.config.TraceInstrumentationConfig.SERVLET_ASYNC_TIMEOUT_ERROR
40+
import static datadog.trace.api.http.UrlBasedResourceNameCalculator.SIMPLE_PATH_NORMALIZER
4141
import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activeScope
4242
import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activeSpan
4343
import static org.junit.Assume.assumeTrue
@@ -69,7 +69,7 @@ abstract class HttpServerTest<SERVER> extends WithHttpServer<SERVER> {
6969
}
7070
def encoded = !hasDecodedResource()
7171
def path = encoded ? endpoint.resolve(address).rawPath : endpoint.resolve(address).path
72-
return "$method ${PathNormalizer.normalize(path, encoded)}"
72+
return "$method ${SIMPLE_PATH_NORMALIZER.normalize(path, encoded)}"
7373
}
7474

7575
String expectedUrl(ServerEndpoint endpoint, URI address) {

Diff for: dd-trace-api/src/main/java/datadog/trace/api/config/TracerConfig.java

+2
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,8 @@ public final class TracerConfig {
3535
public static final String TRACE_RATE_LIMIT = "trace.rate.limit";
3636
public static final String TRACE_REPORT_HOSTNAME = "trace.report-hostname";
3737
public static final String HEADER_TAGS = "trace.header.tags";
38+
public static final String TRACE_HTTP_SERVER_PATH_RESOURCE_NAME_MAPPING =
39+
"trace.http.server.path-resource-name-mapping";
3840
public static final String HTTP_SERVER_ERROR_STATUSES = "http.server.error.statuses";
3941
public static final String HTTP_CLIENT_ERROR_STATUSES = "http.client.error.statuses";
4042

Diff for: internal-api/src/main/java/datadog/trace/api/Config.java

+11
Original file line numberDiff line numberDiff line change
@@ -177,6 +177,7 @@
177177
import static datadog.trace.api.config.TracerConfig.TRACE_AGENT_PORT;
178178
import static datadog.trace.api.config.TracerConfig.TRACE_AGENT_URL;
179179
import static datadog.trace.api.config.TracerConfig.TRACE_ANALYTICS_ENABLED;
180+
import static datadog.trace.api.config.TracerConfig.TRACE_HTTP_SERVER_PATH_RESOURCE_NAME_MAPPING;
180181
import static datadog.trace.api.config.TracerConfig.TRACE_RATE_LIMIT;
181182
import static datadog.trace.api.config.TracerConfig.TRACE_REPORT_HOSTNAME;
182183
import static datadog.trace.api.config.TracerConfig.TRACE_RESOLVER_ENABLED;
@@ -284,6 +285,7 @@ public class Config {
284285
private final boolean httpServerRawQueryString;
285286
private final boolean httpServerRawResource;
286287
private final boolean httpServerRouteBasedNaming;
288+
private final Map<String, String> httpServerPathResourceNameMapping;
287289
private final boolean httpClientTagQueryString;
288290
private final boolean httpClientSplitByDomain;
289291
private final boolean dbClientSplitByInstance;
@@ -542,6 +544,9 @@ private Config(final String runtimeId, final ConfigProvider configProvider) {
542544
excludedClasses = tryMakeImmutableList(configProvider.getList(TRACE_CLASSES_EXCLUDE));
543545
headerTags = configProvider.getMergedMap(HEADER_TAGS);
544546

547+
httpServerPathResourceNameMapping =
548+
configProvider.getOrderedMap(TRACE_HTTP_SERVER_PATH_RESOURCE_NAME_MAPPING);
549+
545550
httpServerErrorStatuses =
546551
configProvider.getIntegerRange(
547552
HTTP_SERVER_ERROR_STATUSES, DEFAULT_HTTP_SERVER_ERROR_STATUSES);
@@ -891,6 +896,10 @@ public Map<String, String> getHeaderTags() {
891896
return headerTags;
892897
}
893898

899+
public Map<String, String> getHttpServerPathResourceNameMapping() {
900+
return httpServerPathResourceNameMapping;
901+
}
902+
894903
public BitSet getHttpServerErrorStatuses() {
895904
return httpServerErrorStatuses;
896905
}
@@ -1762,6 +1771,8 @@ public String toString() {
17621771
+ httpServerRawResource
17631772
+ ", httpServerRouteBasedNaming="
17641773
+ httpServerRouteBasedNaming
1774+
+ ", httpServerPathResourceNameMapping="
1775+
+ httpServerPathResourceNameMapping
17651776
+ ", httpClientTagQueryString="
17661777
+ httpClientTagQueryString
17671778
+ ", httpClientSplitByDomain="

0 commit comments

Comments
 (0)