Skip to content

Commit a3eb733

Browse files
Do not switch to agent telemetry client on detecting agent telemetry endpoint availability when intake client is preferred (#6644)
1 parent 80420af commit a3eb733

2 files changed

Lines changed: 57 additions & 7 deletions

File tree

telemetry/src/main/java/datadog/telemetry/TelemetryRouter.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,8 @@ public class TelemetryRouter {
1212

1313
private final DDAgentFeaturesDiscovery ddAgentFeaturesDiscovery;
1414
private final TelemetryClient agentClient;
15-
1615
private final TelemetryClient intakeClient;
17-
16+
private final boolean useIntakeClientByDefault;
1817
private TelemetryClient currentClient;
1918
private boolean errorReported;
2019

@@ -26,6 +25,7 @@ public TelemetryRouter(
2625
this.ddAgentFeaturesDiscovery = ddAgentFeaturesDiscovery;
2726
this.agentClient = agentClient;
2827
this.intakeClient = intakeClient;
28+
this.useIntakeClientByDefault = useIntakeClientByDefault;
2929
this.currentClient = useIntakeClientByDefault ? intakeClient : agentClient;
3030
}
3131

@@ -50,12 +50,12 @@ public TelemetryClient.Result sendRequest(TelemetryRequest request) {
5050
if (requestFailed) {
5151
reportErrorOnce(currentClient.getUrl(), result);
5252
}
53-
if (agentSupportsTelemetryProxy || requestFailed) {
53+
if ((agentSupportsTelemetryProxy && !useIntakeClientByDefault) || requestFailed) {
5454
errorReported = false;
55-
if (agentSupportsTelemetryProxy) {
56-
log.info("Agent Telemetry endpoint is now available. Telemetry will be sent to Agent.");
57-
} else {
55+
if (requestFailed) {
5856
log.info("Intake Telemetry endpoint failed. Telemetry will be sent to Agent.");
57+
} else {
58+
log.info("Agent Telemetry endpoint is now available. Telemetry will be sent to Agent.");
5959
}
6060
currentClient = agentClient;
6161
}

telemetry/src/test/groovy/datadog/telemetry/TelemetryRouterSpecification.groovy

Lines changed: 51 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -130,7 +130,7 @@ class TelemetryRouterSpecification extends Specification {
130130
500 | _
131131
}
132132

133-
def 'use Intake client from the start if configured to do so'() {
133+
def 'when configured to prefer Intake: use Intake client from the start'() {
134134
Request request
135135

136136
setup:
@@ -147,6 +147,56 @@ class TelemetryRouterSpecification extends Specification {
147147
request.header(apiKeyHeader) == apiKey
148148
}
149149

150+
def 'when configured to prefer Intake: do not switch to Agent if Intake request succeeds, even if Agent supports telemetry proxy'() {
151+
Request request
152+
153+
setup:
154+
def telemetryRouter = new TelemetryRouter(ddAgentFeaturesDiscovery, agentTelemetryClient, intakeTelemetryClient, true)
155+
156+
when:
157+
telemetryRouter.sendRequest(dummyRequest())
158+
159+
then:
160+
1 * ddAgentFeaturesDiscovery.discoverIfOutdated()
161+
1 * ddAgentFeaturesDiscovery.supportsTelemetryProxy() >> true
162+
1 * okHttpClient.newCall(_) >> { args -> request = args[0]; mockResponse(200) }
163+
request.url() == intakeUrl
164+
request.header(apiKeyHeader) == apiKey
165+
166+
when:
167+
telemetryRouter.sendRequest(dummyRequest())
168+
169+
then:
170+
1 * okHttpClient.newCall(_) >> { args -> request = args[0]; mockResponse(200) }
171+
request.url() == intakeUrl
172+
request.header(apiKeyHeader) == apiKey
173+
}
174+
175+
def 'when configured to prefer Intake: switch to Agent if Intake request fails'() {
176+
Request request
177+
178+
setup:
179+
def telemetryRouter = new TelemetryRouter(ddAgentFeaturesDiscovery, agentTelemetryClient, intakeTelemetryClient, true)
180+
181+
when:
182+
telemetryRouter.sendRequest(dummyRequest())
183+
184+
then:
185+
1 * ddAgentFeaturesDiscovery.discoverIfOutdated()
186+
1 * ddAgentFeaturesDiscovery.supportsTelemetryProxy() >> true
187+
1 * okHttpClient.newCall(_) >> { args -> request = args[0]; mockResponse(403) }
188+
request.url() == intakeUrl
189+
request.header(apiKeyHeader) == apiKey
190+
191+
when:
192+
telemetryRouter.sendRequest(dummyRequest())
193+
194+
then:
195+
1 * okHttpClient.newCall(_) >> { args -> request = args[0]; mockResponse(200) }
196+
request.url() == agentTelemetryUrl
197+
request.header(apiKeyHeader) == null
198+
}
199+
150200
def 'do not switch to Intake when Agent stops supporting telemetry proxy but accepts telemetry requests'() {
151201
Request request
152202

0 commit comments

Comments
 (0)