Skip to content

Commit 0f8b948

Browse files
authored
Add Datadog-Entity-Id header (DataDog#6559)
1 parent d1965ab commit 0f8b948

14 files changed

Lines changed: 238 additions & 14 deletions

File tree

communication/src/main/java/datadog/communication/ddagent/SharedCommunicationObjects.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@ public ConfigurationPoller configurationPoller(Config config) {
6060

6161
private ConfigurationPoller createPoller(Config config) {
6262
String containerId = ContainerInfo.get().getContainerId();
63+
String entityId = ContainerInfo.getEntityId();
6364
Supplier<String> configUrlSupplier;
6465
String remoteConfigUrl = config.getFinalRemoteConfigUrl();
6566
if (remoteConfigUrl != null) {
@@ -69,7 +70,7 @@ private ConfigurationPoller createPoller(Config config) {
6970
configUrlSupplier = new RetryConfigUrlSupplier(this, config);
7071
}
7172
return new ConfigurationPoller(
72-
config, TRACER_VERSION, containerId, configUrlSupplier, okHttpClient);
73+
config, TRACER_VERSION, containerId, entityId, configUrlSupplier, okHttpClient);
7374
}
7475

7576
// for testing

communication/src/main/java/datadog/communication/http/OkHttpUtils.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ public final class OkHttpUtils {
4343
private static final String DATADOG_META_LANG_INTERPRETER_VENDOR =
4444
"Datadog-Meta-Lang-Interpreter-Vendor";
4545
private static final String DATADOG_CONTAINER_ID = "Datadog-Container-ID";
46+
private static final String DATADOG_ENTITY_ID = "Datadog-Entity-ID";
4647

4748
private static final String DD_API_KEY = "DD-API-KEY";
4849

@@ -183,9 +184,13 @@ public static Request.Builder prepareRequest(final HttpUrl url, Map<String, Stri
183184
.addHeader(DATADOG_META_LANG_INTERPRETER_VENDOR, JAVA_VM_VENDOR);
184185

185186
final String containerId = ContainerInfo.get().getContainerId();
187+
final String entityId = ContainerInfo.getEntityId();
186188
if (containerId != null) {
187189
builder.addHeader(DATADOG_CONTAINER_ID, containerId);
188190
}
191+
if (entityId != null) {
192+
builder.addHeader(DATADOG_ENTITY_ID, entityId);
193+
}
189194

190195
for (Map.Entry<String, String> e : headers.entrySet()) {
191196
builder.addHeader(e.getKey(), e.getValue());

dd-java-agent/agent-debugger/src/main/java/com/datadog/debugger/uploader/BatchUploader.java

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -60,12 +60,14 @@ public String getFileName() {
6060
private static final int MINUTES_BETWEEN_ERROR_LOG = 5;
6161
private static final MediaType APPLICATION_JSON = MediaType.parse("application/json");
6262
private static final String HEADER_DD_CONTAINER_ID = "Datadog-Container-ID";
63+
private static final String HEADER_DD_ENTITY_ID = "Datadog-Entity-ID";
6364
static final String HEADER_DD_API_KEY = "DD-API-KEY";
6465
static final int MAX_RUNNING_REQUESTS = 10;
6566
static final int MAX_ENQUEUED_REQUESTS = 20;
6667
static final int TERMINATION_TIMEOUT = 5;
6768

6869
private final String containerId;
70+
private final String entityId;
6971
private final ExecutorService okHttpExecutorService;
7072
private final OkHttpClient client;
7173
private final HttpUrl urlBase;
@@ -82,12 +84,21 @@ public BatchUploader(Config config, String endpoint) {
8284
}
8385

8486
BatchUploader(Config config, String endpoint, RatelimitedLogger ratelimitedLogger) {
85-
this(config, endpoint, ratelimitedLogger, ContainerInfo.get().containerId);
87+
this(
88+
config,
89+
endpoint,
90+
ratelimitedLogger,
91+
ContainerInfo.get().containerId,
92+
ContainerInfo.getEntityId());
8693
}
8794

8895
// Visible for testing
8996
BatchUploader(
90-
Config config, String endpoint, RatelimitedLogger ratelimitedLogger, String containerId) {
97+
Config config,
98+
String endpoint,
99+
RatelimitedLogger ratelimitedLogger,
100+
String containerId,
101+
String entityId) {
91102
instrumentTheWorld = config.isDebuggerInstrumentTheWorld();
92103
if (endpoint == null || endpoint.length() == 0) {
93104
throw new IllegalArgumentException("Endpoint url is empty");
@@ -107,6 +118,7 @@ public BatchUploader(Config config, String endpoint) {
107118
new SynchronousQueue<>(),
108119
new AgentThreadFactory(DEBUGGER_HTTP_DISPATCHER));
109120
this.containerId = containerId;
121+
this.entityId = entityId;
110122
Duration requestTimeout = Duration.ofSeconds(config.getDebuggerUploadTimeout());
111123
client =
112124
OkHttpUtils.buildHttpClient(
@@ -217,6 +229,9 @@ private void buildAndSendRequest(RequestBody body, int contentLength, String tag
217229
if (containerId != null) {
218230
requestBuilder.addHeader(HEADER_DD_CONTAINER_ID, containerId);
219231
}
232+
if (entityId != null) {
233+
requestBuilder.addHeader(HEADER_DD_ENTITY_ID, entityId);
234+
}
220235
Request request = requestBuilder.build();
221236
log.debug("Sending request: {} CT: {}", request, request.body().contentType());
222237
client.newCall(request).enqueue(responseCallback);

dd-java-agent/agent-debugger/src/test/java/com/datadog/debugger/uploader/BatchUploaderTest.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -207,7 +207,7 @@ public void testNoContainerId() throws InterruptedException {
207207
// we don't explicitly specify a container ID
208208
server.enqueue(RESPONSE_200);
209209
BatchUploader uploaderWithNoContainerId =
210-
new BatchUploader(config, url.toString(), ratelimitedLogger, null);
210+
new BatchUploader(config, url.toString(), ratelimitedLogger, null, null);
211211

212212
uploaderWithNoContainerId.upload(SNAPSHOT_BUFFER);
213213
uploaderWithNoContainerId.shutdown();
@@ -221,12 +221,14 @@ public void testContainerIdHeader() throws InterruptedException {
221221
server.enqueue(RESPONSE_200);
222222

223223
BatchUploader uploaderWithContainerId =
224-
new BatchUploader(config, url.toString(), ratelimitedLogger, "testContainerId");
224+
new BatchUploader(
225+
config, url.toString(), ratelimitedLogger, "testContainerId", "testEntityId");
225226
uploaderWithContainerId.upload(SNAPSHOT_BUFFER);
226227
uploaderWithContainerId.shutdown();
227228

228229
RecordedRequest request = server.takeRequest(100, TimeUnit.MILLISECONDS);
229230
assertEquals("testContainerId", request.getHeader("Datadog-Container-ID"));
231+
assertEquals("testEntityId", request.getHeader("Datadog-Entity-ID"));
230232
}
231233

232234
@Test

remote-config/src/main/java/datadog/remoteconfig/ConfigurationPoller.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@ public class ConfigurationPoller
6262
private final Config config;
6363
private final String tracerVersion;
6464
private final String containerId;
65+
private final String entityId;
6566
private final OkHttpClient httpClient;
6667
private final RatelimitedLogger ratelimitedLogger;
6768
private final Supplier<String> urlSupplier;
@@ -85,12 +86,14 @@ public ConfigurationPoller(
8586
Config config,
8687
String tracerVersion,
8788
String containerId,
89+
String entityId,
8890
Supplier<String> urlSupplier,
8991
OkHttpClient client) {
9092
this(
9193
config,
9294
tracerVersion,
9395
containerId,
96+
entityId,
9497
urlSupplier,
9598
client,
9699
new AgentTaskScheduler(AgentThreadFactory.AgentThread.REMOTE_CONFIG));
@@ -101,12 +104,14 @@ public ConfigurationPoller(
101104
Config config,
102105
String tracerVersion,
103106
String containerId,
107+
String entityId,
104108
Supplier<String> urlSupplier,
105109
OkHttpClient httpClient,
106110
AgentTaskScheduler taskScheduler) {
107111
this.config = config;
108112
this.tracerVersion = tracerVersion;
109113
this.containerId = containerId;
114+
this.entityId = entityId;
110115
this.urlSupplier = urlSupplier;
111116
this.keyId = config.getRemoteConfigTargetsKeyId();
112117
String keyStr = config.getRemoteConfigTargetsKey();
@@ -253,7 +258,7 @@ private boolean initialize() {
253258
.build();
254259
this.responseFactory = new RemoteConfigResponse.Factory(moshi);
255260
this.requestFactory =
256-
new PollerRequestFactory(config, tracerVersion, containerId, url, moshi);
261+
new PollerRequestFactory(config, tracerVersion, containerId, entityId, url, moshi);
257262
} catch (Exception e) {
258263
// We can't recover from this, so we'll not try to initialize again.
259264
fatalOnInitialization = true;

remote-config/src/main/java/datadog/remoteconfig/PollerRequestFactory.java

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
public class PollerRequestFactory {
2626
private static final String HEADER_DD_API_KEY = "DD-API-KEY";
2727
private static final String HEADER_CONTAINER_ID = "Datadog-Container-ID";
28+
private static final String HEADER_ENTITY_ID = "Datadog-Entity-ID";
2829

2930
private static final Logger log = LoggerFactory.getLogger(PollerRequestFactory.class);
3031

@@ -37,11 +38,17 @@ public class PollerRequestFactory {
3738
private final String hostName;
3839
private final String tracerVersion;
3940
private final String containerId;
41+
private final String entityId;
4042
private final Moshi moshi;
4143
final HttpUrl url;
4244

4345
public PollerRequestFactory(
44-
Config config, String tracerVersion, String containerId, String url, Moshi moshi) {
46+
Config config,
47+
String tracerVersion,
48+
String containerId,
49+
String entityId,
50+
String url,
51+
Moshi moshi) {
4552
this.runtimeId = getRuntimeId(config);
4653
this.serviceName = TagsHelper.sanitize(config.getServiceName());
4754
this.apiKey = config.getApiKey();
@@ -51,6 +58,7 @@ public PollerRequestFactory(
5158
// Semantic Versioning requires build separated with `+`
5259
this.tracerVersion = tracerVersion.replace('~', '+');
5360
this.containerId = containerId;
61+
this.entityId = entityId;
5462
this.url = parseUrl(url);
5563
this.moshi = moshi;
5664
}
@@ -88,9 +96,12 @@ public Request newConfigurationRequest(
8896
if (this.apiKey != null) {
8997
requestBuilder.addHeader(HEADER_DD_API_KEY, this.apiKey);
9098
}
91-
if (containerId != null && !containerId.isEmpty()) {
99+
if (containerId != null) {
92100
requestBuilder.addHeader(HEADER_CONTAINER_ID, containerId);
93101
}
102+
if (entityId != null) {
103+
requestBuilder.addHeader(HEADER_ENTITY_ID, entityId);
104+
}
94105
return requestBuilder.build();
95106
}
96107

remote-config/src/test/groovy/datadog/remoteconfig/ConfigurationPollerSpecification.groovy

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,7 @@ class ConfigurationPollerSpecification extends DDSpecification {
7070
Config.get(),
7171
'0.0.0',
7272
'',
73+
'',
7374
{ -> configUrlSupplier.get() } as Supplier<String>,
7475
okHttpClient,
7576
scheduler,

remote-config/src/test/groovy/datadog/remoteconfig/PollerRequestFactoryTest.groovy

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ class PollerRequestFactoryTest extends DDSpecification {
99

1010
static final String TRACER_VERSION = "v1.2.3"
1111
static final String CONTAINER_ID = "456"
12+
static final String ENTITY_ID = "32423"
1213
static final String INVALID_REMOTE_CONFIG_URL = "https://invalid.example.com/"
1314

1415
void 'remote config request fields been sanitized'() {
@@ -18,7 +19,7 @@ class PollerRequestFactoryTest extends DDSpecification {
1819
System.setProperty("dd.tags", "version:1.0.0-SNAPSHOT")
1920
System.setProperty("dd.trace.global.tags", Tags.GIT_REPOSITORY_URL+":https://github.com/DataDog/dd-trace-java,"+Tags.GIT_COMMIT_SHA + ":1234")
2021
rebuildConfig()
21-
PollerRequestFactory factory = new PollerRequestFactory(Config.get(), TRACER_VERSION, CONTAINER_ID, INVALID_REMOTE_CONFIG_URL, null)
22+
PollerRequestFactory factory = new PollerRequestFactory(Config.get(), TRACER_VERSION, CONTAINER_ID, ENTITY_ID, INVALID_REMOTE_CONFIG_URL, null)
2223

2324
when:
2425
RemoteConfigRequest request = factory.buildRemoteConfigRequest( Collections.singletonList("ASM"), null, null, 0)

remote-config/src/test/groovy/datadog/remoteconfig/Rcte1TestVectorsSpecification.groovy

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ class Rcte1TestVectorsSpecification extends DDSpecification {
5151
Config.get(),
5252
'0.0.0',
5353
'containerid',
54+
'entityid',
5455
{ -> URL.toString() },
5556
okHttpClient,
5657
scheduler

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,10 @@ public Request.Builder httpRequest() {
6060
if (containerId != null) {
6161
builder.addHeader("Datadog-Container-ID", containerId);
6262
}
63+
final String entityId = ContainerInfo.getEntityId();
64+
if (entityId != null) {
65+
builder.addHeader("Datadog-Entity-ID", entityId);
66+
}
6367

6468
if (debug) {
6569
builder.addHeader("DD-Telemetry-Debug-Enabled", "true");

0 commit comments

Comments
 (0)