Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add x-datadog-trace-id header to ITR backend requests #6189

Merged
merged 4 commits into from
Nov 13, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -134,8 +134,6 @@ private static DDBuildSystemSession.Factory buildSystemSessionFactory(
CoverageProbeStoreFactory coverageProbeStoreFactory,
GitClient.Factory gitClientFactory) {
BackendApiFactory backendApiFactory = new BackendApiFactory(config, sco);
BackendApi backendApi = backendApiFactory.createBackendApi();

return (String projectName,
Path projectRoot,
String startCommand,
Expand Down Expand Up @@ -165,6 +163,7 @@ private static DDBuildSystemSession.Factory buildSystemSessionFactory(
TestDecorator testDecorator = new TestDecoratorImpl(buildSystemName, ciTags);
TestModuleRegistry testModuleRegistry = new TestModuleRegistry();

BackendApi backendApi = backendApiFactory.createBackendApi();
GitDataUploader gitDataUploader =
buildGitDataUploader(config, gitInfoProvider, gitClientFactory, backendApi, repoRoot);
ModuleExecutionSettingsFactory moduleExecutionSettingsFactory =
Expand Down Expand Up @@ -228,8 +227,6 @@ private static DDTestFrameworkSession.Factory testFrameworkSessionFactory(
CoverageProbeStoreFactory coverageProbeStoreFactory,
GitClient.Factory gitClientFactory) {
BackendApiFactory backendApiFactory = new BackendApiFactory(config, sco);
BackendApi backendApi = backendApiFactory.createBackendApi();

return (String projectName, Path projectRoot, String component, Long startTime) -> {
CIProviderInfoFactory ciProviderInfoFactory = new CIProviderInfoFactory(config);
CIProviderInfo ciProviderInfo = ciProviderInfoFactory.createCIProviderInfo(projectRoot);
Expand Down Expand Up @@ -275,6 +272,7 @@ private static DDTestFrameworkSession.Factory testFrameworkSessionFactory(
// either we are in the build system
// or we are in the tests JVM and the build system is not instrumented
if (parentProcessSessionId == null || parentProcessModuleId == null) {
BackendApi backendApi = backendApiFactory.createBackendApi();
GitDataUploader gitDataUploader =
buildGitDataUploader(config, gitInfoProvider, gitClientFactory, backendApi, repoRoot);
RepoIndexProvider indexProvider = new RepoIndexBuilder(repoRoot, FileSystems.getDefault());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,17 +33,19 @@ public BackendApiFactory(Config config, SharedCommunicationObjects sharedCommuni
"Agentless mode is enabled and api key is not set. Please set application key");
}
long timeoutMillis = config.getCiVisibilityBackendApiTimeoutMillis();
return new IntakeApi(site, apiKey, timeoutMillis, retryPolicyFactory);
String traceId = config.getIdGenerationStrategy().generateTraceId().toString();
return new IntakeApi(site, apiKey, traceId, timeoutMillis, retryPolicyFactory);
}

DDAgentFeaturesDiscovery featuresDiscovery =
sharedCommunicationObjects.featuresDiscovery(config);
featuresDiscovery.discoverIfOutdated();
if (featuresDiscovery.supportsEvpProxy()) {
String traceId = config.getIdGenerationStrategy().generateTraceId().toString();
String evpProxyEndpoint = featuresDiscovery.getEvpProxyEndpoint();
HttpUrl evpProxyUrl = sharedCommunicationObjects.agentUrl.resolve(evpProxyEndpoint);
return new EvpProxyApi(
evpProxyUrl, retryPolicyFactory, sharedCommunicationObjects.okHttpClient);
traceId, evpProxyUrl, retryPolicyFactory, sharedCommunicationObjects.okHttpClient);
}

log.warn(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,14 +19,21 @@ public class EvpProxyApi implements BackendApi {

private static final String API_VERSION = "v2";
private static final String X_DATADOG_EVP_SUBDOMAIN_HEADER = "X-Datadog-EVP-Subdomain";
private static final String X_DATADOG_TRACE_ID_HEADER = "x-datadog-trace-id";
private static final String X_DATADOG_PARENT_ID_HEADER = "x-datadog-parent-id";
private static final String API_SUBDOMAIN = "api";

private final String traceId;
private final HttpRetryPolicy.Factory retryPolicyFactory;
private final HttpUrl evpProxyUrl;
private final OkHttpClient httpClient;

public EvpProxyApi(
HttpUrl evpProxyUrl, HttpRetryPolicy.Factory retryPolicyFactory, OkHttpClient httpClient) {
String traceId,
HttpUrl evpProxyUrl,
HttpRetryPolicy.Factory retryPolicyFactory,
OkHttpClient httpClient) {
this.traceId = traceId;
this.evpProxyUrl = evpProxyUrl.resolve(String.format("api/%s/", API_VERSION));
this.retryPolicyFactory = retryPolicyFactory;
this.httpClient = httpClient;
Expand All @@ -41,6 +48,8 @@ public <T> T post(
new Request.Builder()
.url(url)
.addHeader(X_DATADOG_EVP_SUBDOMAIN_HEADER, API_SUBDOMAIN)
.addHeader(X_DATADOG_TRACE_ID_HEADER, traceId)
.addHeader(X_DATADOG_PARENT_ID_HEADER, traceId)
.post(requestBody)
.build();

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,15 +20,23 @@ public class IntakeApi implements BackendApi {

private static final String API_VERSION = "v2";
private static final String DD_API_KEY_HEADER = "dd-api-key";
private static final String X_DATADOG_TRACE_ID_HEADER = "x-datadog-trace-id";
private static final String X_DATADOG_PARENT_ID_HEADER = "x-datadog-parent-id";

private final String apiKey;
private final String traceId;
private final HttpRetryPolicy.Factory retryPolicyFactory;
private final HttpUrl hostUrl;
private final OkHttpClient httpClient;

public IntakeApi(
String site, String apiKey, long timeoutMillis, HttpRetryPolicy.Factory retryPolicyFactory) {
String site,
String apiKey,
String traceId,
long timeoutMillis,
HttpRetryPolicy.Factory retryPolicyFactory) {
this.apiKey = apiKey;
this.traceId = traceId;
this.retryPolicyFactory = retryPolicyFactory;

final String ciVisibilityAgentlessUrlStr = Config.get().getCiVisibilityAgentlessUrl();
Expand All @@ -47,7 +55,12 @@ public <T> T post(
throws IOException {
HttpUrl url = hostUrl.resolve(uri);
Request.Builder requestBuilder =
new Request.Builder().url(url).post(requestBody).addHeader(DD_API_KEY_HEADER, apiKey);
new Request.Builder()
.url(url)
.post(requestBody)
.addHeader(DD_API_KEY_HEADER, apiKey)
.addHeader(X_DATADOG_TRACE_ID_HEADER, traceId)
.addHeader(X_DATADOG_PARENT_ID_HEADER, traceId);

Request request = requestBuilder.build();
HttpRetryPolicy retryPolicy = retryPolicyFactory.create();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -135,10 +135,11 @@ class ConfigurationApiImplTest extends Specification {
}

private BackendApi givenEvpProxy() {
String traceId = "a-trace-id"
HttpUrl proxyUrl = HttpUrl.get(intakeServer.address)
HttpRetryPolicy.Factory retryPolicyFactory = new HttpRetryPolicy.Factory(5, 100, 2.0)
OkHttpClient client = OkHttpUtils.buildHttpClient(proxyUrl, REQUEST_TIMEOUT_MILLIS)
return new EvpProxyApi(proxyUrl, retryPolicyFactory, client)
return new EvpProxyApi(traceId, proxyUrl, retryPolicyFactory, client)
}

private static TracerEnvironment givenTracerEnvironment() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -114,10 +114,11 @@ class GitDataApiTest extends Specification {
}

private BackendApi givenEvpProxy() {
String traceId = "a-trace-id"
HttpUrl proxyUrl = HttpUrl.get(intakeServer.address)
HttpRetryPolicy.Factory retryPolicyFactory = new HttpRetryPolicy.Factory(5, 100, 2.0)
OkHttpClient client = OkHttpUtils.buildHttpClient(proxyUrl, REQUEST_TIMEOUT_MILLIS)
return new EvpProxyApi(proxyUrl, retryPolicyFactory, client)
return new EvpProxyApi(traceId, proxyUrl, retryPolicyFactory, client)
}

private Path givenPackFile() {
Expand Down
Loading