Skip to content

Commit ae5a983

Browse files
committed
working writer
1 parent 868e8b7 commit ae5a983

File tree

11 files changed

+359
-9
lines changed

11 files changed

+359
-9
lines changed

dd-trace-api/src/main/java/datadog/trace/api/llmobs/LLMObsConstants.java

Lines changed: 0 additions & 5 deletions
This file was deleted.

dd-trace-core/build.gradle

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,7 @@ dependencies {
6868
implementation project(':components:json')
6969
implementation project(':utils:container-utils')
7070
implementation project(':utils:socket-utils')
71+
7172
// for span exception debugging
7273
compileOnly project(':dd-java-agent:agent-debugger:debugger-bootstrap')
7374

dd-trace-core/src/main/java/datadog/trace/common/writer/DDAgentWriter.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -151,6 +151,7 @@ public DDAgentWriter build() {
151151
}
152152

153153
final DDAgentMapperDiscovery mapperDiscovery = new DDAgentMapperDiscovery(featureDiscovery);
154+
154155
final PayloadDispatcher dispatcher =
155156
new PayloadDispatcherImpl(mapperDiscovery, agentApi, healthMetrics, monitoring);
156157
final TraceProcessingWorker traceProcessingWorker =

dd-trace-core/src/main/java/datadog/trace/common/writer/WriterFactory.java

Lines changed: 21 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ public static Writer createWriter(
8282

8383
// The AgentWriter doesn't support the CI Visibility protocol. If CI Visibility is
8484
// enabled, check if we can use the IntakeWriter instead.
85-
if (DD_AGENT_WRITER_TYPE.equals(configuredType) && config.isCiVisibilityEnabled()) {
85+
if (DD_AGENT_WRITER_TYPE.equals(configuredType) && (config.isCiVisibilityEnabled())) {
8686
if (featuresDiscovery.supportsEvpProxy() || config.isCiVisibilityAgentlessEnabled()) {
8787
configuredType = DD_INTAKE_WRITER_TYPE;
8888
} else {
@@ -116,6 +116,10 @@ public static Writer createWriter(
116116
builder.addTrack(TrackType.CITESTCOV, coverageApi);
117117
}
118118

119+
final RemoteApi llmobsApi =
120+
createDDIntakeRemoteApi(config, commObjects, featuresDiscovery, TrackType.LLMOBS);
121+
builder.addTrack(TrackType.LLMOBS, llmobsApi);
122+
119123
remoteWriter = builder.build();
120124

121125
} else { // configuredType == DDAgentWriter
@@ -171,20 +175,34 @@ private static RemoteApi createDDIntakeRemoteApi(
171175
SharedCommunicationObjects commObjects,
172176
DDAgentFeaturesDiscovery featuresDiscovery,
173177
TrackType trackType) {
174-
if (featuresDiscovery.supportsEvpProxy() && !config.isCiVisibilityAgentlessEnabled()) {
178+
boolean evpProxySupported = featuresDiscovery.supportsEvpProxy();
179+
boolean useProxyApi =
180+
(evpProxySupported && TrackType.LLMOBS == trackType && !config.isLlmObsAgentlessEnabled())
181+
|| (evpProxySupported
182+
&& (TrackType.CITESTCOV == trackType || TrackType.CITESTCYCLE == trackType)
183+
&& !config.isCiVisibilityAgentlessEnabled());
184+
185+
if (useProxyApi) {
175186
return DDEvpProxyApi.builder()
176187
.httpClient(commObjects.okHttpClient)
177188
.agentUrl(commObjects.agentUrl)
178189
.evpProxyEndpoint(featuresDiscovery.getEvpProxyEndpoint())
179190
.trackType(trackType)
180191
.compressionEnabled(featuresDiscovery.supportsContentEncodingHeadersWithEvpProxy())
181192
.build();
182-
183193
} else {
184194
HttpUrl hostUrl = null;
195+
String llmObsAgentlessUrl = config.getLlMObsAgentlessUrl();
196+
185197
if (config.getCiVisibilityAgentlessUrl() != null) {
186198
hostUrl = HttpUrl.get(config.getCiVisibilityAgentlessUrl());
187199
log.info("Using host URL '{}' to report CI Visibility traces in Agentless mode.", hostUrl);
200+
} else if (config.isLlmObsEnabled()
201+
&& config.isLlmObsAgentlessEnabled()
202+
&& llmObsAgentlessUrl != null
203+
&& !llmObsAgentlessUrl.isEmpty()) {
204+
hostUrl = HttpUrl.get(llmObsAgentlessUrl);
205+
log.info("Using host URL '{}' to report LLM Obs traces in Agentless mode.", hostUrl);
188206
}
189207
return DDIntakeApi.builder()
190208
.hostUrl(hostUrl)

dd-trace-core/src/main/java/datadog/trace/common/writer/ddagent/DDAgentApi.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,7 @@ public void addResponseListener(final RemoteResponseListener listener) {
9090
public Response sendSerializedTraces(final Payload payload) {
9191
final int sizeInBytes = payload.sizeInBytes();
9292
String tracesEndpoint = featuresDiscovery.getTraceEndpoint();
93+
9394
if (null == tracesEndpoint) {
9495
featuresDiscovery.discoverIfOutdated();
9596
tracesEndpoint = featuresDiscovery.getTraceEndpoint();

dd-trace-core/src/main/java/datadog/trace/common/writer/ddintake/DDIntakeApi.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -131,6 +131,7 @@ public Response sendSerializedTraces(Payload payload) {
131131
.post(payload.toRequest())
132132
.tag(OkHttpUtils.CustomListener.class, telemetryListener)
133133
.build();
134+
134135
totalTraces += payload.traceCount();
135136
receivedTraces += payload.traceCount();
136137

dd-trace-core/src/main/java/datadog/trace/common/writer/ddintake/DDIntakeMapperDiscovery.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import datadog.trace.civisibility.writer.ddintake.CiTestCycleMapperV1;
77
import datadog.trace.common.writer.RemoteMapper;
88
import datadog.trace.common.writer.RemoteMapperDiscovery;
9+
import datadog.trace.llmobs.writer.ddintake.LLMObsSpanMapper;
910

1011
/**
1112
* Mapper discovery logic when a DDIntake is used. The mapper is discovered based on a backend
@@ -40,6 +41,8 @@ public void discover() {
4041
mapper = new CiTestCycleMapperV1(wellKnownTags, compressionEnabled);
4142
} else if (TrackType.CITESTCOV.equals(trackType)) {
4243
mapper = new CiTestCovMapperV2(compressionEnabled);
44+
} else if (TrackType.LLMOBS.equals(trackType)) {
45+
mapper = new LLMObsSpanMapper();
4346
} else {
4447
mapper = RemoteMapper.NO_OP;
4548
}

0 commit comments

Comments
 (0)