Skip to content

Commit 7984628

Browse files
authored
Add process tags to client stats payload (#8704)
1 parent f9f99f5 commit 7984628

File tree

2 files changed

+26
-3
lines changed

2 files changed

+26
-3
lines changed

dd-trace-core/src/main/java/datadog/trace/common/metrics/SerializingMetricWriter.java

+12-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,9 @@
55
import datadog.communication.serialization.GrowableBuffer;
66
import datadog.communication.serialization.WritableFormatter;
77
import datadog.communication.serialization.msgpack.MsgPackWriter;
8+
import datadog.trace.api.ProcessTags;
89
import datadog.trace.api.WellKnownTags;
10+
import datadog.trace.bootstrap.instrumentation.api.UTF8BytesString;
911

1012
public final class SerializingMetricWriter implements MetricWriter {
1113

@@ -28,6 +30,7 @@ public final class SerializingMetricWriter implements MetricWriter {
2830
private static final byte[] STATS = "Stats".getBytes(ISO_8859_1);
2931
private static final byte[] OK_SUMMARY = "OkSummary".getBytes(ISO_8859_1);
3032
private static final byte[] ERROR_SUMMARY = "ErrorSummary".getBytes(ISO_8859_1);
33+
private static final byte[] PROCESS_TAGS = "ProcessTags".getBytes(ISO_8859_1);
3134

3235
private final WellKnownTags wellKnownTags;
3336
private final WritableFormatter writer;
@@ -48,7 +51,9 @@ public SerializingMetricWriter(WellKnownTags wellKnownTags, Sink sink, int initi
4851

4952
@Override
5053
public void startBucket(int metricCount, long start, long duration) {
51-
writer.startMap(6);
54+
final UTF8BytesString processTags = ProcessTags.getTagsForSerialization();
55+
final boolean writeProcessTags = processTags != null;
56+
writer.startMap(6 + (writeProcessTags ? 1 : 0));
5257

5358
writer.writeUTF8(RUNTIME_ID);
5459
writer.writeUTF8(wellKnownTags.getRuntimeId());
@@ -65,7 +70,13 @@ public void startBucket(int metricCount, long start, long duration) {
6570
writer.writeUTF8(VERSION);
6671
writer.writeUTF8(wellKnownTags.getVersion());
6772

73+
if (writeProcessTags) {
74+
writer.writeUTF8(PROCESS_TAGS);
75+
writer.writeUTF8(processTags);
76+
}
77+
6878
writer.writeUTF8(STATS);
79+
6980
writer.startArray(1);
7081

7182
writer.startMap(3);

dd-trace-core/src/test/groovy/datadog/trace/common/metrics/SerializingMetricWriterTest.groovy

+14-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package datadog.trace.common.metrics
22

3+
import datadog.trace.api.Config
4+
import datadog.trace.api.ProcessTags
35
import datadog.trace.api.WellKnownTags
46
import datadog.trace.api.Pair
57
import datadog.trace.test.util.DDSpecification
@@ -9,13 +11,18 @@ import org.msgpack.core.MessageUnpacker
911
import java.nio.ByteBuffer
1012
import java.util.concurrent.atomic.AtomicLongArray
1113

14+
import static datadog.trace.api.config.GeneralConfig.EXPERIMENTAL_COLLECT_PROCESS_TAGS_ENABLED
1215
import static java.util.concurrent.TimeUnit.MILLISECONDS
1316
import static java.util.concurrent.TimeUnit.SECONDS
1417

1518
class SerializingMetricWriterTest extends DDSpecification {
1619

17-
def "should produce correct message #iterationIndex" () {
20+
def "should produce correct message #iterationIndex with process tags enabled #withProcessTags" () {
1821
setup:
22+
if (withProcessTags) {
23+
injectSysConfig(EXPERIMENTAL_COLLECT_PROCESS_TAGS_ENABLED, "true")
24+
}
25+
ProcessTags.reset()
1926
long startTime = MILLISECONDS.toNanos(System.currentTimeMillis())
2027
long duration = SECONDS.toNanos(10)
2128
WellKnownTags wellKnownTags = new WellKnownTags("runtimeid", "hostname", "env", "service", "version","language")
@@ -43,6 +50,7 @@ class SerializingMetricWriterTest extends DDSpecification {
4350
Pair.of(new MetricKey("resource" + i, "service" + i, "operation" + i, "type", 0, false), new AggregateMetric().recordDurations(10, new AtomicLongArray(1L)))
4451
})
4552
]
53+
withProcessTags << [true, false]
4654
}
4755

4856

@@ -70,7 +78,7 @@ class SerializingMetricWriterTest extends DDSpecification {
7078
void accept(int messageCount, ByteBuffer buffer) {
7179
MessageUnpacker unpacker = MessagePack.newDefaultUnpacker(buffer)
7280
int mapSize = unpacker.unpackMapHeader()
73-
assert mapSize == 6
81+
assert mapSize == (6 + (Config.get().isExperimentalCollectProcessTagsEnabled() ? 1 : 0))
7482
assert unpacker.unpackString() == "RuntimeId"
7583
assert unpacker.unpackString() == wellKnownTags.getRuntimeId() as String
7684
assert unpacker.unpackString() == "Seq"
@@ -81,6 +89,10 @@ class SerializingMetricWriterTest extends DDSpecification {
8189
assert unpacker.unpackString() == wellKnownTags.getEnv() as String
8290
assert unpacker.unpackString() == "Version"
8391
assert unpacker.unpackString() == wellKnownTags.getVersion() as String
92+
if (Config.get().isExperimentalCollectProcessTagsEnabled()) {
93+
assert unpacker.unpackString() == "ProcessTags"
94+
assert unpacker.unpackString() == ProcessTags.tagsForSerialization as String
95+
}
8496
assert unpacker.unpackString() == "Stats"
8597
int outerLength = unpacker.unpackArrayHeader()
8698
assert outerLength == 1

0 commit comments

Comments
 (0)