diff --git a/instrumentation/apache-httpclient/apache-httpclient-4.3/library/src/main/java/io/opentelemetry/instrumentation/apachehttpclient/v4_3/ApacheHttpClientHttpAttributesExtractor.java b/instrumentation/apache-httpclient/apache-httpclient-4.3/library/src/main/java/io/opentelemetry/instrumentation/apachehttpclient/v4_3/ApacheHttpClientHttpAttributesExtractor.java index c17a0d4fc483..7d83414bad31 100644 --- a/instrumentation/apache-httpclient/apache-httpclient-4.3/library/src/main/java/io/opentelemetry/instrumentation/apachehttpclient/v4_3/ApacheHttpClientHttpAttributesExtractor.java +++ b/instrumentation/apache-httpclient/apache-httpclient-4.3/library/src/main/java/io/opentelemetry/instrumentation/apachehttpclient/v4_3/ApacheHttpClientHttpAttributesExtractor.java @@ -16,9 +16,8 @@ final class ApacheHttpClientHttpAttributesExtractor extends HttpClientAttributesExtractor { - // TODO: add support for capturing HTTP headers in library instrumentations - ApacheHttpClientHttpAttributesExtractor() { - super(CapturedHttpHeaders.empty()); + ApacheHttpClientHttpAttributesExtractor(CapturedHttpHeaders capturedHttpHeaders) { + super(capturedHttpHeaders); } @Override 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 20d8941268d4..6c3858fb7c42 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 @@ -6,11 +6,13 @@ package io.opentelemetry.instrumentation.apachehttpclient.v4_3; import io.opentelemetry.api.OpenTelemetry; +import io.opentelemetry.instrumentation.api.config.Config; import io.opentelemetry.instrumentation.api.instrumenter.AttributesExtractor; import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter; import io.opentelemetry.instrumentation.api.instrumenter.SpanKindExtractor; import io.opentelemetry.instrumentation.api.instrumenter.SpanNameExtractor; import io.opentelemetry.instrumentation.api.instrumenter.SpanStatusExtractor; +import io.opentelemetry.instrumentation.api.instrumenter.http.CapturedHttpHeaders; import io.opentelemetry.instrumentation.api.instrumenter.http.HttpClientAttributesExtractor; import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanNameExtractor; import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanStatusExtractor; @@ -27,6 +29,7 @@ public final class ApacheHttpClientTracingBuilder { private final List> additionalExtractors = new ArrayList<>(); + private CapturedHttpHeaders capturedHttpHeaders = CapturedHttpHeaders.client(Config.get()); ApacheHttpClientTracingBuilder(OpenTelemetry openTelemetry) { this.openTelemetry = openTelemetry; @@ -43,13 +46,26 @@ public ApacheHttpClientTracingBuilder addAttributeExtractor( return this; } + /** + * Configure the instrumentation to capture chosen HTTP request and response headers as span + * attributes. + * + * @param capturedHttpHeaders An instance of {@link CapturedHttpHeaders} containing the configured + * HTTP request and response names. + */ + public ApacheHttpClientTracingBuilder captureHttpHeaders( + CapturedHttpHeaders capturedHttpHeaders) { + this.capturedHttpHeaders = capturedHttpHeaders; + return this; + } + /** * Returns a new {@link ApacheHttpClientTracing} configured with this {@link * ApacheHttpClientTracingBuilder}. */ public ApacheHttpClientTracing build() { HttpClientAttributesExtractor httpAttributesExtractor = - new ApacheHttpClientHttpAttributesExtractor(); + new ApacheHttpClientHttpAttributesExtractor(capturedHttpHeaders); SpanNameExtractor spanNameExtractor = HttpSpanNameExtractor.create(httpAttributesExtractor); SpanStatusExtractor spanStatusExtractor = @@ -62,6 +78,7 @@ public ApacheHttpClientTracing build() { .setSpanStatusExtractor(spanStatusExtractor) .addAttributesExtractor(httpAttributesExtractor) .addAttributesExtractor(netAttributesExtractor) + .addAttributesExtractors(additionalExtractors) // We manually inject because we need to inject internal requests for redirects. .newInstrumenter(SpanKindExtractor.alwaysClient()); diff --git a/instrumentation/armeria-1.3/library/src/main/java/io/opentelemetry/instrumentation/armeria/v1_3/ArmeriaHttpClientAttributesExtractor.java b/instrumentation/armeria-1.3/library/src/main/java/io/opentelemetry/instrumentation/armeria/v1_3/ArmeriaHttpClientAttributesExtractor.java index bf2cc0f6ce4f..01e717458c95 100644 --- a/instrumentation/armeria-1.3/library/src/main/java/io/opentelemetry/instrumentation/armeria/v1_3/ArmeriaHttpClientAttributesExtractor.java +++ b/instrumentation/armeria-1.3/library/src/main/java/io/opentelemetry/instrumentation/armeria/v1_3/ArmeriaHttpClientAttributesExtractor.java @@ -19,9 +19,8 @@ final class ArmeriaHttpClientAttributesExtractor extends HttpClientAttributesExtractor { - // TODO: add support for capturing HTTP headers in library instrumentations - ArmeriaHttpClientAttributesExtractor() { - super(CapturedHttpHeaders.empty()); + ArmeriaHttpClientAttributesExtractor(CapturedHttpHeaders capturedHttpHeaders) { + super(capturedHttpHeaders); } @Override diff --git a/instrumentation/armeria-1.3/library/src/main/java/io/opentelemetry/instrumentation/armeria/v1_3/ArmeriaHttpServerAttributesExtractor.java b/instrumentation/armeria-1.3/library/src/main/java/io/opentelemetry/instrumentation/armeria/v1_3/ArmeriaHttpServerAttributesExtractor.java index 8810b3d416a3..a7875e95177d 100644 --- a/instrumentation/armeria-1.3/library/src/main/java/io/opentelemetry/instrumentation/armeria/v1_3/ArmeriaHttpServerAttributesExtractor.java +++ b/instrumentation/armeria-1.3/library/src/main/java/io/opentelemetry/instrumentation/armeria/v1_3/ArmeriaHttpServerAttributesExtractor.java @@ -20,9 +20,8 @@ final class ArmeriaHttpServerAttributesExtractor extends HttpServerAttributesExtractor { - // TODO: add support for capturing HTTP headers in library instrumentations - ArmeriaHttpServerAttributesExtractor() { - super(CapturedHttpHeaders.empty()); + ArmeriaHttpServerAttributesExtractor(CapturedHttpHeaders capturedHttpHeaders) { + super(capturedHttpHeaders); } @Override 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 13e884b1724c..c188b92bf49e 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 @@ -10,10 +10,12 @@ import com.linecorp.armeria.common.logging.RequestLog; import com.linecorp.armeria.server.ServiceRequestContext; import io.opentelemetry.api.OpenTelemetry; +import io.opentelemetry.instrumentation.api.config.Config; import io.opentelemetry.instrumentation.api.instrumenter.AttributesExtractor; import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter; import io.opentelemetry.instrumentation.api.instrumenter.InstrumenterBuilder; import io.opentelemetry.instrumentation.api.instrumenter.SpanStatusExtractor; +import io.opentelemetry.instrumentation.api.instrumenter.http.CapturedHttpHeaders; import io.opentelemetry.instrumentation.api.instrumenter.http.HttpClientMetrics; import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerMetrics; import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanNameExtractor; @@ -29,6 +31,8 @@ public final class ArmeriaTracingBuilder { private static final String INSTRUMENTATION_NAME = "io.opentelemetry.armeria-1.3"; private final OpenTelemetry openTelemetry; + private CapturedHttpHeaders capturedHttpClientHeaders = CapturedHttpHeaders.client(Config.get()); + private CapturedHttpHeaders capturedHttpServerHeaders = CapturedHttpHeaders.server(Config.get()); private final List> additionalExtractors = new ArrayList<>(); @@ -61,11 +65,37 @@ public ArmeriaTracingBuilder addAttributeExtractor( return this; } + /** + * Configure the HTTP client instrumentation to capture chosen HTTP request and response headers + * as span attributes. + * + * @param capturedHttpClientHeaders An instance of {@link CapturedHttpHeaders} containing the + * configured HTTP request and response names. + */ + public ArmeriaTracingBuilder captureHttpClientHeaders( + CapturedHttpHeaders capturedHttpClientHeaders) { + this.capturedHttpClientHeaders = capturedHttpClientHeaders; + return this; + } + + /** + * Configure the HTTP server instrumentation to capture chosen HTTP request and response headers + * as span attributes. + * + * @param capturedHttpServerHeaders An instance of {@link CapturedHttpHeaders} containing the + * configured HTTP request and response names. + */ + public ArmeriaTracingBuilder captureHttpServerHeaders( + CapturedHttpHeaders capturedHttpServerHeaders) { + this.capturedHttpServerHeaders = capturedHttpServerHeaders; + return this; + } + public ArmeriaTracing build() { ArmeriaHttpClientAttributesExtractor clientAttributesExtractor = - new ArmeriaHttpClientAttributesExtractor(); + new ArmeriaHttpClientAttributesExtractor(capturedHttpClientHeaders); ArmeriaHttpServerAttributesExtractor serverAttributesExtractor = - new ArmeriaHttpServerAttributesExtractor(); + new ArmeriaHttpServerAttributesExtractor(capturedHttpServerHeaders); ArmeriaNetAttributesExtractor netAttributesExtractor = new ArmeriaNetAttributesExtractor(); diff --git a/instrumentation/jetty-httpclient/jetty-httpclient-9.2/library/src/main/java/io/opentelemetry/instrumentation/jetty/httpclient/v9_2/JettyClientTracing.java b/instrumentation/jetty-httpclient/jetty-httpclient-9.2/library/src/main/java/io/opentelemetry/instrumentation/jetty/httpclient/v9_2/JettyClientTracing.java index 8f9bdaeea61c..977cdd5da05d 100644 --- a/instrumentation/jetty-httpclient/jetty-httpclient-9.2/library/src/main/java/io/opentelemetry/instrumentation/jetty/httpclient/v9_2/JettyClientTracing.java +++ b/instrumentation/jetty-httpclient/jetty-httpclient-9.2/library/src/main/java/io/opentelemetry/instrumentation/jetty/httpclient/v9_2/JettyClientTracing.java @@ -11,22 +11,27 @@ /** JettyClientTracing, the Entrypoint for tracing Jetty client. */ public final class JettyClientTracing { - private final HttpClient httpClient; - + /** Returns a new {@link JettyClientTracing} configured with the given {@link OpenTelemetry}. */ public static JettyClientTracing create(OpenTelemetry openTelemetry) { JettyClientTracingBuilder builder = newBuilder(openTelemetry); return builder.build(); } + /** + * Returns a new {@link JettyClientTracingBuilder} configured with the given {@link + * OpenTelemetry}. + */ public static JettyClientTracingBuilder newBuilder(OpenTelemetry openTelemetry) { return new JettyClientTracingBuilder(openTelemetry); } - public HttpClient getHttpClient() { - return httpClient; - } + private final HttpClient httpClient; JettyClientTracing(HttpClient httpClient) { this.httpClient = httpClient; } + + public HttpClient getHttpClient() { + return httpClient; + } } diff --git a/instrumentation/jetty-httpclient/jetty-httpclient-9.2/library/src/main/java/io/opentelemetry/instrumentation/jetty/httpclient/v9_2/JettyClientTracingBuilder.java b/instrumentation/jetty-httpclient/jetty-httpclient-9.2/library/src/main/java/io/opentelemetry/instrumentation/jetty/httpclient/v9_2/JettyClientTracingBuilder.java index b18146ddfdea..59087699fc96 100644 --- a/instrumentation/jetty-httpclient/jetty-httpclient-9.2/library/src/main/java/io/opentelemetry/instrumentation/jetty/httpclient/v9_2/JettyClientTracingBuilder.java +++ b/instrumentation/jetty-httpclient/jetty-httpclient-9.2/library/src/main/java/io/opentelemetry/instrumentation/jetty/httpclient/v9_2/JettyClientTracingBuilder.java @@ -6,21 +6,23 @@ package io.opentelemetry.instrumentation.jetty.httpclient.v9_2; import io.opentelemetry.api.OpenTelemetry; -import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter; +import io.opentelemetry.instrumentation.api.instrumenter.AttributesExtractor; +import io.opentelemetry.instrumentation.api.instrumenter.http.CapturedHttpHeaders; import io.opentelemetry.instrumentation.jetty.httpclient.v9_2.internal.JettyClientInstrumenterBuilder; import org.eclipse.jetty.client.HttpClientTransport; import org.eclipse.jetty.client.api.Request; import org.eclipse.jetty.client.api.Response; import org.eclipse.jetty.util.ssl.SslContextFactory; +/** A builder of {@link JettyClientTracing}. */ public final class JettyClientTracingBuilder { - private final OpenTelemetry openTelemetry; + private final JettyClientInstrumenterBuilder instrumenterBuilder; private HttpClientTransport httpClientTransport; private SslContextFactory sslContextFactory; - public JettyClientTracingBuilder(OpenTelemetry openTelemetry) { - this.openTelemetry = openTelemetry; + JettyClientTracingBuilder(OpenTelemetry openTelemetry) { + instrumenterBuilder = new JettyClientInstrumenterBuilder(openTelemetry); } public JettyClientTracingBuilder setHttpClientTransport(HttpClientTransport httpClientTransport) { @@ -33,13 +35,36 @@ public JettyClientTracingBuilder setSslContextFactory(SslContextFactory sslConte return this; } - public JettyClientTracing build() { - JettyClientInstrumenterBuilder instrumenterBuilder = - new JettyClientInstrumenterBuilder(this.openTelemetry); - Instrumenter instrumenter = instrumenterBuilder.build(); + /** + * Adds an additional {@link AttributesExtractor} to invoke to set attributes to instrumented + * items. + */ + public JettyClientTracingBuilder addAttributeExtractor( + AttributesExtractor attributesExtractor) { + instrumenterBuilder.addAttributeExtractor(attributesExtractor); + return this; + } + /** + * Configure the instrumentation to capture chosen HTTP request and response headers as span + * attributes. + * + * @param capturedHttpHeaders An instance of {@link CapturedHttpHeaders} containing the configured + * HTTP request and response names. + */ + public JettyClientTracingBuilder captureHttpHeaders(CapturedHttpHeaders capturedHttpHeaders) { + instrumenterBuilder.captureHttpHeaders(capturedHttpHeaders); + return this; + } + + /** + * Returns a new {@link JettyClientTracing} with the settings of this {@link + * JettyClientTracingBuilder}. + */ + public JettyClientTracing build() { TracingHttpClient tracingHttpClient = - TracingHttpClient.buildNew(instrumenter, this.sslContextFactory, this.httpClientTransport); + TracingHttpClient.buildNew( + instrumenterBuilder.build(), this.sslContextFactory, this.httpClientTransport); return new JettyClientTracing(tracingHttpClient); } diff --git a/instrumentation/jetty-httpclient/jetty-httpclient-9.2/library/src/main/java/io/opentelemetry/instrumentation/jetty/httpclient/v9_2/internal/JettyClientHttpAttributesExtractor.java b/instrumentation/jetty-httpclient/jetty-httpclient-9.2/library/src/main/java/io/opentelemetry/instrumentation/jetty/httpclient/v9_2/internal/JettyClientHttpAttributesExtractor.java index ba4c0789b2ec..083e5b2e3fcf 100644 --- a/instrumentation/jetty-httpclient/jetty-httpclient-9.2/library/src/main/java/io/opentelemetry/instrumentation/jetty/httpclient/v9_2/internal/JettyClientHttpAttributesExtractor.java +++ b/instrumentation/jetty-httpclient/jetty-httpclient-9.2/library/src/main/java/io/opentelemetry/instrumentation/jetty/httpclient/v9_2/internal/JettyClientHttpAttributesExtractor.java @@ -23,12 +23,12 @@ final class JettyClientHttpAttributesExtractor extends HttpClientAttributesExtractor { + private static final Logger logger = LoggerFactory.getLogger(JettyClientHttpAttributesExtractor.class); - // TODO: add support for capturing HTTP headers in library instrumentations - JettyClientHttpAttributesExtractor() { - super(CapturedHttpHeaders.empty()); + JettyClientHttpAttributesExtractor(CapturedHttpHeaders capturedHttpHeaders) { + super(capturedHttpHeaders); } @Override 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 cd3e1a56f487..3ac455b7405c 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 @@ -6,10 +6,12 @@ package io.opentelemetry.instrumentation.jetty.httpclient.v9_2.internal; import io.opentelemetry.api.OpenTelemetry; +import io.opentelemetry.instrumentation.api.config.Config; import io.opentelemetry.instrumentation.api.instrumenter.AttributesExtractor; import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter; import io.opentelemetry.instrumentation.api.instrumenter.SpanNameExtractor; import io.opentelemetry.instrumentation.api.instrumenter.SpanStatusExtractor; +import io.opentelemetry.instrumentation.api.instrumenter.http.CapturedHttpHeaders; import io.opentelemetry.instrumentation.api.instrumenter.http.HttpClientAttributesExtractor; import io.opentelemetry.instrumentation.api.instrumenter.http.HttpClientMetrics; import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanNameExtractor; @@ -27,6 +29,11 @@ public final class JettyClientInstrumenterBuilder { private final List> additionalExtractors = new ArrayList<>(); + private CapturedHttpHeaders capturedHttpHeaders = CapturedHttpHeaders.client(Config.get()); + + public JettyClientInstrumenterBuilder(OpenTelemetry openTelemetry) { + this.openTelemetry = openTelemetry; + } public JettyClientInstrumenterBuilder addAttributeExtractor( AttributesExtractor attributesExtractor) { @@ -34,13 +41,15 @@ public JettyClientInstrumenterBuilder addAttributeExtractor( return this; } - public JettyClientInstrumenterBuilder(OpenTelemetry openTelemetry) { - this.openTelemetry = openTelemetry; + public JettyClientInstrumenterBuilder captureHttpHeaders( + CapturedHttpHeaders capturedHttpHeaders) { + this.capturedHttpHeaders = capturedHttpHeaders; + return this; } public Instrumenter build() { HttpClientAttributesExtractor httpAttributesExtractor = - new JettyClientHttpAttributesExtractor(); + new JettyClientHttpAttributesExtractor(capturedHttpHeaders); SpanNameExtractor spanNameExtractor = HttpSpanNameExtractor.create(httpAttributesExtractor); SpanStatusExtractor spanStatusExtractor = diff --git a/instrumentation/jetty-httpclient/jetty-httpclient-9.2/library/src/test/groovy/io/opentelemetry/instrumentation/jetty/httpclient/v9_2/JettyHttpClient9LibraryTest.groovy b/instrumentation/jetty-httpclient/jetty-httpclient-9.2/library/src/test/groovy/io/opentelemetry/instrumentation/jetty/httpclient/v9_2/JettyHttpClient9LibraryTest.groovy index 09268341619e..cf90d083d3cc 100644 --- a/instrumentation/jetty-httpclient/jetty-httpclient-9.2/library/src/test/groovy/io/opentelemetry/instrumentation/jetty/httpclient/v9_2/JettyHttpClient9LibraryTest.groovy +++ b/instrumentation/jetty-httpclient/jetty-httpclient-9.2/library/src/test/groovy/io/opentelemetry/instrumentation/jetty/httpclient/v9_2/JettyHttpClient9LibraryTest.groovy @@ -14,14 +14,12 @@ class JettyHttpClient9LibraryTest extends AbstractJettyClient9Test implements Li @Override HttpClient createStandardClient() { - JettyClientTracingBuilder jettyClientTracingBuilder = new JettyClientTracingBuilder(getOpenTelemetry()) - return jettyClientTracingBuilder.build().getHttpClient() + return JettyClientTracing.create(getOpenTelemetry()).getHttpClient() } @Override HttpClient createHttpsClient(SslContextFactory sslContextFactory) { - JettyClientTracingBuilder jettyClientTracingBuilder = new JettyClientTracingBuilder(getOpenTelemetry()) - return jettyClientTracingBuilder + return JettyClientTracing.newBuilder(getOpenTelemetry()) .setSslContextFactory(sslContextFactory) .build() .getHttpClient() diff --git a/instrumentation/okhttp/okhttp-3.0/library/src/main/java/io/opentelemetry/instrumentation/okhttp/v3_0/OkHttpAttributesExtractor.java b/instrumentation/okhttp/okhttp-3.0/library/src/main/java/io/opentelemetry/instrumentation/okhttp/v3_0/OkHttpAttributesExtractor.java index fa4f35ecfdbd..4a7117149568 100644 --- a/instrumentation/okhttp/okhttp-3.0/library/src/main/java/io/opentelemetry/instrumentation/okhttp/v3_0/OkHttpAttributesExtractor.java +++ b/instrumentation/okhttp/okhttp-3.0/library/src/main/java/io/opentelemetry/instrumentation/okhttp/v3_0/OkHttpAttributesExtractor.java @@ -15,9 +15,8 @@ final class OkHttpAttributesExtractor extends HttpClientAttributesExtractor { - // TODO: add support for capturing HTTP headers in library instrumentations - OkHttpAttributesExtractor() { - super(CapturedHttpHeaders.empty()); + OkHttpAttributesExtractor(CapturedHttpHeaders capturedHttpHeaders) { + super(capturedHttpHeaders); } @Override 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 4a88d511cb67..ef362202b82e 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 @@ -8,8 +8,10 @@ import static io.opentelemetry.instrumentation.api.instrumenter.SpanKindExtractor.alwaysClient; import io.opentelemetry.api.OpenTelemetry; +import io.opentelemetry.instrumentation.api.config.Config; import io.opentelemetry.instrumentation.api.instrumenter.AttributesExtractor; import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter; +import io.opentelemetry.instrumentation.api.instrumenter.http.CapturedHttpHeaders; import io.opentelemetry.instrumentation.api.instrumenter.http.HttpClientMetrics; import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanNameExtractor; import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanStatusExtractor; @@ -26,6 +28,7 @@ public final class OkHttpTracingBuilder { private final OpenTelemetry openTelemetry; private final List> additionalExtractors = new ArrayList<>(); + private CapturedHttpHeaders capturedHttpHeaders = CapturedHttpHeaders.client(Config.get()); OkHttpTracingBuilder(OpenTelemetry openTelemetry) { this.openTelemetry = openTelemetry; @@ -41,9 +44,22 @@ public OkHttpTracingBuilder addAttributesExtractor( return this; } + /** + * Configure the instrumentation to capture chosen HTTP request and response headers as span + * attributes. + * + * @param capturedHttpHeaders An instance of {@link CapturedHttpHeaders} containing the configured + * HTTP request and response names. + */ + public OkHttpTracingBuilder captureHttpHeaders(CapturedHttpHeaders capturedHttpHeaders) { + this.capturedHttpHeaders = capturedHttpHeaders; + return this; + } + /** Returns a new {@link OkHttpTracing} with the settings of this {@link OkHttpTracingBuilder}. */ public OkHttpTracing build() { - OkHttpAttributesExtractor httpAttributesExtractor = new OkHttpAttributesExtractor(); + OkHttpAttributesExtractor httpAttributesExtractor = + new OkHttpAttributesExtractor(capturedHttpHeaders); OkHttpNetAttributesExtractor netAttributesExtractor = new OkHttpNetAttributesExtractor(); Instrumenter instrumenter = diff --git a/instrumentation/ratpack-1.4/library/src/main/java/io/opentelemetry/instrumentation/ratpack/RatpackHttpAttributesExtractor.java b/instrumentation/ratpack-1.4/library/src/main/java/io/opentelemetry/instrumentation/ratpack/RatpackHttpAttributesExtractor.java index f0f15b9153e8..ffa2163be962 100644 --- a/instrumentation/ratpack-1.4/library/src/main/java/io/opentelemetry/instrumentation/ratpack/RatpackHttpAttributesExtractor.java +++ b/instrumentation/ratpack-1.4/library/src/main/java/io/opentelemetry/instrumentation/ratpack/RatpackHttpAttributesExtractor.java @@ -18,9 +18,8 @@ final class RatpackHttpAttributesExtractor extends HttpServerAttributesExtractor { - // TODO: add support for capturing HTTP headers in library instrumentations - RatpackHttpAttributesExtractor() { - super(CapturedHttpHeaders.empty()); + RatpackHttpAttributesExtractor(CapturedHttpHeaders capturedHttpHeaders) { + super(capturedHttpHeaders); } @Override diff --git a/instrumentation/ratpack-1.4/library/src/main/java/io/opentelemetry/instrumentation/ratpack/RatpackTracingBuilder.java b/instrumentation/ratpack-1.4/library/src/main/java/io/opentelemetry/instrumentation/ratpack/RatpackTracingBuilder.java index 3b789d8cac4b..2e94a368a0be 100644 --- a/instrumentation/ratpack-1.4/library/src/main/java/io/opentelemetry/instrumentation/ratpack/RatpackTracingBuilder.java +++ b/instrumentation/ratpack-1.4/library/src/main/java/io/opentelemetry/instrumentation/ratpack/RatpackTracingBuilder.java @@ -6,9 +6,11 @@ package io.opentelemetry.instrumentation.ratpack; import io.opentelemetry.api.OpenTelemetry; +import io.opentelemetry.instrumentation.api.config.Config; import io.opentelemetry.instrumentation.api.instrumenter.AttributesExtractor; import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter; import io.opentelemetry.instrumentation.api.instrumenter.InstrumenterBuilder; +import io.opentelemetry.instrumentation.api.instrumenter.http.CapturedHttpHeaders; import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanNameExtractor; import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanStatusExtractor; import io.opentelemetry.instrumentation.ratpack.internal.RatpackNetAttributesExtractor; @@ -26,6 +28,7 @@ public final class RatpackTracingBuilder { private final List> additionalExtractors = new ArrayList<>(); + private CapturedHttpHeaders capturedHttpHeaders = CapturedHttpHeaders.server(Config.get()); RatpackTracingBuilder(OpenTelemetry openTelemetry) { this.openTelemetry = openTelemetry; @@ -41,10 +44,23 @@ public RatpackTracingBuilder addAttributeExtractor( return this; } + /** + * Configure the instrumentation to capture chosen HTTP request and response headers as span + * attributes. + * + * @param capturedHttpHeaders An instance of {@link CapturedHttpHeaders} containing the configured + * HTTP request and response names. + */ + public RatpackTracingBuilder captureHttpHeaders(CapturedHttpHeaders capturedHttpHeaders) { + this.capturedHttpHeaders = capturedHttpHeaders; + return this; + } + /** Returns a new {@link RatpackTracing} with the configuration of this builder. */ public RatpackTracing build() { RatpackNetAttributesExtractor netAttributes = new RatpackNetAttributesExtractor(); - RatpackHttpAttributesExtractor httpAttributes = new RatpackHttpAttributesExtractor(); + RatpackHttpAttributesExtractor httpAttributes = + new RatpackHttpAttributesExtractor(capturedHttpHeaders); InstrumenterBuilder builder = Instrumenter.newBuilder( diff --git a/instrumentation/restlet/restlet-1.0/library/src/main/java/io/opentelemetry/instrumentation/restlet/v1_0/RestletHttpAttributesExtractor.java b/instrumentation/restlet/restlet-1.0/library/src/main/java/io/opentelemetry/instrumentation/restlet/v1_0/RestletHttpAttributesExtractor.java index 55b9b7ad7591..b015d112197d 100644 --- a/instrumentation/restlet/restlet-1.0/library/src/main/java/io/opentelemetry/instrumentation/restlet/v1_0/RestletHttpAttributesExtractor.java +++ b/instrumentation/restlet/restlet-1.0/library/src/main/java/io/opentelemetry/instrumentation/restlet/v1_0/RestletHttpAttributesExtractor.java @@ -23,9 +23,8 @@ final class RestletHttpAttributesExtractor extends HttpServerAttributesExtractor { - // TODO: add support for capturing HTTP headers in library instrumentations - RestletHttpAttributesExtractor() { - super(CapturedHttpHeaders.empty()); + RestletHttpAttributesExtractor(CapturedHttpHeaders capturedHttpHeaders) { + super(capturedHttpHeaders); } @Override 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 67548bc35a0b..9044bca3ca8a 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 @@ -6,10 +6,12 @@ package io.opentelemetry.instrumentation.restlet.v1_0; import io.opentelemetry.api.OpenTelemetry; +import io.opentelemetry.instrumentation.api.config.Config; import io.opentelemetry.instrumentation.api.instrumenter.AttributesExtractor; import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter; import io.opentelemetry.instrumentation.api.instrumenter.SpanNameExtractor; import io.opentelemetry.instrumentation.api.instrumenter.SpanStatusExtractor; +import io.opentelemetry.instrumentation.api.instrumenter.http.CapturedHttpHeaders; import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanNameExtractor; import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanStatusExtractor; import io.opentelemetry.instrumentation.api.instrumenter.net.NetAttributesExtractor; @@ -26,6 +28,7 @@ public final class RestletTracingBuilder { private final OpenTelemetry openTelemetry; private final List> additionalExtractors = new ArrayList<>(); + private CapturedHttpHeaders capturedHttpHeaders = CapturedHttpHeaders.server(Config.get()); RestletTracingBuilder(OpenTelemetry openTelemetry) { this.openTelemetry = openTelemetry; @@ -41,11 +44,24 @@ public RestletTracingBuilder addAttributesExtractor( return this; } + /** + * Configure the instrumentation to capture chosen HTTP request and response headers as span + * attributes. + * + * @param capturedHttpHeaders An instance of {@link CapturedHttpHeaders} containing the configured + * HTTP request and response names. + */ + public RestletTracingBuilder captureHttpHeaders(CapturedHttpHeaders capturedHttpHeaders) { + this.capturedHttpHeaders = capturedHttpHeaders; + return this; + } + /** * Returns a new {@link RestletTracing} with the settings of this {@link RestletTracingBuilder}. */ public RestletTracing build() { - RestletHttpAttributesExtractor httpAttributesExtractor = new RestletHttpAttributesExtractor(); + RestletHttpAttributesExtractor httpAttributesExtractor = + new RestletHttpAttributesExtractor(capturedHttpHeaders); SpanNameExtractor spanNameExtractor = HttpSpanNameExtractor.create(httpAttributesExtractor); SpanStatusExtractor spanStatusExtractor = diff --git a/instrumentation/spring/spring-webmvc-3.1/library/src/main/java/io/opentelemetry/instrumentation/spring/webmvc/SpringWebMvcHttpAttributesExtractor.java b/instrumentation/spring/spring-webmvc-3.1/library/src/main/java/io/opentelemetry/instrumentation/spring/webmvc/SpringWebMvcHttpAttributesExtractor.java index d2b104ccb29a..6a25ece1ff55 100644 --- a/instrumentation/spring/spring-webmvc-3.1/library/src/main/java/io/opentelemetry/instrumentation/spring/webmvc/SpringWebMvcHttpAttributesExtractor.java +++ b/instrumentation/spring/spring-webmvc-3.1/library/src/main/java/io/opentelemetry/instrumentation/spring/webmvc/SpringWebMvcHttpAttributesExtractor.java @@ -19,9 +19,8 @@ final class SpringWebMvcHttpAttributesExtractor extends HttpServerAttributesExtractor { - // TODO: add support for capturing HTTP headers in library instrumentations - SpringWebMvcHttpAttributesExtractor() { - super(CapturedHttpHeaders.empty()); + SpringWebMvcHttpAttributesExtractor(CapturedHttpHeaders capturedHttpHeaders) { + super(capturedHttpHeaders); } @Override 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 3eafa38151fc..9767e32155f8 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 @@ -6,8 +6,10 @@ package io.opentelemetry.instrumentation.spring.webmvc; import io.opentelemetry.api.OpenTelemetry; +import io.opentelemetry.instrumentation.api.config.Config; import io.opentelemetry.instrumentation.api.instrumenter.AttributesExtractor; import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter; +import io.opentelemetry.instrumentation.api.instrumenter.http.CapturedHttpHeaders; import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerMetrics; import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanNameExtractor; import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanStatusExtractor; @@ -25,6 +27,7 @@ public final class SpringWebMvcTracingBuilder { private final OpenTelemetry openTelemetry; private final List> additionalExtractors = new ArrayList<>(); + private CapturedHttpHeaders capturedHttpHeaders = CapturedHttpHeaders.server(Config.get()); SpringWebMvcTracingBuilder(OpenTelemetry openTelemetry) { this.openTelemetry = openTelemetry; @@ -40,13 +43,25 @@ public SpringWebMvcTracingBuilder addAttributesExtractor( return this; } + /** + * Configure the instrumentation to capture chosen HTTP request and response headers as span + * attributes. + * + * @param capturedHttpHeaders An instance of {@link CapturedHttpHeaders} containing the configured + * HTTP request and response names. + */ + public SpringWebMvcTracingBuilder captureHttpHeaders(CapturedHttpHeaders capturedHttpHeaders) { + this.capturedHttpHeaders = capturedHttpHeaders; + return this; + } + /** * Returns a new {@link SpringWebMvcTracing} with the settings of this {@link * SpringWebMvcTracingBuilder}. */ public SpringWebMvcTracing build() { SpringWebMvcHttpAttributesExtractor httpAttributesExtractor = - new SpringWebMvcHttpAttributesExtractor(); + new SpringWebMvcHttpAttributesExtractor(capturedHttpHeaders); Instrumenter instrumenter = Instrumenter.newBuilder(