Skip to content

Commit 20aa262

Browse files
authored
feat(telemetry): Adding support for reporting remote config id (#7012)
1 parent 6df14c1 commit 20aa262

File tree

4 files changed

+46
-0
lines changed

4 files changed

+46
-0
lines changed

dd-trace-api/src/main/java/datadog/trace/api/config/TraceInstrumentationConfig.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,8 @@ public final class TraceInstrumentationConfig {
125125
public static final String SPRING_DATA_REPOSITORY_INTERFACE_RESOURCE_NAME =
126126
"spring-data.repository.interface.resource-name";
127127

128+
public static final String INSTRUMENTATION_CONFIG_ID = "instrumentation_config_id";
129+
128130
public static final String RESOLVER_CACHE_CONFIG = "resolver.cache.config";
129131
public static final String RESOLVER_CACHE_DIR = "resolver.cache.dir";
130132
public static final String RESOLVER_SIMPLE_METHOD_GRAPH = "resolver.simple.method.graph";

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

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
import static datadog.trace.api.config.TraceInstrumentationConfig.AXIS_TRANSPORT_CLASS_NAME;
3333
import static datadog.trace.api.config.TraceInstrumentationConfig.EXPERIMENTAL_DEFER_INTEGRATIONS_UNTIL;
3434
import static datadog.trace.api.config.TraceInstrumentationConfig.HTTP_URL_CONNECTION_CLASS_NAME;
35+
import static datadog.trace.api.config.TraceInstrumentationConfig.INSTRUMENTATION_CONFIG_ID;
3536
import static datadog.trace.api.config.TraceInstrumentationConfig.INTEGRATIONS_ENABLED;
3637
import static datadog.trace.api.config.TraceInstrumentationConfig.JAX_RS_ADDITIONAL_ANNOTATIONS;
3738
import static datadog.trace.api.config.TraceInstrumentationConfig.JDBC_CONNECTION_CLASS_NAME;
@@ -117,6 +118,8 @@ public class InstrumenterConfig {
117118

118119
private final boolean directAllocationProfilingEnabled;
119120

121+
private final String instrumentationConfigId;
122+
120123
private final List<String> excludedClasses;
121124
private final String excludedClassesFile;
122125
private final Set<String> excludedClassLoaders;
@@ -236,6 +239,8 @@ private InstrumenterConfig() {
236239
configProvider.getBoolean(
237240
SERIALVERSIONUID_FIELD_INJECTION, DEFAULT_SERIALVERSIONUID_FIELD_INJECTION);
238241

242+
instrumentationConfigId = configProvider.getString(INSTRUMENTATION_CONFIG_ID, "");
243+
239244
traceAnnotations = configProvider.getString(TRACE_ANNOTATIONS, DEFAULT_TRACE_ANNOTATIONS);
240245
traceAnnotationAsync =
241246
configProvider.getBoolean(TRACE_ANNOTATION_ASYNC, DEFAULT_TRACE_ANNOTATION_ASYNC);
@@ -394,6 +399,10 @@ public String getResolverCacheDir() {
394399
return resolverCacheDir;
395400
}
396401

402+
public String getInstrumentationConfigId() {
403+
return instrumentationConfigId;
404+
}
405+
397406
public boolean isResolverNamesAreUnique() {
398407
return resolverNamesAreUnique;
399408
}

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

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -412,6 +412,25 @@ class TelemetryServiceSpecification extends DDSpecification {
412412
]
413413
}
414414

415+
def 'app can propagate configuration id'() {
416+
setup:
417+
String instrKey = 'instrumentation_config_id'
418+
TestTelemetryRouter testHttpClient = new TestTelemetryRouter()
419+
TelemetryService telemetryService = new TelemetryService(testHttpClient, 10000, false)
420+
telemetryService.addConfiguration(['${instrKey}': ConfigSetting.of(instrKey, id, ConfigOrigin.ENV)])
421+
422+
when: 'first iteration'
423+
testHttpClient.expectRequest(TelemetryClient.Result.SUCCESS)
424+
telemetryService.sendAppStartedEvent()
425+
426+
then: 'app-started'
427+
testHttpClient.assertRequestBody(RequestType.APP_STARTED).assertPayload().instrumentationConfigId(id)
428+
testHttpClient.assertNoMoreRequests()
429+
430+
where:
431+
id << ["foo", null, ""]
432+
}
433+
415434
def 'app started must have install signature'() {
416435
setup:
417436
injectEnvConfig("INSTRUMENTATION_INSTALL_ID", installId)

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

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -242,6 +242,22 @@ class TestTelemetryRouter extends TelemetryRouter {
242242
return this
243243
}
244244

245+
PayloadAssertions instrumentationConfigId(String id) {
246+
boolean checked = false
247+
this.payload['configuration'].each { v ->
248+
if (v['name'] == 'instrumentation_config_id') {
249+
assert v['value'] == id
250+
checked = true
251+
}
252+
}
253+
254+
if (!checked) {
255+
assert id == null
256+
}
257+
258+
return this
259+
}
260+
245261
PayloadAssertions products(boolean appsecEnabled = true, boolean profilerEnabled = false, boolean dynamicInstrumentationEnabled = false) {
246262
def expected = [
247263
appsec: [enabled: appsecEnabled],

0 commit comments

Comments
 (0)