|
@@ -3,7 +3,7 @@
|
|
|
* SPDX-License-Identifier: Apache-2.0
|
|
|
*/
|
|
|
|
|
|
-package io.opentelemetry.instrumentation.spring.webflux.v5_0.client;
|
|
|
+package io.opentelemetry.instrumentation.spring.webflux.v5_3.internal;
|
|
|
|
|
|
import static io.opentelemetry.instrumentation.api.instrumenter.SpanKindExtractor.alwaysClient;
|
|
|
|
|
@@ -17,59 +17,67 @@ import io.opentelemetry.instrumentation.api.instrumenter.http.HttpClientAttribut
|
|
|
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpClientMetrics;
|
|
|
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanNameExtractor;
|
|
|
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanStatusExtractor;
|
|
|
-import io.opentelemetry.instrumentation.spring.webflux.v5_0.client.internal.SpringWebfluxNetAttributesGetter;
|
|
|
+import io.opentelemetry.instrumentation.spring.webflux.v5_3.SpringWebfluxTelemetry;
|
|
|
import java.util.ArrayList;
|
|
|
import java.util.List;
|
|
|
import org.springframework.web.reactive.function.client.ClientRequest;
|
|
|
import org.springframework.web.reactive.function.client.ClientResponse;
|
|
|
|
|
|
-/** A builder of {@link SpringWebfluxTelemetry}. */
|
|
|
-public final class SpringWebfluxTelemetryBuilder {
|
|
|
+/**
|
|
|
+ * This class is internal and is hence not for public use. Its APIs are unstable and can change at
|
|
|
+ * any time.
|
|
|
+ */
|
|
|
+// client builder is separate so that it can be used by javaagent instrumentation
|
|
|
+// which supports 5.0, without triggering the server instrumentation which depends on webflux 5.3
|
|
|
+public final class SpringWebfluxTelemetryClientBuilder {
|
|
|
+ private static final String INSTRUMENTATION_NAME = "io.opentelemetry.spring-webflux-5.3";
|
|
|
|
|
|
private final OpenTelemetry openTelemetry;
|
|
|
- private final List<AttributesExtractor<ClientRequest, ClientResponse>> additionalExtractors =
|
|
|
- new ArrayList<>();
|
|
|
+ private final List<AttributesExtractor<ClientRequest, ClientResponse>>
|
|
|
+ clientAdditionalExtractors = new ArrayList<>();
|
|
|
private final HttpClientAttributesExtractorBuilder<ClientRequest, ClientResponse>
|
|
|
- httpAttributesExtractorBuilder =
|
|
|
+ httpClientAttributesExtractorBuilder =
|
|
|
HttpClientAttributesExtractor.builder(
|
|
|
- SpringWebfluxHttpAttributesGetter.INSTANCE, new SpringWebfluxNetAttributesGetter());
|
|
|
+ WebClientHttpAttributesGetter.INSTANCE, new WebClientNetAttributesGetter());
|
|
|
|
|
|
private boolean captureExperimentalSpanAttributes = false;
|
|
|
|
|
|
- SpringWebfluxTelemetryBuilder(OpenTelemetry openTelemetry) {
|
|
|
+ public SpringWebfluxTelemetryClientBuilder(OpenTelemetry openTelemetry) {
|
|
|
this.openTelemetry = openTelemetry;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* Adds an additional {@link AttributesExtractor} to invoke to set attributes to instrumented
|
|
|
- * items.
|
|
|
+ * items for WebClient.
|
|
|
*/
|
|
|
@CanIgnoreReturnValue
|
|
|
- public SpringWebfluxTelemetryBuilder addAttributesExtractor(
|
|
|
+ public SpringWebfluxTelemetryClientBuilder addClientAttributesExtractor(
|
|
|
AttributesExtractor<ClientRequest, ClientResponse> attributesExtractor) {
|
|
|
- additionalExtractors.add(attributesExtractor);
|
|
|
+ clientAdditionalExtractors.add(attributesExtractor);
|
|
|
return this;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * Configures the HTTP request headers that will be captured as span attributes.
|
|
|
+ * Configures the HTTP WebClient request headers that will be captured as span attributes.
|
|
|
*
|
|
|
* @param requestHeaders A list of HTTP header names.
|
|
|
*/
|
|
|
@CanIgnoreReturnValue
|
|
|
- public SpringWebfluxTelemetryBuilder setCapturedRequestHeaders(List<String> requestHeaders) {
|
|
|
- httpAttributesExtractorBuilder.setCapturedRequestHeaders(requestHeaders);
|
|
|
+ public SpringWebfluxTelemetryClientBuilder setCapturedClientRequestHeaders(
|
|
|
+ List<String> requestHeaders) {
|
|
|
+ httpClientAttributesExtractorBuilder.setCapturedRequestHeaders(requestHeaders);
|
|
|
return this;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * Configures the HTTP response headers that will be captured as span attributes.
|
|
|
+ * Configures the HTTP WebClient response headers that will be captured as span attributes.
|
|
|
*
|
|
|
* @param responseHeaders A list of HTTP header names.
|
|
|
*/
|
|
|
@CanIgnoreReturnValue
|
|
|
- public SpringWebfluxTelemetryBuilder setCapturedResponseHeaders(List<String> responseHeaders) {
|
|
|
- httpAttributesExtractorBuilder.setCapturedResponseHeaders(responseHeaders);
|
|
|
+ public SpringWebfluxTelemetryClientBuilder setCapturedClientResponseHeaders(
|
|
|
+ List<String> responseHeaders) {
|
|
|
+ httpClientAttributesExtractorBuilder.setCapturedResponseHeaders(responseHeaders);
|
|
|
return this;
|
|
|
}
|
|
|
|
|
@@ -79,7 +87,7 @@ public final class SpringWebfluxTelemetryBuilder {
|
|
|
* this instrumentation to be stable across versions.
|
|
|
*/
|
|
|
@CanIgnoreReturnValue
|
|
|
- public SpringWebfluxTelemetryBuilder setCaptureExperimentalSpanAttributes(
|
|
|
+ public SpringWebfluxTelemetryClientBuilder setCaptureExperimentalSpanAttributes(
|
|
|
boolean captureExperimentalSpanAttributes) {
|
|
|
this.captureExperimentalSpanAttributes = captureExperimentalSpanAttributes;
|
|
|
return this;
|
|
@@ -87,30 +95,27 @@ public final class SpringWebfluxTelemetryBuilder {
|
|
|
|
|
|
/**
|
|
|
* Returns a new {@link SpringWebfluxTelemetry} with the settings of this {@link
|
|
|
- * SpringWebfluxTelemetryBuilder}.
|
|
|
+ * SpringWebfluxTelemetryClientBuilder}.
|
|
|
*/
|
|
|
- public SpringWebfluxTelemetry build() {
|
|
|
- SpringWebfluxHttpAttributesGetter httpAttributesGetter =
|
|
|
- SpringWebfluxHttpAttributesGetter.INSTANCE;
|
|
|
+ public Instrumenter<ClientRequest, ClientResponse> build() {
|
|
|
+ WebClientHttpAttributesGetter httpClientAttributesGetter =
|
|
|
+ WebClientHttpAttributesGetter.INSTANCE;
|
|
|
|
|
|
- InstrumenterBuilder<ClientRequest, ClientResponse> builder =
|
|
|
+ InstrumenterBuilder<ClientRequest, ClientResponse> clientBuilder =
|
|
|
Instrumenter.<ClientRequest, ClientResponse>builder(
|
|
|
openTelemetry,
|
|
|
- "io.opentelemetry.spring-webflux-5.0",
|
|
|
- HttpSpanNameExtractor.create(httpAttributesGetter))
|
|
|
- .setSpanStatusExtractor(HttpSpanStatusExtractor.create(httpAttributesGetter))
|
|
|
- .addAttributesExtractor(httpAttributesExtractorBuilder.build())
|
|
|
- .addAttributesExtractors(additionalExtractors)
|
|
|
+ INSTRUMENTATION_NAME,
|
|
|
+ HttpSpanNameExtractor.create(httpClientAttributesGetter))
|
|
|
+ .setSpanStatusExtractor(HttpSpanStatusExtractor.create(httpClientAttributesGetter))
|
|
|
+ .addAttributesExtractor(httpClientAttributesExtractorBuilder.build())
|
|
|
+ .addAttributesExtractors(clientAdditionalExtractors)
|
|
|
.addOperationMetrics(HttpClientMetrics.get());
|
|
|
|
|
|
if (captureExperimentalSpanAttributes) {
|
|
|
- builder.addAttributesExtractor(new SpringWebfluxExperimentalAttributesExtractor());
|
|
|
+ clientBuilder.addAttributesExtractor(new WebClientExperimentalAttributesExtractor());
|
|
|
}
|
|
|
|
|
|
// headers are injected elsewhere; ClientRequest is immutable
|
|
|
- Instrumenter<ClientRequest, ClientResponse> instrumenter =
|
|
|
- builder.buildInstrumenter(alwaysClient());
|
|
|
-
|
|
|
- return new SpringWebfluxTelemetry(instrumenter, openTelemetry.getPropagators());
|
|
|
+ return clientBuilder.buildInstrumenter(alwaysClient());
|
|
|
}
|
|
|
}
|