Skip to content

Commit 461fb1f

Browse files
feat: refactor agentless intakes
1 parent 14cf11c commit 461fb1f

File tree

6 files changed

+69
-53
lines changed

6 files changed

+69
-53
lines changed

communication/src/main/java/datadog/communication/BackendApiFactory.java

Lines changed: 4 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@
55
import datadog.communication.http.HttpRetryPolicy;
66
import datadog.communication.http.OkHttpUtils;
77
import datadog.trace.api.Config;
8+
import datadog.trace.api.intake.AgentlessIntake;
89
import datadog.trace.util.throwable.FatalAgentMisconfigurationError;
9-
import java.util.function.Function;
1010
import javax.annotation.Nullable;
1111
import okhttp3.HttpUrl;
1212
import okhttp3.OkHttpClient;
@@ -25,11 +25,11 @@ public BackendApiFactory(Config config, SharedCommunicationObjects sharedCommuni
2525
this.sharedCommunicationObjects = sharedCommunicationObjects;
2626
}
2727

28-
public @Nullable BackendApi createBackendApi(Intake intake) {
28+
public @Nullable BackendApi createBackendApi(AgentlessIntake intake) {
2929
HttpRetryPolicy.Factory retryPolicyFactory = new HttpRetryPolicy.Factory(5, 100, 2.0, true);
3030

31-
if (intake.agentlessModeEnabled.apply(config)) {
32-
HttpUrl agentlessUrl = getAgentlessUrl(intake);
31+
if (intake.isAgentlessEnabled(config)) {
32+
HttpUrl agentlessUrl = HttpUrl.get(intake.getAgentlessUrl(config));
3333
String apiKey = config.getApiKey();
3434
if (apiKey == null || apiKey.isEmpty()) {
3535
throw new FatalAgentMisconfigurationError(
@@ -58,41 +58,4 @@ public BackendApiFactory(Config config, SharedCommunicationObjects sharedCommuni
5858
+ "and agent does not support EVP proxy");
5959
return null;
6060
}
61-
62-
private HttpUrl getAgentlessUrl(Intake intake) {
63-
String customUrl = intake.customUrl.apply(config);
64-
if (customUrl != null && !customUrl.isEmpty()) {
65-
return HttpUrl.get(String.format("%s/api/%s/", customUrl, intake.version));
66-
} else {
67-
String site = config.getSite();
68-
return HttpUrl.get(
69-
String.format("https://%s.%s/api/%s/", intake.urlPrefix, site, intake.version));
70-
}
71-
}
72-
73-
public enum Intake {
74-
API("api", "v2", Config::isCiVisibilityAgentlessEnabled, Config::getCiVisibilityAgentlessUrl),
75-
LLMOBS_API("api", "v2", Config::isLlmObsAgentlessEnabled, Config::getLlMObsAgentlessUrl),
76-
LOGS(
77-
"http-intake.logs",
78-
"v2",
79-
Config::isAgentlessLogSubmissionEnabled,
80-
Config::getAgentlessLogSubmissionUrl);
81-
82-
public final String urlPrefix;
83-
public final String version;
84-
public final Function<Config, Boolean> agentlessModeEnabled;
85-
public final Function<Config, String> customUrl;
86-
87-
Intake(
88-
String urlPrefix,
89-
String version,
90-
Function<Config, Boolean> agentlessModeEnabled,
91-
Function<Config, String> customUrl) {
92-
this.urlPrefix = urlPrefix;
93-
this.version = version;
94-
this.agentlessModeEnabled = agentlessModeEnabled;
95-
this.customUrl = customUrl;
96-
}
97-
}
9861
}

dd-java-agent/agent-ci-visibility/src/main/java/datadog/trace/civisibility/CiVisibilityServices.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434
import datadog.trace.civisibility.source.LinesResolver;
3535
import datadog.trace.civisibility.source.index.*;
3636
import datadog.trace.civisibility.utils.ShellCommandExecutor;
37+
import datadog.trace.api.intake.AgentlessIntake;
3738
import java.io.File;
3839
import java.lang.reflect.Type;
3940
import java.net.InetSocketAddress;
@@ -84,7 +85,7 @@ public class CiVisibilityServices {
8485
this.config = config;
8586
this.metricCollector = metricCollector;
8687
this.backendApi =
87-
new BackendApiFactory(config, sco).createBackendApi(BackendApiFactory.Intake.API);
88+
new BackendApiFactory(config, sco).createBackendApi(AgentlessIntake.API);
8889
this.jvmInfoFactory = new CachingJvmInfoFactory(config, new JvmInfoFactoryImpl());
8990
this.gitClientFactory = buildGitClientFactory(config, metricCollector);
9091

dd-java-agent/agent-ci-visibility/src/test/groovy/datadog/trace/civisibility/config/ConfigurationApiImplTest.groovy

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package datadog.trace.civisibility.config
22

33
import datadog.communication.BackendApi
4-
import datadog.communication.BackendApiFactory
54
import datadog.communication.EvpProxyApi
65
import datadog.communication.IntakeApi
76
import datadog.communication.http.HttpRetryPolicy
@@ -12,6 +11,7 @@ import datadog.trace.api.civisibility.config.TestIdentifier
1211
import datadog.trace.api.civisibility.config.TestMetadata
1312
import datadog.trace.api.civisibility.telemetry.CiVisibilityMetricCollector
1413
import datadog.trace.civisibility.CiVisibilityTestUtils
14+
import datadog.trace.api.intake.AgentlessIntake
1515
import okhttp3.HttpUrl
1616
import okhttp3.OkHttpClient
1717
import org.apache.commons.io.IOUtils
@@ -273,7 +273,7 @@ class ConfigurationApiImplTest extends Specification {
273273
}
274274

275275
private BackendApi givenIntakeApi(URI address, boolean responseCompression) {
276-
HttpUrl intakeUrl = HttpUrl.get(String.format("%s/api/%s/", address.toString(), BackendApiFactory.Intake.API.version))
276+
HttpUrl intakeUrl = HttpUrl.get(String.format("%s/api/%s/", address.toString(), AgentlessIntake.API.getVersion()))
277277

278278
String apiKey = "api-key"
279279
String traceId = "a-trace-id"

dd-java-agent/agent-logs-intake/src/main/java/datadog/trace/logging/intake/LogsWriterImpl.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,10 @@
44

55
import datadog.communication.BackendApi;
66
import datadog.communication.BackendApiFactory;
7-
import datadog.communication.BackendApiFactory.Intake;
87
import datadog.trace.api.Config;
98
import datadog.trace.api.logging.intake.LogsWriter;
109
import datadog.trace.util.AgentThreadFactory;
10+
import datadog.trace.api.intake.AgentlessIntake;
1111
import java.util.ArrayList;
1212
import java.util.HashMap;
1313
import java.util.List;
@@ -87,7 +87,7 @@ public void log(Map<String, Object> message) {
8787
}
8888

8989
private void logPollingLoop() {
90-
BackendApi backendApi = apiFactory.createBackendApi(Intake.LOGS);
90+
BackendApi backendApi = apiFactory.createBackendApi(AgentlessIntake.LOGS);
9191
LogsDispatcher logsDispatcher = new LogsDispatcher(backendApi);
9292

9393
while (!Thread.currentThread().isInterrupted()) {

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

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -640,6 +640,7 @@
640640
import datadog.trace.api.iast.IastContext;
641641
import datadog.trace.api.iast.IastDetectionMode;
642642
import datadog.trace.api.iast.telemetry.Verbosity;
643+
import datadog.trace.api.intake.AgentlessIntake;
643644
import datadog.trace.api.naming.SpanNaming;
644645
import datadog.trace.api.profiling.ProfilingEnablement;
645646
import datadog.trace.api.rum.RumInjectorConfig;
@@ -4110,19 +4111,18 @@ private String getFinalDebuggerBaseUrl() {
41104111

41114112
public String getFinalDebuggerSnapshotUrl() {
41124113
if (isCiVisibilityFailedTestReplayEnabled() && isCiVisibilityAgentlessEnabled()) {
4113-
// Used in Failed Test Replay agentless
4114-
String agentlessUrl = getCiVisibilityAgentlessUrl();
4115-
if (Strings.isBlank(agentlessUrl)) {
4116-
agentlessUrl = "https://http-intake.logs." + getSite();
4117-
}
4118-
return agentlessUrl + "/api/v2/logs";
4114+
return AgentlessIntake.LOGS.getAgentlessUrl(this) + "logs";
41194115
} else {
41204116
return getFinalDebuggerBaseUrl() + "/debugger/v1/input";
41214117
}
41224118
}
41234119

41244120
public String getFinalDebuggerSymDBUrl() {
4125-
return getFinalDebuggerBaseUrl() + "/symdb/v1/input";
4121+
if (isCiVisibilityFailedTestReplayEnabled() && isCiVisibilityAgentlessEnabled()) {
4122+
return AgentlessIntake.LOGS.getAgentlessUrl(this) + "logs";
4123+
} else {
4124+
return getFinalDebuggerBaseUrl() + "/symdb/v1/input";
4125+
}
41264126
}
41274127

41284128
public String getDynamicInstrumentationProbeFile() {
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
package datadog.trace.api.intake;
2+
3+
import datadog.trace.api.Config;
4+
import java.util.function.Function;
5+
6+
public enum AgentlessIntake {
7+
API("api", "v2", Config::isCiVisibilityAgentlessEnabled, Config::getCiVisibilityAgentlessUrl),
8+
LLMOBS_API("api", "v2", Config::isLlmObsAgentlessEnabled, Config::getLlMObsAgentlessUrl),
9+
LOGS(
10+
"http-intake.logs",
11+
"v2",
12+
Config::isAgentlessLogSubmissionEnabled,
13+
Config::getAgentlessLogSubmissionUrl);
14+
15+
public final String urlPrefix;
16+
public final String version;
17+
public final Function<Config, Boolean> agentlessModeEnabled;
18+
public final Function<Config, String> customUrl;
19+
20+
AgentlessIntake(
21+
String urlPrefix,
22+
String version,
23+
Function<Config, Boolean> agentlessModeEnabled,
24+
Function<Config, String> customUrl) {
25+
this.urlPrefix = urlPrefix;
26+
this.version = version;
27+
this.agentlessModeEnabled = agentlessModeEnabled;
28+
this.customUrl = customUrl;
29+
}
30+
31+
public String getUrlPrefix() {
32+
return urlPrefix;
33+
}
34+
35+
public String getVersion() {
36+
return version;
37+
}
38+
39+
public boolean isAgentlessEnabled(Config config) {
40+
return agentlessModeEnabled.apply(config);
41+
}
42+
43+
public String getAgentlessUrl(Config config) {
44+
String custom = customUrl.apply(config);
45+
if (custom != null && !custom.isEmpty()) {
46+
return String.format("%s/api/%s/", custom, version);
47+
} else {
48+
String site = config.getSite();
49+
return String.format("https://%s.%s/api/%s/", urlPrefix, site, version);
50+
}
51+
}
52+
}

0 commit comments

Comments
 (0)