Skip to content

Commit 0fad309

Browse files
authored
Collect process tags for profiling upload requests (#8780)
1 parent 020dc0d commit 0fad309

File tree

3 files changed

+41
-1
lines changed

3 files changed

+41
-1
lines changed

dd-java-agent/agent-profiling/profiling-uploader/src/main/java/com/datadog/profiling/uploader/ProfileUploader.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
import datadog.trace.api.Config;
2828
import datadog.trace.api.DDTags;
2929
import datadog.trace.api.Platform;
30+
import datadog.trace.api.ProcessTags;
3031
import datadog.trace.api.git.GitInfo;
3132
import datadog.trace.api.git.GitInfoProvider;
3233
import datadog.trace.api.profiling.RecordingData;
@@ -469,13 +470,18 @@ public void toJson(JsonWriter writer, RecordingData recordingData) throws IOExce
469470
if (recordingData == null) {
470471
return;
471472
}
473+
final CharSequence processTags = ProcessTags.getTagsForSerialization();
472474
writer.beginObject();
473475
writer.name("attachments");
474476
writer.beginArray();
475477
writer.value(V4_ATTACHMENT_FILENAME);
476478
writer.endArray();
477479
writer.name(V4_PROFILE_TAGS_PARAM);
478480
writer.value(tags + ",snapshot:" + recordingData.getKind().name().toLowerCase(Locale.ROOT));
481+
if (processTags != null) {
482+
writer.name("process_tags");
483+
writer.value(processTags.toString());
484+
}
479485
writer.name(V4_PROFILE_START_PARAM);
480486
writer.value(recordingData.getStart().toString());
481487
writer.name(V4_PROFILE_END_PARAM);

dd-java-agent/agent-profiling/profiling-uploader/src/test/java/com/datadog/profiling/uploader/ProfileUploaderTest.java

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@
4343
import datadog.trace.api.Config;
4444
import datadog.trace.api.DDTags;
4545
import datadog.trace.api.Platform;
46+
import datadog.trace.api.ProcessTags;
4647
import datadog.trace.api.profiling.ProfilingSnapshot;
4748
import datadog.trace.api.profiling.RecordingData;
4849
import datadog.trace.api.profiling.RecordingInputStream;
@@ -830,6 +831,34 @@ public void testShutdown() throws Exception {
830831
verify(recording).release();
831832
}
832833

834+
@ParameterizedTest(name = "process tags enabled ''{0}''")
835+
@ValueSource(booleans = {true, false})
836+
public void testRequestWithProcessTags(boolean processTagsEnabled) throws Exception {
837+
when(config.isExperimentalPropagateProcessTagsEnabled()).thenReturn(processTagsEnabled);
838+
ProcessTags.reset(config);
839+
uploader =
840+
new ProfileUploader(
841+
config, configProvider, ioLogger, (int) TERMINATION_TIMEOUT.getSeconds());
842+
843+
server.enqueue(new MockResponse().setResponseCode(200));
844+
uploadAndWait(RECORDING_TYPE, mockRecordingData());
845+
846+
final RecordedRequest recordedRequest = server.takeRequest(5, TimeUnit.SECONDS);
847+
assertNotNull(recordedRequest);
848+
final List<FileItem> multiPartItems =
849+
FileUpload.parse(
850+
recordedRequest.getBody().readByteArray(), recordedRequest.getHeader("Content-Type"));
851+
852+
final FileItem rawEvent = multiPartItems.get(0);
853+
final Map<String, ?> parsed = new ObjectMapper().readValue(rawEvent.get(), Map.class);
854+
if (processTagsEnabled) {
855+
assertNotNull(ProcessTags.getTagsForSerialization());
856+
assertEquals(ProcessTags.getTagsForSerialization().toString(), parsed.get("process_tags"));
857+
} else {
858+
assertNull(parsed.get("process_tags"));
859+
}
860+
}
861+
833862
private RecordingData mockRecordingData() throws IOException {
834863
return mockRecordingData(false, ProfilingSnapshot.Kind.PERIODIC);
835864
}

internal-api/src/main/java/datadog/trace/api/ProcessTags.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -147,9 +147,14 @@ static void empty() {
147147

148148
/** Visible for testing. */
149149
static void reset() {
150+
reset(Config.get());
151+
}
152+
153+
/** Visible for testing. */
154+
public static void reset(Config config) {
150155
synchronized (Lazy.TAGS) {
151156
empty();
152-
enabled = Config.get().isExperimentalPropagateProcessTagsEnabled();
157+
enabled = config.isExperimentalPropagateProcessTagsEnabled();
153158
Lazy.TAGS.putAll(Lazy.loadTags());
154159
}
155160
}

0 commit comments

Comments
 (0)