Skip to content

Commit 5f0a539

Browse files
authored
Add process tags to agent statsd client (#9904)
* Add process tags to agent statsd client * close stuff in test
1 parent e1b081e commit 5f0a539

File tree

2 files changed

+63
-6
lines changed

2 files changed

+63
-6
lines changed

communication/src/main/java/datadog/communication/monitor/DDAgentStatsDClientManager.java

Lines changed: 26 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,12 @@
33
import static datadog.trace.bootstrap.instrumentation.api.WriterConstants.LOGGING_WRITER_TYPE;
44

55
import datadog.trace.api.Config;
6+
import datadog.trace.api.ProcessTags;
67
import datadog.trace.api.StatsDClient;
78
import datadog.trace.api.StatsDClientManager;
89
import datadog.trace.api.cache.DDCache;
910
import datadog.trace.api.cache.DDCaches;
11+
import java.util.List;
1012
import java.util.concurrent.ConcurrentHashMap;
1113
import java.util.concurrent.atomic.AtomicInteger;
1214
import java.util.function.Function;
@@ -52,8 +54,30 @@ public StatsDClient statsDClient(
5254
nameMapping = new NameResolver(namespace);
5355
}
5456

55-
if (null != constantTags && constantTags.length > 0) {
56-
tagMapping = new TagCombiner(constantTags);
57+
final List<String> processTags = ProcessTags.getTagsAsStringList();
58+
final int processTagSize = processTags != null ? processTags.size() : 0;
59+
String[] finalConstantTags = constantTags;
60+
if (processTagSize > 0) {
61+
final int constantTagSize = constantTags != null ? constantTags.length : 0;
62+
if (constantTagSize == 0) {
63+
finalConstantTags = processTags.toArray(new String[0]);
64+
} else {
65+
final int tagSizeSum = processTagSize + constantTagSize;
66+
finalConstantTags = new String[tagSizeSum];
67+
int pos = 0;
68+
// copy constant tags
69+
for (; pos < constantTagSize; pos++) {
70+
finalConstantTags[pos] = constantTags[pos];
71+
}
72+
// copy process tags
73+
for (int i = 0; i < processTagSize; i++) {
74+
finalConstantTags[pos + i] = processTags.get(i);
75+
}
76+
}
77+
}
78+
79+
if (null != finalConstantTags && finalConstantTags.length > 0) {
80+
tagMapping = new TagCombiner(finalConstantTags);
5781
}
5882

5983
if (USE_LOGGING_CLIENT) {

communication/src/test/groovy/datadog/communication/monitor/DDAgentStatsDClientTest.groovy

Lines changed: 37 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package datadog.communication.monitor
22

3+
import static datadog.trace.api.config.GeneralConfig.EXPERIMENTAL_PROPAGATE_PROCESS_TAGS_ENABLED
34

5+
import datadog.trace.api.ProcessTags
46
import datadog.trace.test.util.DDSpecification
57

68
import static datadog.trace.api.config.GeneralConfig.DOGSTATSD_START_DELAY
@@ -109,13 +111,44 @@ class DDAgentStatsDClientTest extends DDSpecification {
109111
where:
110112
// spotless:off
111113
namespace | constantTags | expectedMetricName | expectedCheckName | expectedTags
112-
null | null | "test.metric" | "test.check" | "jmx_domain:java.nio,type:BufferPool"
113-
null | ["lang:java", "lang_version:1.8.0"] | "test.metric" | "test.check" | "jmx_domain:java.nio,type:BufferPool,lang:java,lang_version:1.8.0"
114-
"example" | null | "example.test.metric" | "example.test.check" | "jmx_domain:java.nio,type:BufferPool"
115-
"example" | ["lang:java", "lang_version:1.8.0"] | "example.test.metric" | "example.test.check" | "jmx_domain:java.nio,type:BufferPool,lang:java,lang_version:1.8.0"
114+
null | null | "test.metric" | "test.check" | "jmx_domain:java.nio,type:BufferPool,${ProcessTags.getTagsForSerialization().toString()}"
115+
null | ["lang:java", "lang_version:1.8.0"] | "test.metric" | "test.check" | "jmx_domain:java.nio,type:BufferPool,lang:java,lang_version:1.8.0,${ProcessTags.getTagsForSerialization().toString()}"
116+
"example" | null | "example.test.metric" | "example.test.check" | "jmx_domain:java.nio,type:BufferPool,${ProcessTags.getTagsForSerialization().toString()}"
117+
"example" | ["lang:java", "lang_version:1.8.0"] | "example.test.metric" | "example.test.check" | "jmx_domain:java.nio,type:BufferPool,lang:java,lang_version:1.8.0,${ProcessTags.getTagsForSerialization().toString()}"
116118
// spotless:on
117119
}
118120

121+
def "single statsd client without process tags"() {
122+
setup:
123+
injectSysConfig(DOGSTATSD_START_DELAY, '0')
124+
injectSysConfig(EXPERIMENTAL_PROPAGATE_PROCESS_TAGS_ENABLED, "false")
125+
def server = new StatsDServer()
126+
server.start()
127+
ProcessTags.reset()
128+
129+
def client = statsDClientManager().statsDClient('127.0.0.1', server.socket.localPort, null, namespace, constantTags as String[], false)
130+
131+
String metricName = "test.metric"
132+
String[] tags = ["test:true"]
133+
134+
when:
135+
client.incrementCounter(metricName, tags)
136+
137+
then:
138+
server.waitForMessage().startsWith("$expectedMetricName:1|c|#$expectedTags")
139+
140+
cleanup:
141+
injectSysConfig(EXPERIMENTAL_PROPAGATE_PROCESS_TAGS_ENABLED, "true")
142+
ProcessTags.reset()
143+
client.close()
144+
server.close()
145+
146+
where:
147+
namespace | constantTags | expectedMetricName | expectedTags
148+
null | null | "test.metric" | "test:true"
149+
null | ["lang:java", "lang_version:1.8.0"] | "test.metric" | "test:true,lang:java,lang_version:1.8.0"
150+
}
151+
119152
def "single statsd client with event"() {
120153
setup:
121154
injectSysConfig(DOGSTATSD_START_DELAY, '0')

0 commit comments

Comments
 (0)