From a6f5ac845786ee07415093edfa37821f66ebe841 Mon Sep 17 00:00:00 2001 From: Mateusz Rzeszutek Date: Fri, 11 Feb 2022 09:51:35 +0100 Subject: [PATCH 1/3] Add builders for setting optional attributes on HTTP extractors --- .../instrumenter/InstrumenterBenchmark.java | 5 ++- .../http/HttpClientAttributesExtractor.java | 19 ++++++--- .../HttpClientAttributesExtractorBuilder.java | 39 +++++++++++++++++++ .../http/HttpServerAttributesExtractor.java | 24 +++++++++--- .../HttpServerAttributesExtractorBuilder.java | 39 +++++++++++++++++++ .../HttpClientAttributesExtractorTest.java | 15 ++++--- .../HttpServerAttributesExtractorTest.java | 5 ++- .../v4_3/ApacheHttpClientTracingBuilder.java | 4 +- .../armeria/v1_3/ArmeriaTracingBuilder.java | 8 +++- .../JettyClientInstrumenterBuilder.java | 4 +- .../ktor/v1_0/KtorServerTracing.kt | 2 +- .../okhttp/v3_0/OkHttpTracingBuilder.java | 4 +- .../ratpack/RatpackTracingBuilder.java | 8 +++- .../restlet/v1_0/RestletTracingBuilder.java | 4 +- .../internal/RestletInstrumenterFactory.java | 4 +- .../spring/web/SpringWebTracingBuilder.java | 4 +- .../client/SpringWebfluxTracingBuilder.java | 4 +- .../webmvc/SpringWebMvcTracingBuilder.java | 4 +- 18 files changed, 163 insertions(+), 33 deletions(-) create mode 100644 instrumentation-api/src/main/java/io/opentelemetry/instrumentation/api/instrumenter/http/HttpClientAttributesExtractorBuilder.java create mode 100644 instrumentation-api/src/main/java/io/opentelemetry/instrumentation/api/instrumenter/http/HttpServerAttributesExtractorBuilder.java diff --git a/instrumentation-api/src/jmh/java/io/opentelemetry/instrumentation/api/instrumenter/InstrumenterBenchmark.java b/instrumentation-api/src/jmh/java/io/opentelemetry/instrumentation/api/instrumenter/InstrumenterBenchmark.java index a483f4638b92..88d0754772a5 100644 --- a/instrumentation-api/src/jmh/java/io/opentelemetry/instrumentation/api/instrumenter/InstrumenterBenchmark.java +++ b/instrumentation-api/src/jmh/java/io/opentelemetry/instrumentation/api/instrumenter/InstrumenterBenchmark.java @@ -43,8 +43,9 @@ public class InstrumenterBenchmark { "benchmark", HttpSpanNameExtractor.create(ConstantHttpAttributesGetter.INSTANCE)) .addAttributesExtractor( - HttpClientAttributesExtractor.create( - ConstantHttpAttributesGetter.INSTANCE, CapturedHttpHeaders.empty())) + HttpClientAttributesExtractor.builder(ConstantHttpAttributesGetter.INSTANCE) + .captureHttpHeaders(CapturedHttpHeaders.empty()) + .build()) .addAttributesExtractor( NetServerAttributesExtractor.create(new ConstantNetAttributesGetter())) .newInstrumenter(); diff --git a/instrumentation-api/src/main/java/io/opentelemetry/instrumentation/api/instrumenter/http/HttpClientAttributesExtractor.java b/instrumentation-api/src/main/java/io/opentelemetry/instrumentation/api/instrumenter/http/HttpClientAttributesExtractor.java index e2226a38dfa4..4ef3936ec3e4 100644 --- a/instrumentation-api/src/main/java/io/opentelemetry/instrumentation/api/instrumenter/http/HttpClientAttributesExtractor.java +++ b/instrumentation-api/src/main/java/io/opentelemetry/instrumentation/api/instrumenter/http/HttpClientAttributesExtractor.java @@ -7,7 +7,6 @@ import io.opentelemetry.api.common.AttributesBuilder; import io.opentelemetry.context.Context; -import io.opentelemetry.instrumentation.api.config.Config; import io.opentelemetry.semconv.trace.attributes.SemanticAttributes; import javax.annotation.Nullable; @@ -27,23 +26,33 @@ public final class HttpClientAttributesExtractor /** Creates the HTTP client attributes extractor with default configuration. */ public static HttpClientAttributesExtractor create( HttpClientAttributesGetter getter) { - return create(getter, CapturedHttpHeaders.client(Config.get())); + return builder(getter).build(); + } + + /** + * Returns a new {@link HttpClientAttributesExtractorBuilder} that can be used to configure the + * HTTP client attributes extractor. + */ + public static HttpClientAttributesExtractorBuilder builder( + HttpClientAttributesGetter getter) { + return new HttpClientAttributesExtractorBuilder<>(getter); } - // TODO: there should be a builder for all optional attributes /** * Creates the HTTP client attributes extractor. * * @param capturedHttpHeaders A configuration object specifying which HTTP request and response * headers should be captured as span attributes. + * @deprecated Use {@link #builder(HttpClientAttributesGetter)} instead. */ + @Deprecated public static HttpClientAttributesExtractor create( HttpClientAttributesGetter getter, CapturedHttpHeaders capturedHttpHeaders) { - return new HttpClientAttributesExtractor<>(getter, capturedHttpHeaders); + return builder(getter).captureHttpHeaders(capturedHttpHeaders).build(); } - private HttpClientAttributesExtractor( + HttpClientAttributesExtractor( HttpClientAttributesGetter getter, CapturedHttpHeaders capturedHttpHeaders) { super(getter, capturedHttpHeaders); diff --git a/instrumentation-api/src/main/java/io/opentelemetry/instrumentation/api/instrumenter/http/HttpClientAttributesExtractorBuilder.java b/instrumentation-api/src/main/java/io/opentelemetry/instrumentation/api/instrumenter/http/HttpClientAttributesExtractorBuilder.java new file mode 100644 index 000000000000..3ca17a3b99b6 --- /dev/null +++ b/instrumentation-api/src/main/java/io/opentelemetry/instrumentation/api/instrumenter/http/HttpClientAttributesExtractorBuilder.java @@ -0,0 +1,39 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.instrumentation.api.instrumenter.http; + +import io.opentelemetry.instrumentation.api.config.Config; + +/** A builder of {@link HttpClientAttributesExtractor}. */ +public final class HttpClientAttributesExtractorBuilder { + + final HttpClientAttributesGetter getter; + CapturedHttpHeaders capturedHttpHeaders = CapturedHttpHeaders.client(Config.get()); + + HttpClientAttributesExtractorBuilder(HttpClientAttributesGetter getter) { + this.getter = getter; + } + + /** + * Configures the HTTP headers that will be captured as span attributes. + * + * @param capturedHttpHeaders A configuration object specifying which HTTP request and response + * headers should be captured as span attributes. + */ + public HttpClientAttributesExtractorBuilder captureHttpHeaders( + CapturedHttpHeaders capturedHttpHeaders) { + this.capturedHttpHeaders = capturedHttpHeaders; + return this; + } + + /** + * Returns a new {@link HttpClientAttributesExtractor} with the settings of this {@link + * HttpClientAttributesExtractorBuilder}. + */ + public HttpClientAttributesExtractor build() { + return new HttpClientAttributesExtractor<>(getter, capturedHttpHeaders); + } +} diff --git a/instrumentation-api/src/main/java/io/opentelemetry/instrumentation/api/instrumenter/http/HttpServerAttributesExtractor.java b/instrumentation-api/src/main/java/io/opentelemetry/instrumentation/api/instrumenter/http/HttpServerAttributesExtractor.java index 1df6832d0545..9598e0228c4d 100644 --- a/instrumentation-api/src/main/java/io/opentelemetry/instrumentation/api/instrumenter/http/HttpServerAttributesExtractor.java +++ b/instrumentation-api/src/main/java/io/opentelemetry/instrumentation/api/instrumenter/http/HttpServerAttributesExtractor.java @@ -12,7 +12,6 @@ import io.opentelemetry.api.common.AttributesBuilder; import io.opentelemetry.context.Context; -import io.opentelemetry.instrumentation.api.config.Config; import io.opentelemetry.semconv.trace.attributes.SemanticAttributes; import java.util.function.Function; import javax.annotation.Nullable; @@ -33,25 +32,40 @@ public final class HttpServerAttributesExtractor /** Creates the HTTP server attributes extractor with default configuration. */ public static HttpServerAttributesExtractor create( HttpServerAttributesGetter getter) { - return create(getter, CapturedHttpHeaders.server(Config.get())); + return builder(getter).build(); + } + + /** + * Returns a new {@link HttpServerAttributesExtractorBuilder} that can be used to configure the + * HTTP client attributes extractor. + */ + public static HttpServerAttributesExtractorBuilder builder( + HttpServerAttributesGetter getter) { + return new HttpServerAttributesExtractorBuilder<>(getter); } - // TODO: there should be a builder for all optional attributes /** * Creates the HTTP server attributes extractor. * * @param capturedHttpHeaders A configuration object specifying which HTTP request and response * headers should be captured as span attributes. + * @deprecated Use {@link #builder(HttpServerAttributesGetter)} instead. */ + @Deprecated public static HttpServerAttributesExtractor create( HttpServerAttributesGetter getter, CapturedHttpHeaders capturedHttpHeaders) { - return new HttpServerAttributesExtractor<>( - getter, capturedHttpHeaders, HttpRouteHolder::getRoute); + return builder(getter).captureHttpHeaders(capturedHttpHeaders).build(); } private final Function httpRouteHolderGetter; + HttpServerAttributesExtractor( + HttpServerAttributesGetter getter, + CapturedHttpHeaders capturedHttpHeaders) { + this(getter, capturedHttpHeaders, HttpRouteHolder::getRoute); + } + // visible for tests HttpServerAttributesExtractor( HttpServerAttributesGetter getter, diff --git a/instrumentation-api/src/main/java/io/opentelemetry/instrumentation/api/instrumenter/http/HttpServerAttributesExtractorBuilder.java b/instrumentation-api/src/main/java/io/opentelemetry/instrumentation/api/instrumenter/http/HttpServerAttributesExtractorBuilder.java new file mode 100644 index 000000000000..eaae118b78c8 --- /dev/null +++ b/instrumentation-api/src/main/java/io/opentelemetry/instrumentation/api/instrumenter/http/HttpServerAttributesExtractorBuilder.java @@ -0,0 +1,39 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.instrumentation.api.instrumenter.http; + +import io.opentelemetry.instrumentation.api.config.Config; + +/** A builder of {@link HttpServerAttributesExtractor}. */ +public final class HttpServerAttributesExtractorBuilder { + + final HttpServerAttributesGetter getter; + CapturedHttpHeaders capturedHttpHeaders = CapturedHttpHeaders.server(Config.get()); + + HttpServerAttributesExtractorBuilder(HttpServerAttributesGetter getter) { + this.getter = getter; + } + + /** + * Configures the HTTP headers that will be captured as span attributes. + * + * @param capturedHttpHeaders A configuration object specifying which HTTP request and response + * headers should be captured as span attributes. + */ + public HttpServerAttributesExtractorBuilder captureHttpHeaders( + CapturedHttpHeaders capturedHttpHeaders) { + this.capturedHttpHeaders = capturedHttpHeaders; + return this; + } + + /** + * Returns a new {@link HttpServerAttributesExtractor} with the settings of this {@link + * HttpServerAttributesExtractorBuilder}. + */ + public HttpServerAttributesExtractor build() { + return new HttpServerAttributesExtractor<>(getter, capturedHttpHeaders); + } +} diff --git a/instrumentation-api/src/test/java/io/opentelemetry/instrumentation/api/instrumenter/http/HttpClientAttributesExtractorTest.java b/instrumentation-api/src/test/java/io/opentelemetry/instrumentation/api/instrumenter/http/HttpClientAttributesExtractorTest.java index 3b6a7189686a..6bdfe7f4b7f0 100644 --- a/instrumentation-api/src/test/java/io/opentelemetry/instrumentation/api/instrumenter/http/HttpClientAttributesExtractorTest.java +++ b/instrumentation-api/src/test/java/io/opentelemetry/instrumentation/api/instrumenter/http/HttpClientAttributesExtractorTest.java @@ -104,10 +104,12 @@ void normal() { response.put("header.custom-response-header", "654,321"); HttpClientAttributesExtractor, Map> extractor = - HttpClientAttributesExtractor.create( - new TestHttpClientAttributesGetter(), - CapturedHttpHeaders.create( - singletonList("Custom-Request-Header"), singletonList("Custom-Response-Header"))); + HttpClientAttributesExtractor.builder(new TestHttpClientAttributesGetter()) + .captureHttpHeaders( + CapturedHttpHeaders.create( + singletonList("Custom-Request-Header"), + singletonList("Custom-Response-Header"))) + .build(); AttributesBuilder attributes = Attributes.builder(); extractor.onStart(attributes, Context.root(), request); @@ -148,8 +150,9 @@ void invalidStatusCode() { response.put("statusCode", "0"); HttpClientAttributesExtractor, Map> extractor = - HttpClientAttributesExtractor.create( - new TestHttpClientAttributesGetter(), CapturedHttpHeaders.empty()); + HttpClientAttributesExtractor.builder(new TestHttpClientAttributesGetter()) + .captureHttpHeaders(CapturedHttpHeaders.empty()) + .build(); AttributesBuilder attributes = Attributes.builder(); extractor.onStart(attributes, Context.root(), request); diff --git a/instrumentation-api/src/test/java/io/opentelemetry/instrumentation/api/instrumenter/http/HttpServerAttributesExtractorTest.java b/instrumentation-api/src/test/java/io/opentelemetry/instrumentation/api/instrumenter/http/HttpServerAttributesExtractorTest.java index 8303d6bb52e0..cc2c4c1d376e 100644 --- a/instrumentation-api/src/test/java/io/opentelemetry/instrumentation/api/instrumenter/http/HttpServerAttributesExtractorTest.java +++ b/instrumentation-api/src/test/java/io/opentelemetry/instrumentation/api/instrumenter/http/HttpServerAttributesExtractorTest.java @@ -184,8 +184,9 @@ void extractClientIpFromX_Forwarded_For() { request.put("header.x-forwarded-for", "1.1.1.1"); HttpServerAttributesExtractor, Map> extractor = - HttpServerAttributesExtractor.create( - new TestHttpServerAttributesExtractor(), CapturedHttpHeaders.empty()); + HttpServerAttributesExtractor.builder(new TestHttpServerAttributesExtractor()) + .captureHttpHeaders(CapturedHttpHeaders.empty()) + .build(); AttributesBuilder attributes = Attributes.builder(); extractor.onStart(attributes, Context.root(), request); diff --git a/instrumentation/apache-httpclient/apache-httpclient-4.3/library/src/main/java/io/opentelemetry/instrumentation/apachehttpclient/v4_3/ApacheHttpClientTracingBuilder.java b/instrumentation/apache-httpclient/apache-httpclient-4.3/library/src/main/java/io/opentelemetry/instrumentation/apachehttpclient/v4_3/ApacheHttpClientTracingBuilder.java index 79dacf8760e1..3d6598e1ffea 100644 --- a/instrumentation/apache-httpclient/apache-httpclient-4.3/library/src/main/java/io/opentelemetry/instrumentation/apachehttpclient/v4_3/ApacheHttpClientTracingBuilder.java +++ b/instrumentation/apache-httpclient/apache-httpclient-4.3/library/src/main/java/io/opentelemetry/instrumentation/apachehttpclient/v4_3/ApacheHttpClientTracingBuilder.java @@ -75,7 +75,9 @@ public ApacheHttpClientTracing build() { HttpSpanNameExtractor.create(httpAttributesGetter)) .setSpanStatusExtractor(HttpSpanStatusExtractor.create(httpAttributesGetter)) .addAttributesExtractor( - HttpClientAttributesExtractor.create(httpAttributesGetter, capturedHttpHeaders)) + HttpClientAttributesExtractor.builder(httpAttributesGetter) + .captureHttpHeaders(capturedHttpHeaders) + .build()) .addAttributesExtractor(NetClientAttributesExtractor.create(netAttributesGetter)) .addAttributesExtractors(additionalExtractors) // We manually inject because we need to inject internal requests for redirects. diff --git a/instrumentation/armeria-1.3/library/src/main/java/io/opentelemetry/instrumentation/armeria/v1_3/ArmeriaTracingBuilder.java b/instrumentation/armeria-1.3/library/src/main/java/io/opentelemetry/instrumentation/armeria/v1_3/ArmeriaTracingBuilder.java index 59431998572b..d11ae9f81901 100644 --- a/instrumentation/armeria-1.3/library/src/main/java/io/opentelemetry/instrumentation/armeria/v1_3/ArmeriaTracingBuilder.java +++ b/instrumentation/armeria-1.3/library/src/main/java/io/opentelemetry/instrumentation/armeria/v1_3/ArmeriaTracingBuilder.java @@ -135,7 +135,9 @@ public ArmeriaTracing build() { HttpSpanStatusExtractor.create(clientAttributesGetter))) .addAttributesExtractor(netClientAttributesExtractor) .addAttributesExtractor( - HttpClientAttributesExtractor.create(clientAttributesGetter, capturedHttpClientHeaders)) + HttpClientAttributesExtractor.builder(clientAttributesGetter) + .captureHttpHeaders(capturedHttpClientHeaders) + .build()) .addRequestMetrics(HttpClientMetrics.get()); serverInstrumenterBuilder .setSpanStatusExtractor( @@ -144,7 +146,9 @@ public ArmeriaTracing build() { .addAttributesExtractor( NetServerAttributesExtractor.create(new ArmeriaNetServerAttributesGetter())) .addAttributesExtractor( - HttpServerAttributesExtractor.create(serverAttributesGetter, capturedHttpServerHeaders)) + HttpServerAttributesExtractor.builder(serverAttributesGetter) + .captureHttpHeaders(capturedHttpServerHeaders) + .build()) .addRequestMetrics(HttpServerMetrics.get()) .addContextCustomizer(HttpRouteHolder.get()); diff --git a/instrumentation/jetty-httpclient/jetty-httpclient-9.2/library/src/main/java/io/opentelemetry/instrumentation/jetty/httpclient/v9_2/internal/JettyClientInstrumenterBuilder.java b/instrumentation/jetty-httpclient/jetty-httpclient-9.2/library/src/main/java/io/opentelemetry/instrumentation/jetty/httpclient/v9_2/internal/JettyClientInstrumenterBuilder.java index 28a478b300a6..41e825ff9ba4 100644 --- a/instrumentation/jetty-httpclient/jetty-httpclient-9.2/library/src/main/java/io/opentelemetry/instrumentation/jetty/httpclient/v9_2/internal/JettyClientInstrumenterBuilder.java +++ b/instrumentation/jetty-httpclient/jetty-httpclient-9.2/library/src/main/java/io/opentelemetry/instrumentation/jetty/httpclient/v9_2/internal/JettyClientInstrumenterBuilder.java @@ -61,7 +61,9 @@ public Instrumenter build() { HttpSpanNameExtractor.create(httpAttributesGetter)) .setSpanStatusExtractor(HttpSpanStatusExtractor.create(httpAttributesGetter)) .addAttributesExtractor( - HttpClientAttributesExtractor.create(httpAttributesGetter, capturedHttpHeaders)) + HttpClientAttributesExtractor.builder(httpAttributesGetter) + .captureHttpHeaders(capturedHttpHeaders) + .build()) .addAttributesExtractor(NetClientAttributesExtractor.create(netAttributesGetter)) .addAttributesExtractors(additionalExtractors) .addRequestMetrics(HttpClientMetrics.get()) diff --git a/instrumentation/ktor-1.0/library/src/main/kotlin/io/opentelemetry/instrumentation/ktor/v1_0/KtorServerTracing.kt b/instrumentation/ktor-1.0/library/src/main/kotlin/io/opentelemetry/instrumentation/ktor/v1_0/KtorServerTracing.kt index 04495eb57b05..870e4003ba1d 100644 --- a/instrumentation/ktor-1.0/library/src/main/kotlin/io/opentelemetry/instrumentation/ktor/v1_0/KtorServerTracing.kt +++ b/instrumentation/ktor-1.0/library/src/main/kotlin/io/opentelemetry/instrumentation/ktor/v1_0/KtorServerTracing.kt @@ -102,7 +102,7 @@ class KtorServerTracing private constructor( with(instrumenterBuilder) { setSpanStatusExtractor(configuration.statusExtractor(HttpSpanStatusExtractor.create(httpAttributesGetter))) addAttributesExtractor(NetServerAttributesExtractor.create(KtorNetServerAttributesGetter())) - addAttributesExtractor(HttpServerAttributesExtractor.create(httpAttributesGetter, configuration.capturedHttpHeaders)) + addAttributesExtractor(HttpServerAttributesExtractor.builder(httpAttributesGetter).captureHttpHeaders(configuration.capturedHttpHeaders).build()) addRequestMetrics(HttpServerMetrics.get()) addContextCustomizer(HttpRouteHolder.get()) } diff --git a/instrumentation/okhttp/okhttp-3.0/library/src/main/java/io/opentelemetry/instrumentation/okhttp/v3_0/OkHttpTracingBuilder.java b/instrumentation/okhttp/okhttp-3.0/library/src/main/java/io/opentelemetry/instrumentation/okhttp/v3_0/OkHttpTracingBuilder.java index 95f65fb45ab9..2c0a2dba32d2 100644 --- a/instrumentation/okhttp/okhttp-3.0/library/src/main/java/io/opentelemetry/instrumentation/okhttp/v3_0/OkHttpTracingBuilder.java +++ b/instrumentation/okhttp/okhttp-3.0/library/src/main/java/io/opentelemetry/instrumentation/okhttp/v3_0/OkHttpTracingBuilder.java @@ -70,7 +70,9 @@ public OkHttpTracing build() { HttpSpanNameExtractor.create(httpAttributesGetter)) .setSpanStatusExtractor(HttpSpanStatusExtractor.create(httpAttributesGetter)) .addAttributesExtractor( - HttpClientAttributesExtractor.create(httpAttributesGetter, capturedHttpHeaders)) + HttpClientAttributesExtractor.builder(httpAttributesGetter) + .captureHttpHeaders(capturedHttpHeaders) + .build()) .addAttributesExtractor(NetClientAttributesExtractor.create(attributesGetter)) .addAttributesExtractors(additionalExtractors) .addRequestMetrics(HttpClientMetrics.get()) diff --git a/instrumentation/ratpack/ratpack-1.7/library/src/main/java/io/opentelemetry/instrumentation/ratpack/RatpackTracingBuilder.java b/instrumentation/ratpack/ratpack-1.7/library/src/main/java/io/opentelemetry/instrumentation/ratpack/RatpackTracingBuilder.java index bc4b57b4c09c..5d4907bdf5d3 100644 --- a/instrumentation/ratpack/ratpack-1.7/library/src/main/java/io/opentelemetry/instrumentation/ratpack/RatpackTracingBuilder.java +++ b/instrumentation/ratpack/ratpack-1.7/library/src/main/java/io/opentelemetry/instrumentation/ratpack/RatpackTracingBuilder.java @@ -111,7 +111,9 @@ public RatpackTracing build() { .setSpanStatusExtractor(HttpSpanStatusExtractor.create(httpAttributes)) .addAttributesExtractor(NetServerAttributesExtractor.create(netAttributes)) .addAttributesExtractor( - HttpServerAttributesExtractor.create(httpAttributes, capturedHttpServerHeaders)) + HttpServerAttributesExtractor.builder(httpAttributes) + .captureHttpHeaders(capturedHttpServerHeaders) + .build()) .addAttributesExtractors(additionalExtractors) .addRequestMetrics(HttpServerMetrics.get()) .newServerInstrumenter(RatpackGetter.INSTANCE); @@ -128,7 +130,9 @@ private Instrumenter httpClientInstrumenter() { .setSpanStatusExtractor(HttpSpanStatusExtractor.create(httpAttributes)) .addAttributesExtractor(NetClientAttributesExtractor.create(netAttributes)) .addAttributesExtractor( - HttpClientAttributesExtractor.create(httpAttributes, capturedHttpClientHeaders)) + HttpClientAttributesExtractor.builder(httpAttributes) + .captureHttpHeaders(capturedHttpClientHeaders) + .build()) .addAttributesExtractors(additionalHttpClientExtractors) .addRequestMetrics(HttpServerMetrics.get()) .newClientInstrumenter(RequestHeaderSetter.INSTANCE); diff --git a/instrumentation/restlet/restlet-1.0/library/src/main/java/io/opentelemetry/instrumentation/restlet/v1_0/RestletTracingBuilder.java b/instrumentation/restlet/restlet-1.0/library/src/main/java/io/opentelemetry/instrumentation/restlet/v1_0/RestletTracingBuilder.java index b6d2a2a1fe4a..f91278ab411d 100644 --- a/instrumentation/restlet/restlet-1.0/library/src/main/java/io/opentelemetry/instrumentation/restlet/v1_0/RestletTracingBuilder.java +++ b/instrumentation/restlet/restlet-1.0/library/src/main/java/io/opentelemetry/instrumentation/restlet/v1_0/RestletTracingBuilder.java @@ -70,7 +70,9 @@ public RestletTracing build() { HttpSpanNameExtractor.create(httpAttributesGetter)) .setSpanStatusExtractor(HttpSpanStatusExtractor.create(httpAttributesGetter)) .addAttributesExtractor( - HttpServerAttributesExtractor.create(httpAttributesGetter, capturedHttpHeaders)) + HttpServerAttributesExtractor.builder(httpAttributesGetter) + .captureHttpHeaders(capturedHttpHeaders) + .build()) .addAttributesExtractor(NetServerAttributesExtractor.create(netAttributesGetter)) .addAttributesExtractors(additionalExtractors) .addRequestMetrics(HttpServerMetrics.get()) diff --git a/instrumentation/restlet/restlet-2.0/library/src/main/java/io/opentelemetry/instrumentation/restlet/v2_0/internal/RestletInstrumenterFactory.java b/instrumentation/restlet/restlet-2.0/library/src/main/java/io/opentelemetry/instrumentation/restlet/v2_0/internal/RestletInstrumenterFactory.java index 85001ca82b4f..a0efa3f7b39c 100644 --- a/instrumentation/restlet/restlet-2.0/library/src/main/java/io/opentelemetry/instrumentation/restlet/v2_0/internal/RestletInstrumenterFactory.java +++ b/instrumentation/restlet/restlet-2.0/library/src/main/java/io/opentelemetry/instrumentation/restlet/v2_0/internal/RestletInstrumenterFactory.java @@ -45,7 +45,9 @@ public static Instrumenter newServerInstrumenter( openTelemetry, INSTRUMENTATION_NAME, HttpSpanNameExtractor.create(httpAttributesGetter)) .setSpanStatusExtractor(HttpSpanStatusExtractor.create(httpAttributesGetter)) .addAttributesExtractor( - HttpServerAttributesExtractor.create(httpAttributesGetter, capturedHttpHeaders)) + HttpServerAttributesExtractor.builder(httpAttributesGetter) + .captureHttpHeaders(capturedHttpHeaders) + .build()) .addAttributesExtractor(NetServerAttributesExtractor.create(netAttributesGetter)) .addAttributesExtractors(additionalExtractors) .addRequestMetrics(HttpServerMetrics.get()) diff --git a/instrumentation/spring/spring-web-3.1/library/src/main/java/io/opentelemetry/instrumentation/spring/web/SpringWebTracingBuilder.java b/instrumentation/spring/spring-web-3.1/library/src/main/java/io/opentelemetry/instrumentation/spring/web/SpringWebTracingBuilder.java index e128dbe24540..5315067f0136 100644 --- a/instrumentation/spring/spring-web-3.1/library/src/main/java/io/opentelemetry/instrumentation/spring/web/SpringWebTracingBuilder.java +++ b/instrumentation/spring/spring-web-3.1/library/src/main/java/io/opentelemetry/instrumentation/spring/web/SpringWebTracingBuilder.java @@ -70,7 +70,9 @@ public SpringWebTracing build() { HttpSpanNameExtractor.create(httpAttributeGetter)) .setSpanStatusExtractor(HttpSpanStatusExtractor.create(httpAttributeGetter)) .addAttributesExtractor( - HttpClientAttributesExtractor.create(httpAttributeGetter, capturedHttpHeaders)) + HttpClientAttributesExtractor.builder(httpAttributeGetter) + .captureHttpHeaders(capturedHttpHeaders) + .build()) .addAttributesExtractor(NetClientAttributesExtractor.create(netAttributesGetter)) .addAttributesExtractors(additionalExtractors) .addRequestMetrics(HttpClientMetrics.get()) diff --git a/instrumentation/spring/spring-webflux-5.0/library/src/main/java/io/opentelemetry/instrumentation/spring/webflux/client/SpringWebfluxTracingBuilder.java b/instrumentation/spring/spring-webflux-5.0/library/src/main/java/io/opentelemetry/instrumentation/spring/webflux/client/SpringWebfluxTracingBuilder.java index 7a1b4d998e41..e383245e74f3 100644 --- a/instrumentation/spring/spring-webflux-5.0/library/src/main/java/io/opentelemetry/instrumentation/spring/webflux/client/SpringWebfluxTracingBuilder.java +++ b/instrumentation/spring/spring-webflux-5.0/library/src/main/java/io/opentelemetry/instrumentation/spring/webflux/client/SpringWebfluxTracingBuilder.java @@ -76,7 +76,9 @@ public SpringWebfluxTracing build() { HttpSpanNameExtractor.create(httpAttributesGetter)) .setSpanStatusExtractor(HttpSpanStatusExtractor.create(httpAttributesGetter)) .addAttributesExtractor( - HttpClientAttributesExtractor.create(httpAttributesGetter, capturedHttpHeaders)) + HttpClientAttributesExtractor.builder(httpAttributesGetter) + .captureHttpHeaders(capturedHttpHeaders) + .build()) .addAttributesExtractor(attributesExtractor) .addAttributesExtractor(PeerServiceAttributesExtractor.create(attributesGetter)) .addAttributesExtractors(additionalExtractors) diff --git a/instrumentation/spring/spring-webmvc-3.1/library/src/main/java/io/opentelemetry/instrumentation/spring/webmvc/SpringWebMvcTracingBuilder.java b/instrumentation/spring/spring-webmvc-3.1/library/src/main/java/io/opentelemetry/instrumentation/spring/webmvc/SpringWebMvcTracingBuilder.java index d9b969ebe7d7..b8a051751965 100644 --- a/instrumentation/spring/spring-webmvc-3.1/library/src/main/java/io/opentelemetry/instrumentation/spring/webmvc/SpringWebMvcTracingBuilder.java +++ b/instrumentation/spring/spring-webmvc-3.1/library/src/main/java/io/opentelemetry/instrumentation/spring/webmvc/SpringWebMvcTracingBuilder.java @@ -71,7 +71,9 @@ public SpringWebMvcTracing build() { HttpSpanNameExtractor.create(httpAttributesGetter)) .setSpanStatusExtractor(HttpSpanStatusExtractor.create(httpAttributesGetter)) .addAttributesExtractor( - HttpServerAttributesExtractor.create(httpAttributesGetter, capturedHttpHeaders)) + HttpServerAttributesExtractor.builder(httpAttributesGetter) + .captureHttpHeaders(capturedHttpHeaders) + .build()) .addAttributesExtractor(new StatusCodeExtractor()) .addAttributesExtractor( NetServerAttributesExtractor.create(new SpringWebMvcNetAttributesGetter())) From a44bcbf65c15f534a122d7e7bc7eb81af750539a Mon Sep 17 00:00:00 2001 From: Mateusz Rzeszutek Date: Fri, 11 Feb 2022 10:30:27 +0100 Subject: [PATCH 2/3] errorprone --- .../http/HttpClientAttributesExtractor.java | 18 +++++++++--------- .../http/HttpServerAttributesExtractor.java | 18 +++++++++--------- 2 files changed, 18 insertions(+), 18 deletions(-) diff --git a/instrumentation-api/src/main/java/io/opentelemetry/instrumentation/api/instrumenter/http/HttpClientAttributesExtractor.java b/instrumentation-api/src/main/java/io/opentelemetry/instrumentation/api/instrumenter/http/HttpClientAttributesExtractor.java index 4ef3936ec3e4..564066e411ef 100644 --- a/instrumentation-api/src/main/java/io/opentelemetry/instrumentation/api/instrumenter/http/HttpClientAttributesExtractor.java +++ b/instrumentation-api/src/main/java/io/opentelemetry/instrumentation/api/instrumenter/http/HttpClientAttributesExtractor.java @@ -29,15 +29,6 @@ public static HttpClientAttributesExtractor HttpClientAttributesExtractorBuilder builder( - HttpClientAttributesGetter getter) { - return new HttpClientAttributesExtractorBuilder<>(getter); - } - /** * Creates the HTTP client attributes extractor. * @@ -52,6 +43,15 @@ public static HttpClientAttributesExtractor HttpClientAttributesExtractorBuilder builder( + HttpClientAttributesGetter getter) { + return new HttpClientAttributesExtractorBuilder<>(getter); + } + HttpClientAttributesExtractor( HttpClientAttributesGetter getter, CapturedHttpHeaders capturedHttpHeaders) { diff --git a/instrumentation-api/src/main/java/io/opentelemetry/instrumentation/api/instrumenter/http/HttpServerAttributesExtractor.java b/instrumentation-api/src/main/java/io/opentelemetry/instrumentation/api/instrumenter/http/HttpServerAttributesExtractor.java index 9598e0228c4d..332cdc60ece6 100644 --- a/instrumentation-api/src/main/java/io/opentelemetry/instrumentation/api/instrumenter/http/HttpServerAttributesExtractor.java +++ b/instrumentation-api/src/main/java/io/opentelemetry/instrumentation/api/instrumenter/http/HttpServerAttributesExtractor.java @@ -35,15 +35,6 @@ public static HttpServerAttributesExtractor HttpServerAttributesExtractorBuilder builder( - HttpServerAttributesGetter getter) { - return new HttpServerAttributesExtractorBuilder<>(getter); - } - /** * Creates the HTTP server attributes extractor. * @@ -58,6 +49,15 @@ public static HttpServerAttributesExtractor HttpServerAttributesExtractorBuilder builder( + HttpServerAttributesGetter getter) { + return new HttpServerAttributesExtractorBuilder<>(getter); + } + private final Function httpRouteHolderGetter; HttpServerAttributesExtractor( From 86e886eea044db6c89002eebcdd8012434577a36 Mon Sep 17 00:00:00 2001 From: Mateusz Rzeszutek Date: Tue, 8 Mar 2022 12:14:33 +0100 Subject: [PATCH 3/3] fix compilation failure --- .../instrumenter/http/HttpServerAttributesExtractorTest.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/instrumentation-api/src/test/java/io/opentelemetry/instrumentation/api/instrumenter/http/HttpServerAttributesExtractorTest.java b/instrumentation-api/src/test/java/io/opentelemetry/instrumentation/api/instrumenter/http/HttpServerAttributesExtractorTest.java index cc2c4c1d376e..5c41ff307465 100644 --- a/instrumentation-api/src/test/java/io/opentelemetry/instrumentation/api/instrumenter/http/HttpServerAttributesExtractorTest.java +++ b/instrumentation-api/src/test/java/io/opentelemetry/instrumentation/api/instrumenter/http/HttpServerAttributesExtractorTest.java @@ -204,8 +204,9 @@ void extractClientIpFromX_Forwarded_Proto() { request.put("header.x-forwarded-proto", "https"); HttpServerAttributesExtractor, Map> extractor = - HttpServerAttributesExtractor.create( - new TestHttpServerAttributesExtractor(), CapturedHttpHeaders.empty()); + HttpServerAttributesExtractor.builder(new TestHttpServerAttributesExtractor()) + .captureHttpHeaders(CapturedHttpHeaders.empty()) + .build(); AttributesBuilder attributes = Attributes.builder(); extractor.onStart(attributes, Context.root(), request);