Skip to content

Commit 9030071

Browse files
authored
Include dynamic_instrumentation product into the app_started telemetry event (#6422)
1 parent 60f2267 commit 9030071

File tree

4 files changed

+49
-4
lines changed

4 files changed

+49
-4
lines changed

telemetry/src/main/java/datadog/telemetry/TelemetryRequest.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import datadog.telemetry.api.Metric;
99
import datadog.telemetry.api.RequestType;
1010
import datadog.telemetry.dependency.Dependency;
11+
import datadog.trace.api.Config;
1112
import datadog.trace.api.ConfigSetting;
1213
import datadog.trace.api.DDTags;
1314
import datadog.trace.api.InstrumenterConfig;
@@ -86,11 +87,13 @@ public void writeConfigurations() {
8687

8788
public void writeProducts() {
8889
InstrumenterConfig instrumenterConfig = InstrumenterConfig.get();
90+
Config config = Config.get();
8991
try {
9092
boolean appsecEnabled =
9193
instrumenterConfig.getAppSecActivation() != ProductActivation.FULLY_DISABLED;
9294
boolean profilerEnabled = instrumenterConfig.isProfilingEnabled();
93-
requestBody.writeProducts(appsecEnabled, profilerEnabled);
95+
boolean dynamicInstrumentationEnabled = config.isDebuggerEnabled();
96+
requestBody.writeProducts(appsecEnabled, profilerEnabled, dynamicInstrumentationEnabled);
9497
} catch (IOException e) {
9598
throw new TelemetryRequestBody.SerializationException("products", e);
9699
}

telemetry/src/main/java/datadog/telemetry/TelemetryRequestBody.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -263,7 +263,9 @@ public void endDependencies() throws IOException {
263263
endMessageIfBatch(RequestType.APP_DEPENDENCIES_LOADED);
264264
}
265265

266-
public void writeProducts(boolean appsecEnabled, boolean profilerEnabled) throws IOException {
266+
public void writeProducts(
267+
boolean appsecEnabled, boolean profilerEnabled, boolean dynamicInstrumentationEnabled)
268+
throws IOException {
267269
bodyWriter.name("products");
268270
bodyWriter.beginObject();
269271

@@ -277,6 +279,11 @@ public void writeProducts(boolean appsecEnabled, boolean profilerEnabled) throws
277279
bodyWriter.name("enabled").value(profilerEnabled);
278280
bodyWriter.endObject();
279281

282+
bodyWriter.name("dynamic_instrumentation");
283+
bodyWriter.beginObject();
284+
bodyWriter.name("enabled").value(dynamicInstrumentationEnabled);
285+
bodyWriter.endObject();
286+
280287
bodyWriter.endObject();
281288
}
282289

telemetry/src/test/groovy/datadog/telemetry/TelemetryServiceSpecification.groovy

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,11 @@ import datadog.telemetry.api.Metric
99
import datadog.telemetry.api.RequestType
1010
import datadog.trace.api.ConfigOrigin
1111
import datadog.trace.api.ConfigSetting
12+
import datadog.trace.api.config.AppSecConfig
13+
import datadog.trace.api.config.DebuggerConfig
14+
import datadog.trace.api.config.ProfilingConfig
1215
import datadog.trace.test.util.DDSpecification
16+
import datadog.trace.util.Strings
1317

1418
class TelemetryServiceSpecification extends DDSpecification {
1519
def confKeyValue = new ConfigSetting("confkey", "confvalue", ConfigOrigin.DEFAULT)
@@ -436,4 +440,31 @@ class TelemetryServiceSpecification extends DDSpecification {
436440
"68e75c55-57ca-4a12-adfc-575c4b05aaaa" | "k8s_single_step" | null
437441
"68e75c77-57ca-4a12-adfc-575c4b05fc44" | "k8s_single_step" | "1993188215"
438442
}
443+
444+
def 'app-started must include activated products info'() {
445+
setup:
446+
injectEnvConfig(Strings.toEnvVar(AppSecConfig.APPSEC_ENABLED), appsecConfig)
447+
injectEnvConfig(Strings.toEnvVar(ProfilingConfig.PROFILING_ENABLED), profilingConfig)
448+
injectEnvConfig(Strings.toEnvVar(DebuggerConfig.DEBUGGER_ENABLED), dynInstrConfig)
449+
450+
TestTelemetryRouter testHttpClient = new TestTelemetryRouter()
451+
TelemetryService telemetryService = new TelemetryService(testHttpClient, 10000, false)
452+
453+
when: 'first iteration'
454+
testHttpClient.expectRequest(TelemetryClient.Result.SUCCESS)
455+
telemetryService.sendAppStartedEvent()
456+
457+
then: 'app-started'
458+
testHttpClient.assertRequestBody(RequestType.APP_STARTED).assertPayload().products(appsecEnabled, profilingEnabled, dynInstrEnabled)
459+
testHttpClient.assertNoMoreRequests()
460+
461+
where:
462+
appsecConfig | appsecEnabled | profilingConfig | profilingEnabled | dynInstrConfig | dynInstrEnabled
463+
"1" | true | "1" | true | "1" | true
464+
"1" | true | "1" | true | "0" | false
465+
"1" | true | "0" | false | "1" | true
466+
"1" | true | "0" | false | "0" | false
467+
"0" | false | "0" | false | "0" | false
468+
"inactive" | true | "0" | false | "0" | false
469+
}
439470
}

telemetry/src/test/groovy/datadog/telemetry/TestTelemetryRouter.groovy

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -240,8 +240,12 @@ class TestTelemetryRouter extends TelemetryRouter {
240240
return this
241241
}
242242

243-
PayloadAssertions products(boolean appsecEnabled = true, boolean profilerEnabled = false) {
244-
def expected = [appsec: [enabled: appsecEnabled], profiler: [enabled: profilerEnabled]]
243+
PayloadAssertions products(boolean appsecEnabled = true, boolean profilerEnabled = false, boolean dynamicInstrumentationEnabled = false) {
244+
def expected = [
245+
appsec: [enabled: appsecEnabled],
246+
profiler: [enabled: profilerEnabled],
247+
dynamic_instrumentation: [enabled: dynamicInstrumentationEnabled]
248+
]
245249
assert this.payload['products'] == expected
246250
return this
247251
}

0 commit comments

Comments
 (0)