Skip to content

Commit 1f201d7

Browse files
committed
Add runtime info to experimental instead
1 parent 33ebcc5 commit 1f201d7

15 files changed

Lines changed: 56 additions & 117 deletions

dd-java-agent/agent-crashtracking/src/main/java/datadog/crashtracking/CrashUploader.java

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -577,26 +577,12 @@ private RequestBody makeErrorTrackingRequestBody(@Nonnull CrashLog payload, bool
577577
"os.version")); // this has been restructured under OsInfo so taking raw here
578578
writer.endObject();
579579
}
580-
// runtime info (JDK vendor and build details from the crash log)
581-
if (payload.runtimeInfo != null) {
582-
writer.name("runtime_info");
583-
writer.beginObject();
584-
if (payload.runtimeInfo.jreVersion != null) {
585-
writer.name("jre_version").value(payload.runtimeInfo.jreVersion);
586-
}
587-
if (payload.runtimeInfo.javaVm != null) {
588-
writer.name("java_vm").value(payload.runtimeInfo.javaVm);
589-
}
590-
if (payload.runtimeInfo.vmInfo != null) {
591-
writer.name("vm_info").value(payload.runtimeInfo.vmInfo);
592-
}
593-
writer.endObject();
594-
}
595580
// experimental
596581
if (payload.experimental != null
597582
&& (payload.experimental.ucontext != null
598583
|| payload.experimental.registerToMemoryMapping != null
599-
|| payload.experimental.runtimeArgs != null)) {
584+
|| payload.experimental.runtimeArgs != null
585+
|| payload.experimental.runtimeInfo != null)) {
600586
writer.name("experimental");
601587
writer.beginObject();
602588
if (payload.experimental.ucontext != null) {
@@ -626,6 +612,20 @@ private RequestBody makeErrorTrackingRequestBody(@Nonnull CrashLog payload, bool
626612
}
627613
writer.endArray();
628614
}
615+
if (payload.experimental.runtimeInfo != null) {
616+
writer.name("runtime_info");
617+
writer.beginObject();
618+
if (payload.experimental.runtimeInfo.jreVersion != null) {
619+
writer.name("jre_version").value(payload.experimental.runtimeInfo.jreVersion);
620+
}
621+
if (payload.experimental.runtimeInfo.javaVm != null) {
622+
writer.name("java_vm").value(payload.experimental.runtimeInfo.javaVm);
623+
}
624+
if (payload.experimental.runtimeInfo.vmInfo != null) {
625+
writer.name("vm_info").value(payload.experimental.runtimeInfo.vmInfo);
626+
}
627+
writer.endObject();
628+
}
629629
writer.endObject();
630630
}
631631
// files (e.g. /proc/self/maps or dynamic_libraries)

dd-java-agent/agent-crashtracking/src/main/java/datadog/crashtracking/dto/CrashLog.java

Lines changed: 0 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -41,9 +41,6 @@ public final class CrashLog {
4141

4242
public final Experimental experimental;
4343

44-
@Json(name = "runtime_info")
45-
public final RuntimeInfo runtimeInfo;
46-
4744
/**
4845
* Useful files for triage and debugging (e.g. {@code /proc/self/maps}, {@code
4946
* dynamic_libraries}).
@@ -71,7 +68,6 @@ public CrashLog(
7168
sigInfo,
7269
dataSchemaVersion,
7370
null,
74-
null,
7571
null);
7672
}
7773

@@ -87,34 +83,6 @@ public CrashLog(
8783
String dataSchemaVersion,
8884
Experimental experimental,
8985
DynamicLibs files) {
90-
this(
91-
uuid,
92-
incomplete,
93-
timestamp,
94-
error,
95-
metadata,
96-
osInfo,
97-
procInfo,
98-
sigInfo,
99-
dataSchemaVersion,
100-
experimental,
101-
null,
102-
files);
103-
}
104-
105-
public CrashLog(
106-
String uuid,
107-
boolean incomplete,
108-
String timestamp,
109-
ErrorData error,
110-
Metadata metadata,
111-
OSInfo osInfo,
112-
ProcInfo procInfo,
113-
SigInfo sigInfo,
114-
String dataSchemaVersion,
115-
Experimental experimental,
116-
RuntimeInfo runtimeInfo,
117-
DynamicLibs files) {
11886
this.uuid = uuid != null ? uuid : RandomUtils.randomUUID().toString();
11987
this.incomplete = incomplete;
12088
this.timestamp = timestamp;
@@ -125,7 +93,6 @@ public CrashLog(
12593
this.sigInfo = sigInfo;
12694
this.dataSchemaVersion = dataSchemaVersion;
12795
this.experimental = experimental;
128-
this.runtimeInfo = runtimeInfo;
12996
this.files = files;
13097
}
13198

@@ -156,7 +123,6 @@ public boolean equals(Object o) {
156123
&& Objects.equals(sigInfo, crashLog.sigInfo)
157124
&& Objects.equals(dataSchemaVersion, crashLog.dataSchemaVersion)
158125
&& Objects.equals(experimental, crashLog.experimental)
159-
&& Objects.equals(runtimeInfo, crashLog.runtimeInfo)
160126
&& Objects.equals(files, crashLog.files);
161127
}
162128

@@ -174,7 +140,6 @@ public int hashCode() {
174140
version,
175141
dataSchemaVersion,
176142
experimental,
177-
runtimeInfo,
178143
files);
179144
}
180145

@@ -196,7 +161,6 @@ public boolean equalsForTest(Object o) {
196161
&& Objects.equals(sigInfo, crashLog.sigInfo)
197162
&& Objects.equals(dataSchemaVersion, crashLog.dataSchemaVersion)
198163
&& Objects.equals(experimental, crashLog.experimental)
199-
&& Objects.equals(runtimeInfo, crashLog.runtimeInfo)
200164
&& Objects.equals(files, crashLog.files);
201165
}
202166
}

dd-java-agent/agent-crashtracking/src/main/java/datadog/crashtracking/dto/Experimental.java

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,21 +14,33 @@ public final class Experimental {
1414
@Json(name = "runtime_args")
1515
public final List<String> runtimeArgs;
1616

17+
@Json(name = "runtime_info")
18+
public final RuntimeInfo runtimeInfo;
19+
1720
public Experimental(Map<String, String> ucontext) {
18-
this(ucontext, null, null);
21+
this(ucontext, null, null, null);
1922
}
2023

2124
public Experimental(Map<String, String> ucontext, List<String> runtimeArgs) {
22-
this(ucontext, null, runtimeArgs);
25+
this(ucontext, null, runtimeArgs, null);
2326
}
2427

2528
public Experimental(
2629
Map<String, String> ucontext,
2730
Map<String, String> registerToMemoryMapping,
2831
List<String> runtimeArgs) {
32+
this(ucontext, registerToMemoryMapping, runtimeArgs, null);
33+
}
34+
35+
public Experimental(
36+
Map<String, String> ucontext,
37+
Map<String, String> registerToMemoryMapping,
38+
List<String> runtimeArgs,
39+
RuntimeInfo runtimeInfo) {
2940
this.ucontext = ucontext;
3041
this.registerToMemoryMapping = registerToMemoryMapping;
3142
this.runtimeArgs = runtimeArgs;
43+
this.runtimeInfo = runtimeInfo;
3244
}
3345

3446
@Override
@@ -37,11 +49,12 @@ public boolean equals(Object o) {
3749
Experimental that = (Experimental) o;
3850
return Objects.equals(ucontext, that.ucontext)
3951
&& Objects.equals(registerToMemoryMapping, that.registerToMemoryMapping)
40-
&& Objects.equals(runtimeArgs, that.runtimeArgs);
52+
&& Objects.equals(runtimeArgs, that.runtimeArgs)
53+
&& Objects.equals(runtimeInfo, that.runtimeInfo);
4154
}
4255

4356
@Override
4457
public int hashCode() {
45-
return Objects.hash(ucontext, registerToMemoryMapping, runtimeArgs);
58+
return Objects.hash(ucontext, registerToMemoryMapping, runtimeArgs, runtimeInfo);
4659
}
4760
}

dd-java-agent/agent-crashtracking/src/main/java/datadog/crashtracking/parsers/HotspotCrashLogParser.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -625,15 +625,16 @@ public CrashLog parse(String uuid, String crashLog) {
625625
registerToMemoryMapping.replaceAll((k, v) -> RedactUtils.redactRegisterToMemoryMapping(v));
626626
resolvedMapping = registerToMemoryMapping;
627627
}
628+
RuntimeInfo runtimeInfo =
629+
(jreVersion != null || javaVm != null || vmInfo != null)
630+
? new RuntimeInfo(jreVersion, javaVm, vmInfo)
631+
: null;
628632
Experimental experimental =
629633
!registers.isEmpty()
630634
|| resolvedMapping != null
631635
|| (runtimeArgs != null && !runtimeArgs.isEmpty())
632-
? new Experimental(registers, resolvedMapping, runtimeArgs)
633-
: null;
634-
RuntimeInfo runtimeInfo =
635-
(jreVersion != null || javaVm != null || vmInfo != null)
636-
? new RuntimeInfo(jreVersion, javaVm, vmInfo)
636+
|| runtimeInfo != null
637+
? new Experimental(registers, resolvedMapping, runtimeArgs, runtimeInfo)
637638
: null;
638639
DynamicLibs files =
639640
(dynamicLibraryLines != null && !dynamicLibraryLines.isEmpty())
@@ -650,7 +651,6 @@ public CrashLog parse(String uuid, String crashLog) {
650651
sigInfo,
651652
"1.0",
652653
experimental,
653-
runtimeInfo,
654654
files);
655655
}
656656

dd-java-agent/agent-crashtracking/src/main/java/datadog/crashtracking/parsers/J9JavacoreParser.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -309,15 +309,16 @@ public CrashLog parse(String uuid, String javacoreContent) {
309309
Integer parsedPid = safelyParseInt(pid);
310310
ProcInfo procInfo = parsedPid != null ? new ProcInfo(parsedPid) : null;
311311
List<String> runtimeArgs = j9UserArgs.build();
312-
Experimental experimental =
313-
(registers != null && !registers.isEmpty())
314-
|| (runtimeArgs != null && !runtimeArgs.isEmpty())
315-
? new Experimental(registers, runtimeArgs)
316-
: null;
317312
RuntimeInfo runtimeInfo =
318313
(j9JavaVersion != null || j9VmVersion != null)
319314
? new RuntimeInfo(j9JavaVersion, null, j9VmVersion)
320315
: null;
316+
Experimental experimental =
317+
(registers != null && !registers.isEmpty())
318+
|| (runtimeArgs != null && !runtimeArgs.isEmpty())
319+
|| runtimeInfo != null
320+
? new Experimental(registers, null, runtimeArgs, runtimeInfo)
321+
: null;
321322

322323
return new CrashLog(
323324
uuid,
@@ -330,7 +331,6 @@ public CrashLog parse(String uuid, String javacoreContent) {
330331
sigInfo,
331332
"1.0",
332333
experimental,
333-
runtimeInfo,
334334
null);
335335
}
336336

dd-java-agent/agent-crashtracking/src/test/java/datadog/crashtracking/parsers/HotspotCrashLogParserTest.java

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -350,12 +350,13 @@ public void testRuntimeInfoParsing(
350350
CrashLog crashLog =
351351
new HotspotCrashLogParser().parse(UUID.randomUUID().toString(), readFileAsString(filename));
352352

353-
assertNotNull(crashLog.runtimeInfo, "runtimeInfo should be populated");
354-
assertNotNull(crashLog.runtimeInfo.jreVersion, "jreVersion should be populated");
355-
assertNotNull(crashLog.runtimeInfo.javaVm, "javaVm should be populated");
356-
assertNotNull(crashLog.runtimeInfo.vmInfo, "vmInfo should be populated");
357-
assertEquals(expectedJreVersion, crashLog.runtimeInfo.jreVersion);
358-
assertEquals(expectedVmInfo, crashLog.runtimeInfo.vmInfo);
353+
assertNotNull(crashLog.experimental, "experimental should be populated");
354+
assertNotNull(crashLog.experimental.runtimeInfo, "runtimeInfo should be populated");
355+
assertNotNull(crashLog.experimental.runtimeInfo.jreVersion, "jreVersion should be populated");
356+
assertNotNull(crashLog.experimental.runtimeInfo.javaVm, "javaVm should be populated");
357+
assertNotNull(crashLog.experimental.runtimeInfo.vmInfo, "vmInfo should be populated");
358+
assertEquals(expectedJreVersion, crashLog.experimental.runtimeInfo.jreVersion);
359+
assertEquals(expectedVmInfo, crashLog.experimental.runtimeInfo.vmInfo);
359360
}
360361

361362
@Test

dd-java-agent/agent-crashtracking/src/test/java/datadog/crashtracking/parsers/J9JavacoreParserTest.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -223,9 +223,10 @@ public void testRuntimeInfoParsing(String filename, String expectedJreVersion) t
223223
CrashLog crashLog =
224224
new J9JavacoreParser().parse(UUID.randomUUID().toString(), readFileAsString(filename));
225225

226-
assertNotNull(crashLog.runtimeInfo, "runtimeInfo should be populated");
227-
assertNotNull(crashLog.runtimeInfo.jreVersion, "jreVersion should be populated");
228-
assertEquals(expectedJreVersion, crashLog.runtimeInfo.jreVersion);
226+
assertNotNull(crashLog.experimental, "experimental should be populated");
227+
assertNotNull(crashLog.experimental.runtimeInfo, "runtimeInfo should be populated");
228+
assertNotNull(crashLog.experimental.runtimeInfo.jreVersion, "jreVersion should be populated");
229+
assertEquals(expectedJreVersion, crashLog.experimental.runtimeInfo.jreVersion);
229230
}
230231

231232
@Test

dd-java-agent/agent-crashtracking/src/test/resources/golden/errortracking/sample-crash-for-telemetry-2.json

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -26,11 +26,6 @@
2626
"si_pid": 554848,
2727
"si_uid": 1000
2828
},
29-
"runtime_info": {
30-
"java_vm": "OpenJDK 64-Bit Server VM Temurin-22.0.1+8 (22.0.1+8, mixed mode, sharing, tiered, compressed oops, compressed class ptrs, g1 gc, linux-amd64)",
31-
"jre_version": "OpenJDK Runtime Environment Temurin-22.0.1+8 (22.0.1+8) (build 22.0.1+8)",
32-
"vm_info": "OpenJDK 64-Bit Server VM (22.0.1+8) for linux-amd64 JRE (22.0.1+8), built on 2024-04-16T00:00:00Z by \"admin\" with gcc 11.3.0"
33-
},
3429
"experimental": {
3530
"ucontext": {
3631
"RAX": "0x00000000000000ca",

dd-java-agent/agent-crashtracking/src/test/resources/golden/errortracking/sample-crash-for-telemetry-3.json

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -103,11 +103,6 @@
103103
]
104104
}
105105
},
106-
"runtime_info": {
107-
"java_vm": "OpenJDK 64-Bit Server VM (25.372-b07 mixed mode bsd-aarch64 compressed oops)",
108-
"jre_version": "OpenJDK Runtime Environment (Zulu 8.70.0.23-CA-macos-aarch64) (8.0_372-b07) (build 1.8.0_372-b07)",
109-
"vm_info": "OpenJDK 64-Bit Server VM (25.372-b07) for bsd-aarch64 JRE (Zulu 8.70.0.23-CA-macos-aarch64) (1.8.0_372-b07), built on Apr 18 2023 01:36:20 by \"zulu_re\" with gcc Apple LLVM 12.0.0 (clang-1200.0.32.28)"
110-
},
111106
"files": {
112107
"dynamic_libraries": [
113108
"0x00000001ae54a000 \t/System/Library/Frameworks/Cocoa.framework/Versions/A/Cocoa",

dd-java-agent/agent-crashtracking/src/test/resources/golden/errortracking/sample-crash-for-telemetry.json

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -472,11 +472,6 @@
472472
"si_code": 1,
473473
"si_code_human_readable": "SEGV_MAPERR"
474474
},
475-
"runtime_info": {
476-
"java_vm": "OpenJDK 64-Bit Server VM Zulu17.42+20-SA (17.0.7+7-LTS, mixed mode, tiered, compressed oops, compressed class ptrs, g1 gc, linux-amd64)",
477-
"jre_version": "OpenJDK Runtime Environment Zulu17.42+20-SA (17.0.7+7) (build 17.0.7+7-LTS)",
478-
"vm_info": "OpenJDK 64-Bit Server VM (17.0.7+7-LTS) for linux-amd64 JRE (17.0.7+7-LTS) (Zulu17.42+20-SA), built on Apr 11 2023 11:39:51 by \"zulu_re\" with gcc 8.3.0"
479-
},
480475
"experimental": {
481476
"ucontext": {
482477
"RAX": "0x00007f36ccfbf170",

0 commit comments

Comments
 (0)