diff --git a/instrumentation-api-semconv/src/main/java/io/opentelemetry/instrumentation/api/instrumenter/http/HttpSpanNameExtractor.java b/instrumentation-api-semconv/src/main/java/io/opentelemetry/instrumentation/api/instrumenter/http/HttpSpanNameExtractor.java index 65794011b2..5a9c3058e3 100644 --- a/instrumentation-api-semconv/src/main/java/io/opentelemetry/instrumentation/api/instrumenter/http/HttpSpanNameExtractor.java +++ b/instrumentation-api-semconv/src/main/java/io/opentelemetry/instrumentation/api/instrumenter/http/HttpSpanNameExtractor.java @@ -6,6 +6,8 @@ package io.opentelemetry.instrumentation.api.instrumenter.http; import io.opentelemetry.instrumentation.api.instrumenter.SpanNameExtractor; +import java.util.HashSet; +import java.util.Set; import javax.annotation.Nullable; /** @@ -17,18 +19,29 @@ import javax.annotation.Nullable; public final class HttpSpanNameExtractor implements SpanNameExtractor { /** - * Returns a {@link SpanNameExtractor} which should be used for HTTP requests. HTTP attributes - * will be examined to determine the name of the span. + * Returns a {@link SpanNameExtractor} which should be used for HTTP requests with default + * configuration. HTTP attributes will be examined to determine the name of the span. */ public static SpanNameExtractor create( HttpCommonAttributesGetter getter) { - return new HttpSpanNameExtractor<>(getter); + return builder(getter).build(); + } + + /** + * Returns a new {@link HttpSpanNameExtractorBuilder} that can be used to configure the HTTP span + * name extractor. + */ + public static HttpSpanNameExtractorBuilder builder( + HttpCommonAttributesGetter getter) { + return new HttpSpanNameExtractorBuilder<>(getter); } private final HttpCommonAttributesGetter getter; + private final Set knownMethods; - private HttpSpanNameExtractor(HttpCommonAttributesGetter getter) { - this.getter = getter; + HttpSpanNameExtractor(HttpSpanNameExtractorBuilder builder) { + this.getter = builder.httpAttributesGetter; + this.knownMethods = new HashSet<>(builder.knownMethods); } @Override @@ -36,6 +49,9 @@ public final class HttpSpanNameExtractor implements SpanNameExtractor { + + final HttpCommonAttributesGetter httpAttributesGetter; + Set knownMethods = HttpConstants.KNOWN_METHODS; + + HttpSpanNameExtractorBuilder(HttpCommonAttributesGetter httpAttributesGetter) { + this.httpAttributesGetter = httpAttributesGetter; + } + + /** + * Configures the extractor to recognize an alternative set of HTTP request methods. + * + *

By default, this extractor defines "known" methods as the ones listed in RFC9110 and the PATCH + * method defined in RFC5789. If an + * unknown method is encountered, the extractor will use the value {@value HttpConstants#_OTHER} + * instead of it and put the original value in an extra {@code http.request.method_original} + * attribute. + * + *

Note: calling this method overrides the default known method sets completely; it does + * not supplement it. + * + * @param knownMethods A set of recognized HTTP request methods. + */ + @CanIgnoreReturnValue + public HttpSpanNameExtractorBuilder setKnownMethods(Set knownMethods) { + this.knownMethods = new HashSet<>(knownMethods); + return this; + } + + /** + * Returns a new {@link HttpSpanNameExtractor} with the settings of this {@link + * HttpSpanNameExtractorBuilder}. + */ + public SpanNameExtractor build() { + return new HttpSpanNameExtractor<>(this); + } +} diff --git a/instrumentation/akka/akka-http-10.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/akkahttp/client/AkkaHttpClientSingletons.java b/instrumentation/akka/akka-http-10.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/akkahttp/client/AkkaHttpClientSingletons.java index b1ffb83240..5c2887f628 100644 --- a/instrumentation/akka/akka-http-10.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/akkahttp/client/AkkaHttpClientSingletons.java +++ b/instrumentation/akka/akka-http-10.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/akkahttp/client/AkkaHttpClientSingletons.java @@ -32,7 +32,9 @@ public class AkkaHttpClientSingletons { Instrumenter.builder( GlobalOpenTelemetry.get(), AkkaHttpUtil.instrumentationName(), - HttpSpanNameExtractor.create(httpAttributesGetter)) + HttpSpanNameExtractor.builder(httpAttributesGetter) + .setKnownMethods(CommonConfig.get().getKnownHttpRequestMethods()) + .build()) .setSpanStatusExtractor(HttpSpanStatusExtractor.create(httpAttributesGetter)) .addAttributesExtractor( HttpClientAttributesExtractor.builder(httpAttributesGetter) diff --git a/instrumentation/akka/akka-http-10.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/akkahttp/server/AkkaHttpServerSingletons.java b/instrumentation/akka/akka-http-10.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/akkahttp/server/AkkaHttpServerSingletons.java index 32bddb78b3..07e93a9e24 100644 --- a/instrumentation/akka/akka-http-10.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/akkahttp/server/AkkaHttpServerSingletons.java +++ b/instrumentation/akka/akka-http-10.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/akkahttp/server/AkkaHttpServerSingletons.java @@ -29,7 +29,9 @@ public final class AkkaHttpServerSingletons { Instrumenter.builder( GlobalOpenTelemetry.get(), AkkaHttpUtil.instrumentationName(), - HttpSpanNameExtractor.create(httpAttributesGetter)) + HttpSpanNameExtractor.builder(httpAttributesGetter) + .setKnownMethods(CommonConfig.get().getKnownHttpRequestMethods()) + .build()) .setSpanStatusExtractor(HttpSpanStatusExtractor.create(httpAttributesGetter)) .addAttributesExtractor( HttpServerAttributesExtractor.builder(httpAttributesGetter) diff --git a/instrumentation/apache-httpasyncclient-4.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/apachehttpasyncclient/ApacheHttpAsyncClientSingletons.java b/instrumentation/apache-httpasyncclient-4.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/apachehttpasyncclient/ApacheHttpAsyncClientSingletons.java index c9fb9c61d6..e8aa7ffe57 100644 --- a/instrumentation/apache-httpasyncclient-4.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/apachehttpasyncclient/ApacheHttpAsyncClientSingletons.java +++ b/instrumentation/apache-httpasyncclient-4.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/apachehttpasyncclient/ApacheHttpAsyncClientSingletons.java @@ -30,7 +30,9 @@ public final class ApacheHttpAsyncClientSingletons { Instrumenter.builder( GlobalOpenTelemetry.get(), INSTRUMENTATION_NAME, - HttpSpanNameExtractor.create(httpAttributesGetter)) + HttpSpanNameExtractor.builder(httpAttributesGetter) + .setKnownMethods(CommonConfig.get().getKnownHttpRequestMethods()) + .build()) .setSpanStatusExtractor(HttpSpanStatusExtractor.create(httpAttributesGetter)) .addAttributesExtractor( HttpClientAttributesExtractor.builder(httpAttributesGetter) diff --git a/instrumentation/apache-httpclient/apache-httpclient-2.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/apachehttpclient/v2_0/ApacheHttpClientSingletons.java b/instrumentation/apache-httpclient/apache-httpclient-2.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/apachehttpclient/v2_0/ApacheHttpClientSingletons.java index 04c666868f..6f2d3194b5 100644 --- a/instrumentation/apache-httpclient/apache-httpclient-2.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/apachehttpclient/v2_0/ApacheHttpClientSingletons.java +++ b/instrumentation/apache-httpclient/apache-httpclient-2.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/apachehttpclient/v2_0/ApacheHttpClientSingletons.java @@ -30,7 +30,9 @@ public final class ApacheHttpClientSingletons { Instrumenter.builder( GlobalOpenTelemetry.get(), INSTRUMENTATION_NAME, - HttpSpanNameExtractor.create(httpAttributesGetter)) + HttpSpanNameExtractor.builder(httpAttributesGetter) + .setKnownMethods(CommonConfig.get().getKnownHttpRequestMethods()) + .build()) .setSpanStatusExtractor(HttpSpanStatusExtractor.create(httpAttributesGetter)) .addAttributesExtractor( HttpClientAttributesExtractor.builder(httpAttributesGetter) diff --git a/instrumentation/apache-httpclient/apache-httpclient-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/apachehttpclient/v4_0/ApacheHttpClientSingletons.java b/instrumentation/apache-httpclient/apache-httpclient-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/apachehttpclient/v4_0/ApacheHttpClientSingletons.java index b585675ad2..91f14f48b9 100644 --- a/instrumentation/apache-httpclient/apache-httpclient-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/apachehttpclient/v4_0/ApacheHttpClientSingletons.java +++ b/instrumentation/apache-httpclient/apache-httpclient-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/apachehttpclient/v4_0/ApacheHttpClientSingletons.java @@ -30,7 +30,9 @@ public final class ApacheHttpClientSingletons { Instrumenter.builder( GlobalOpenTelemetry.get(), INSTRUMENTATION_NAME, - HttpSpanNameExtractor.create(httpAttributesGetter)) + HttpSpanNameExtractor.builder(httpAttributesGetter) + .setKnownMethods(CommonConfig.get().getKnownHttpRequestMethods()) + .build()) .setSpanStatusExtractor(HttpSpanStatusExtractor.create(httpAttributesGetter)) .addAttributesExtractor( HttpClientAttributesExtractor.builder(httpAttributesGetter) diff --git a/instrumentation/apache-httpclient/apache-httpclient-4.3/library/src/main/java/io/opentelemetry/instrumentation/apachehttpclient/v4_3/ApacheHttpClientTelemetryBuilder.java b/instrumentation/apache-httpclient/apache-httpclient-4.3/library/src/main/java/io/opentelemetry/instrumentation/apachehttpclient/v4_3/ApacheHttpClientTelemetryBuilder.java index 0c4d22bf48..b4f35f147f 100644 --- a/instrumentation/apache-httpclient/apache-httpclient-4.3/library/src/main/java/io/opentelemetry/instrumentation/apachehttpclient/v4_3/ApacheHttpClientTelemetryBuilder.java +++ b/instrumentation/apache-httpclient/apache-httpclient-4.3/library/src/main/java/io/opentelemetry/instrumentation/apachehttpclient/v4_3/ApacheHttpClientTelemetryBuilder.java @@ -16,6 +16,7 @@ import io.opentelemetry.instrumentation.api.instrumenter.http.HttpClientAttribut import io.opentelemetry.instrumentation.api.instrumenter.http.HttpClientExperimentalMetrics; import io.opentelemetry.instrumentation.api.instrumenter.http.HttpClientMetrics; import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanNameExtractor; +import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanNameExtractorBuilder; import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanStatusExtractor; import java.util.ArrayList; import java.util.List; @@ -34,6 +35,8 @@ public final class ApacheHttpClientTelemetryBuilder { private final HttpClientAttributesExtractorBuilder httpAttributesExtractorBuilder = HttpClientAttributesExtractor.builder(ApacheHttpClientHttpAttributesGetter.INSTANCE); + private final HttpSpanNameExtractorBuilder httpSpanNameExtractorBuilder = + HttpSpanNameExtractor.builder(ApacheHttpClientHttpAttributesGetter.INSTANCE); private boolean emitExperimentalHttpClientMetrics = false; ApacheHttpClientTelemetryBuilder(OpenTelemetry openTelemetry) { @@ -90,6 +93,7 @@ public final class ApacheHttpClientTelemetryBuilder { @CanIgnoreReturnValue public ApacheHttpClientTelemetryBuilder setKnownMethods(Set knownMethods) { httpAttributesExtractorBuilder.setKnownMethods(knownMethods); + httpSpanNameExtractorBuilder.setKnownMethods(knownMethods); return this; } @@ -116,9 +120,7 @@ public final class ApacheHttpClientTelemetryBuilder { InstrumenterBuilder builder = Instrumenter.builder( - openTelemetry, - INSTRUMENTATION_NAME, - HttpSpanNameExtractor.create(httpAttributesGetter)) + openTelemetry, INSTRUMENTATION_NAME, httpSpanNameExtractorBuilder.build()) .setSpanStatusExtractor(HttpSpanStatusExtractor.create(httpAttributesGetter)) .addAttributesExtractor(httpAttributesExtractorBuilder.build()) .addAttributesExtractors(additionalExtractors) diff --git a/instrumentation/apache-httpclient/apache-httpclient-5.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/apachehttpclient/v5_0/ApacheHttpClientSingletons.java b/instrumentation/apache-httpclient/apache-httpclient-5.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/apachehttpclient/v5_0/ApacheHttpClientSingletons.java index 7f0395462b..89d55f6266 100644 --- a/instrumentation/apache-httpclient/apache-httpclient-5.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/apachehttpclient/v5_0/ApacheHttpClientSingletons.java +++ b/instrumentation/apache-httpclient/apache-httpclient-5.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/apachehttpclient/v5_0/ApacheHttpClientSingletons.java @@ -31,7 +31,9 @@ public final class ApacheHttpClientSingletons { Instrumenter.builder( GlobalOpenTelemetry.get(), INSTRUMENTATION_NAME, - HttpSpanNameExtractor.create(httpAttributesGetter)) + HttpSpanNameExtractor.builder(httpAttributesGetter) + .setKnownMethods(CommonConfig.get().getKnownHttpRequestMethods()) + .build()) .setSpanStatusExtractor(HttpSpanStatusExtractor.create(httpAttributesGetter)) .addAttributesExtractor( HttpClientAttributesExtractor.builder(httpAttributesGetter) diff --git a/instrumentation/armeria-1.3/library/src/main/java/io/opentelemetry/instrumentation/armeria/v1_3/ArmeriaTelemetryBuilder.java b/instrumentation/armeria-1.3/library/src/main/java/io/opentelemetry/instrumentation/armeria/v1_3/ArmeriaTelemetryBuilder.java index 9e3c3ad658..1ecf5b7138 100644 --- a/instrumentation/armeria-1.3/library/src/main/java/io/opentelemetry/instrumentation/armeria/v1_3/ArmeriaTelemetryBuilder.java +++ b/instrumentation/armeria-1.3/library/src/main/java/io/opentelemetry/instrumentation/armeria/v1_3/ArmeriaTelemetryBuilder.java @@ -25,6 +25,7 @@ import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerExperime import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerMetrics; import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRoute; import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanNameExtractor; +import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanNameExtractorBuilder; import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanStatusExtractor; import io.opentelemetry.instrumentation.armeria.v1_3.internal.ArmeriaHttpClientAttributesGetter; import io.opentelemetry.semconv.trace.attributes.SemanticAttributes; @@ -56,6 +57,11 @@ public final class ArmeriaTelemetryBuilder { httpServerAttributesExtractorBuilder = HttpServerAttributesExtractor.builder(ArmeriaHttpServerAttributesGetter.INSTANCE); + private final HttpSpanNameExtractorBuilder httpClientSpanNameExtractorBuilder = + HttpSpanNameExtractor.builder(ArmeriaHttpClientAttributesGetter.INSTANCE); + private final HttpSpanNameExtractorBuilder httpServerSpanNameExtractorBuilder = + HttpSpanNameExtractor.builder(ArmeriaHttpServerAttributesGetter.INSTANCE); + private Function< SpanStatusExtractor, ? extends SpanStatusExtractor> @@ -167,6 +173,8 @@ public final class ArmeriaTelemetryBuilder { public ArmeriaTelemetryBuilder setKnownMethods(Set knownMethods) { httpClientAttributesExtractorBuilder.setKnownMethods(knownMethods); httpServerAttributesExtractorBuilder.setKnownMethods(knownMethods); + httpClientSpanNameExtractorBuilder.setKnownMethods(knownMethods); + httpServerSpanNameExtractorBuilder.setKnownMethods(knownMethods); return this; } @@ -204,14 +212,10 @@ public final class ArmeriaTelemetryBuilder { InstrumenterBuilder clientInstrumenterBuilder = Instrumenter.builder( - openTelemetry, - INSTRUMENTATION_NAME, - HttpSpanNameExtractor.create(clientAttributesGetter)); + openTelemetry, INSTRUMENTATION_NAME, httpClientSpanNameExtractorBuilder.build()); InstrumenterBuilder serverInstrumenterBuilder = Instrumenter.builder( - openTelemetry, - INSTRUMENTATION_NAME, - HttpSpanNameExtractor.create(serverAttributesGetter)); + openTelemetry, INSTRUMENTATION_NAME, httpServerSpanNameExtractorBuilder.build()); Stream.of(clientInstrumenterBuilder, serverInstrumenterBuilder) .forEach(instrumenter -> instrumenter.addAttributesExtractors(additionalExtractors)); diff --git a/instrumentation/async-http-client/async-http-client-1.9/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/asynchttpclient/v1_9/AsyncHttpClientSingletons.java b/instrumentation/async-http-client/async-http-client-1.9/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/asynchttpclient/v1_9/AsyncHttpClientSingletons.java index 5c29e7efa1..2a329f4394 100644 --- a/instrumentation/async-http-client/async-http-client-1.9/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/asynchttpclient/v1_9/AsyncHttpClientSingletons.java +++ b/instrumentation/async-http-client/async-http-client-1.9/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/asynchttpclient/v1_9/AsyncHttpClientSingletons.java @@ -31,7 +31,9 @@ public final class AsyncHttpClientSingletons { Instrumenter.builder( GlobalOpenTelemetry.get(), INSTRUMENTATION_NAME, - HttpSpanNameExtractor.create(httpAttributesGetter)) + HttpSpanNameExtractor.builder(httpAttributesGetter) + .setKnownMethods(CommonConfig.get().getKnownHttpRequestMethods()) + .build()) .setSpanStatusExtractor(HttpSpanStatusExtractor.create(httpAttributesGetter)) .addAttributesExtractor( HttpClientAttributesExtractor.builder(httpAttributesGetter) diff --git a/instrumentation/async-http-client/async-http-client-2.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/asynchttpclient/v2_0/AsyncHttpClientSingletons.java b/instrumentation/async-http-client/async-http-client-2.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/asynchttpclient/v2_0/AsyncHttpClientSingletons.java index 3092afd52b..d339fa8cf2 100644 --- a/instrumentation/async-http-client/async-http-client-2.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/asynchttpclient/v2_0/AsyncHttpClientSingletons.java +++ b/instrumentation/async-http-client/async-http-client-2.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/asynchttpclient/v2_0/AsyncHttpClientSingletons.java @@ -30,7 +30,9 @@ public final class AsyncHttpClientSingletons { Instrumenter.builder( GlobalOpenTelemetry.get(), INSTRUMENTATION_NAME, - HttpSpanNameExtractor.create(httpAttributesGetter)) + HttpSpanNameExtractor.builder(httpAttributesGetter) + .setKnownMethods(CommonConfig.get().getKnownHttpRequestMethods()) + .build()) .setSpanStatusExtractor(HttpSpanStatusExtractor.create(httpAttributesGetter)) .addAttributesExtractor( HttpClientAttributesExtractor.builder(httpAttributesGetter) diff --git a/instrumentation/google-http-client-1.19/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/googlehttpclient/GoogleHttpClientSingletons.java b/instrumentation/google-http-client-1.19/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/googlehttpclient/GoogleHttpClientSingletons.java index d4dd58adef..25497c4c80 100644 --- a/instrumentation/google-http-client-1.19/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/googlehttpclient/GoogleHttpClientSingletons.java +++ b/instrumentation/google-http-client-1.19/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/googlehttpclient/GoogleHttpClientSingletons.java @@ -31,7 +31,9 @@ public class GoogleHttpClientSingletons { Instrumenter.builder( GlobalOpenTelemetry.get(), INSTRUMENTATION_NAME, - HttpSpanNameExtractor.create(httpAttributesGetter)) + HttpSpanNameExtractor.builder(httpAttributesGetter) + .setKnownMethods(CommonConfig.get().getKnownHttpRequestMethods()) + .build()) .setSpanStatusExtractor(HttpSpanStatusExtractor.create(httpAttributesGetter)) .addAttributesExtractor( HttpClientAttributesExtractor.builder(httpAttributesGetter) diff --git a/instrumentation/grizzly-2.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/grizzly/GrizzlySingletons.java b/instrumentation/grizzly-2.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/grizzly/GrizzlySingletons.java index ce851ff0fb..8bab9d6430 100644 --- a/instrumentation/grizzly-2.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/grizzly/GrizzlySingletons.java +++ b/instrumentation/grizzly-2.3/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/grizzly/GrizzlySingletons.java @@ -30,7 +30,9 @@ public final class GrizzlySingletons { Instrumenter.builder( GlobalOpenTelemetry.get(), "io.opentelemetry.grizzly-2.3", - HttpSpanNameExtractor.create(httpAttributesGetter)) + HttpSpanNameExtractor.builder(httpAttributesGetter) + .setKnownMethods(CommonConfig.get().getKnownHttpRequestMethods()) + .build()) .setSpanStatusExtractor(HttpSpanStatusExtractor.create(httpAttributesGetter)) .addAttributesExtractor( HttpServerAttributesExtractor.builder(httpAttributesGetter) diff --git a/instrumentation/http-url-connection/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/httpurlconnection/HttpUrlConnectionSingletons.java b/instrumentation/http-url-connection/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/httpurlconnection/HttpUrlConnectionSingletons.java index 792876fe04..f20c3b8321 100644 --- a/instrumentation/http-url-connection/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/httpurlconnection/HttpUrlConnectionSingletons.java +++ b/instrumentation/http-url-connection/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/httpurlconnection/HttpUrlConnectionSingletons.java @@ -28,7 +28,9 @@ public final class HttpUrlConnectionSingletons { Instrumenter.builder( GlobalOpenTelemetry.get(), "io.opentelemetry.http-url-connection", - HttpSpanNameExtractor.create(httpAttributesGetter)) + HttpSpanNameExtractor.builder(httpAttributesGetter) + .setKnownMethods(CommonConfig.get().getKnownHttpRequestMethods()) + .build()) .setSpanStatusExtractor(HttpSpanStatusExtractor.create(httpAttributesGetter)) .addAttributesExtractor( HttpClientAttributesExtractor.builder(httpAttributesGetter) diff --git a/instrumentation/java-http-client/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/httpclient/JavaHttpClientSingletons.java b/instrumentation/java-http-client/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/httpclient/JavaHttpClientSingletons.java index 2d45909361..f11fc34cf0 100644 --- a/instrumentation/java-http-client/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/httpclient/JavaHttpClientSingletons.java +++ b/instrumentation/java-http-client/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/httpclient/JavaHttpClientSingletons.java @@ -33,6 +33,7 @@ public class JavaHttpClientSingletons { .setCapturedRequestHeaders(CommonConfig.get().getClientRequestHeaders()) .setCapturedResponseHeaders(CommonConfig.get().getClientResponseHeaders()) .setKnownMethods(CommonConfig.get().getKnownHttpRequestMethods()), + builder -> builder.setKnownMethods(CommonConfig.get().getKnownHttpRequestMethods()), singletonList( PeerServiceAttributesExtractor.create( JavaHttpClientAttributesGetter.INSTANCE, diff --git a/instrumentation/java-http-client/library/src/main/java/io/opentelemetry/instrumentation/httpclient/JavaHttpClientTelemetryBuilder.java b/instrumentation/java-http-client/library/src/main/java/io/opentelemetry/instrumentation/httpclient/JavaHttpClientTelemetryBuilder.java index 5e2a9d4e0e..50f0af8d50 100644 --- a/instrumentation/java-http-client/library/src/main/java/io/opentelemetry/instrumentation/httpclient/JavaHttpClientTelemetryBuilder.java +++ b/instrumentation/java-http-client/library/src/main/java/io/opentelemetry/instrumentation/httpclient/JavaHttpClientTelemetryBuilder.java @@ -10,6 +10,7 @@ import io.opentelemetry.api.OpenTelemetry; import io.opentelemetry.instrumentation.api.instrumenter.AttributesExtractor; import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter; import io.opentelemetry.instrumentation.api.instrumenter.http.HttpClientAttributesExtractorBuilder; +import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanNameExtractorBuilder; import io.opentelemetry.instrumentation.httpclient.internal.HttpHeadersSetter; import io.opentelemetry.instrumentation.httpclient.internal.JavaHttpClientInstrumenterFactory; import java.net.http.HttpRequest; @@ -25,9 +26,10 @@ public final class JavaHttpClientTelemetryBuilder { private final List>> additionalExtractors = new ArrayList<>(); - private Consumer>> extractorConfigurer = builder -> {}; + private Consumer> spanNameExtractorConfigurer = + builder -> {}; private boolean emitExperimentalHttpClientMetrics = false; JavaHttpClientTelemetryBuilder(OpenTelemetry openTelemetry) { @@ -86,6 +88,8 @@ public final class JavaHttpClientTelemetryBuilder { public JavaHttpClientTelemetryBuilder setKnownMethods(Set knownMethods) { extractorConfigurer = extractorConfigurer.andThen(builder -> builder.setKnownMethods(knownMethods)); + spanNameExtractorConfigurer = + spanNameExtractorConfigurer.andThen(builder -> builder.setKnownMethods(knownMethods)); return this; } @@ -107,6 +111,7 @@ public final class JavaHttpClientTelemetryBuilder { JavaHttpClientInstrumenterFactory.createInstrumenter( openTelemetry, extractorConfigurer, + spanNameExtractorConfigurer, additionalExtractors, emitExperimentalHttpClientMetrics); diff --git a/instrumentation/java-http-client/library/src/main/java/io/opentelemetry/instrumentation/httpclient/internal/JavaHttpClientInstrumenterFactory.java b/instrumentation/java-http-client/library/src/main/java/io/opentelemetry/instrumentation/httpclient/internal/JavaHttpClientInstrumenterFactory.java index 4475fd096c..c351222058 100644 --- a/instrumentation/java-http-client/library/src/main/java/io/opentelemetry/instrumentation/httpclient/internal/JavaHttpClientInstrumenterFactory.java +++ b/instrumentation/java-http-client/library/src/main/java/io/opentelemetry/instrumentation/httpclient/internal/JavaHttpClientInstrumenterFactory.java @@ -15,6 +15,7 @@ import io.opentelemetry.instrumentation.api.instrumenter.http.HttpClientAttribut import io.opentelemetry.instrumentation.api.instrumenter.http.HttpClientExperimentalMetrics; import io.opentelemetry.instrumentation.api.instrumenter.http.HttpClientMetrics; import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanNameExtractor; +import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanNameExtractorBuilder; import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanStatusExtractor; import java.net.http.HttpRequest; import java.net.http.HttpResponse; @@ -32,6 +33,7 @@ public final class JavaHttpClientInstrumenterFactory { OpenTelemetry openTelemetry, Consumer>> extractorConfigurer, + Consumer> spanNameExtractorConfigurer, List>> additionalExtractors, boolean emitExperimentalHttpClientMetrics) { @@ -42,11 +44,13 @@ public final class JavaHttpClientInstrumenterFactory { HttpClientAttributesExtractor.builder(httpAttributesGetter); extractorConfigurer.accept(httpAttributesExtractorBuilder); + HttpSpanNameExtractorBuilder httpSpanNameExtractorBuilder = + HttpSpanNameExtractor.builder(httpAttributesGetter); + spanNameExtractorConfigurer.accept(httpSpanNameExtractorBuilder); + InstrumenterBuilder> builder = Instrumenter.>builder( - openTelemetry, - INSTRUMENTATION_NAME, - HttpSpanNameExtractor.create(httpAttributesGetter)) + openTelemetry, INSTRUMENTATION_NAME, httpSpanNameExtractorBuilder.build()) .setSpanStatusExtractor(HttpSpanStatusExtractor.create(httpAttributesGetter)) .addAttributesExtractor(httpAttributesExtractorBuilder.build()) .addAttributesExtractors(additionalExtractors) diff --git a/instrumentation/jetty-httpclient/jetty-httpclient-9.2/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jetty/httpclient/v9_2/JettyHttpClientSingletons.java b/instrumentation/jetty-httpclient/jetty-httpclient-9.2/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jetty/httpclient/v9_2/JettyHttpClientSingletons.java index 8b57b37e30..80df4f80ca 100644 --- a/instrumentation/jetty-httpclient/jetty-httpclient-9.2/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jetty/httpclient/v9_2/JettyHttpClientSingletons.java +++ b/instrumentation/jetty-httpclient/jetty-httpclient-9.2/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jetty/httpclient/v9_2/JettyHttpClientSingletons.java @@ -26,6 +26,7 @@ public class JettyHttpClientSingletons { .setCapturedRequestHeaders(CommonConfig.get().getClientRequestHeaders()) .setCapturedResponseHeaders(CommonConfig.get().getClientResponseHeaders()) .setKnownMethods(CommonConfig.get().getKnownHttpRequestMethods()), + builder -> builder.setKnownMethods(CommonConfig.get().getKnownHttpRequestMethods()), singletonList( PeerServiceAttributesExtractor.create( JettyClientHttpAttributesGetter.INSTANCE, diff --git a/instrumentation/jetty-httpclient/jetty-httpclient-9.2/library/src/main/java/io/opentelemetry/instrumentation/jetty/httpclient/v9_2/JettyClientTelemetryBuilder.java b/instrumentation/jetty-httpclient/jetty-httpclient-9.2/library/src/main/java/io/opentelemetry/instrumentation/jetty/httpclient/v9_2/JettyClientTelemetryBuilder.java index f76ef71f14..9c940a05dd 100644 --- a/instrumentation/jetty-httpclient/jetty-httpclient-9.2/library/src/main/java/io/opentelemetry/instrumentation/jetty/httpclient/v9_2/JettyClientTelemetryBuilder.java +++ b/instrumentation/jetty-httpclient/jetty-httpclient-9.2/library/src/main/java/io/opentelemetry/instrumentation/jetty/httpclient/v9_2/JettyClientTelemetryBuilder.java @@ -9,6 +9,7 @@ import com.google.errorprone.annotations.CanIgnoreReturnValue; import io.opentelemetry.api.OpenTelemetry; import io.opentelemetry.instrumentation.api.instrumenter.AttributesExtractor; import io.opentelemetry.instrumentation.api.instrumenter.http.HttpClientAttributesExtractorBuilder; +import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanNameExtractorBuilder; import io.opentelemetry.instrumentation.jetty.httpclient.v9_2.internal.JettyClientInstrumenterFactory; import java.util.ArrayList; import java.util.List; @@ -27,6 +28,8 @@ public final class JettyClientTelemetryBuilder { new ArrayList<>(); private Consumer> extractorConfigurer = builder -> {}; + private Consumer> spanNameExtractorConfigurer = + builder -> {}; private boolean emitExperimentalHttpClientMetrics = false; private HttpClientTransport httpClientTransport; private SslContextFactory sslContextFactory; @@ -100,6 +103,8 @@ public final class JettyClientTelemetryBuilder { public JettyClientTelemetryBuilder setKnownMethods(Set knownMethods) { extractorConfigurer = extractorConfigurer.andThen(builder -> builder.setKnownMethods(knownMethods)); + spanNameExtractorConfigurer = + spanNameExtractorConfigurer.andThen(builder -> builder.setKnownMethods(knownMethods)); return this; } @@ -126,6 +131,7 @@ public final class JettyClientTelemetryBuilder { JettyClientInstrumenterFactory.create( openTelemetry, extractorConfigurer, + spanNameExtractorConfigurer, additionalExtractors, emitExperimentalHttpClientMetrics), sslContextFactory, diff --git a/instrumentation/jetty-httpclient/jetty-httpclient-9.2/library/src/main/java/io/opentelemetry/instrumentation/jetty/httpclient/v9_2/internal/JettyClientInstrumenterFactory.java b/instrumentation/jetty-httpclient/jetty-httpclient-9.2/library/src/main/java/io/opentelemetry/instrumentation/jetty/httpclient/v9_2/internal/JettyClientInstrumenterFactory.java index 51c8a5a970..f26a9b658b 100644 --- a/instrumentation/jetty-httpclient/jetty-httpclient-9.2/library/src/main/java/io/opentelemetry/instrumentation/jetty/httpclient/v9_2/internal/JettyClientInstrumenterFactory.java +++ b/instrumentation/jetty-httpclient/jetty-httpclient-9.2/library/src/main/java/io/opentelemetry/instrumentation/jetty/httpclient/v9_2/internal/JettyClientInstrumenterFactory.java @@ -14,6 +14,7 @@ import io.opentelemetry.instrumentation.api.instrumenter.http.HttpClientAttribut import io.opentelemetry.instrumentation.api.instrumenter.http.HttpClientExperimentalMetrics; import io.opentelemetry.instrumentation.api.instrumenter.http.HttpClientMetrics; import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanNameExtractor; +import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanNameExtractorBuilder; import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanStatusExtractor; import java.util.List; import java.util.function.Consumer; @@ -31,6 +32,7 @@ public final class JettyClientInstrumenterFactory { public static Instrumenter create( OpenTelemetry openTelemetry, Consumer> extractorConfigurer, + Consumer> spanNameExtractorConfigurer, List> additionalExtractors, boolean emitExperimentalHttpClientMetrics) { @@ -40,11 +42,13 @@ public final class JettyClientInstrumenterFactory { HttpClientAttributesExtractor.builder(httpAttributesGetter); extractorConfigurer.accept(httpAttributesExtractorBuilder); + HttpSpanNameExtractorBuilder httpSpanNameExtractorBuilder = + HttpSpanNameExtractor.builder(httpAttributesGetter); + spanNameExtractorConfigurer.accept(httpSpanNameExtractorBuilder); + InstrumenterBuilder builder = Instrumenter.builder( - openTelemetry, - INSTRUMENTATION_NAME, - HttpSpanNameExtractor.create(httpAttributesGetter)) + openTelemetry, INSTRUMENTATION_NAME, httpSpanNameExtractorBuilder.build()) .setSpanStatusExtractor(HttpSpanStatusExtractor.create(httpAttributesGetter)) .addAttributesExtractor(httpAttributesExtractorBuilder.build()) .addAttributesExtractors(additionalExtractors) diff --git a/instrumentation/jodd-http-4.2/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/joddhttp/v4_2/JoddHttpSingletons.java b/instrumentation/jodd-http-4.2/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/joddhttp/v4_2/JoddHttpSingletons.java index 9cc5bfd736..9ee19d238d 100644 --- a/instrumentation/jodd-http-4.2/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/joddhttp/v4_2/JoddHttpSingletons.java +++ b/instrumentation/jodd-http-4.2/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/joddhttp/v4_2/JoddHttpSingletons.java @@ -30,7 +30,9 @@ public final class JoddHttpSingletons { Instrumenter.builder( GlobalOpenTelemetry.get(), INSTRUMENTATION_NAME, - HttpSpanNameExtractor.create(httpAttributesGetter)) + HttpSpanNameExtractor.builder(httpAttributesGetter) + .setKnownMethods(CommonConfig.get().getKnownHttpRequestMethods()) + .build()) .setSpanStatusExtractor(HttpSpanStatusExtractor.create(httpAttributesGetter)) .addAttributesExtractor( HttpClientAttributesExtractor.builder(httpAttributesGetter) diff --git a/instrumentation/ktor/ktor-1.0/library/src/main/kotlin/io/opentelemetry/instrumentation/ktor/v1_0/KtorServerTracing.kt b/instrumentation/ktor/ktor-1.0/library/src/main/kotlin/io/opentelemetry/instrumentation/ktor/v1_0/KtorServerTracing.kt index 6ef644bc55..f3073fc223 100644 --- a/instrumentation/ktor/ktor-1.0/library/src/main/kotlin/io/opentelemetry/instrumentation/ktor/v1_0/KtorServerTracing.kt +++ b/instrumentation/ktor/ktor-1.0/library/src/main/kotlin/io/opentelemetry/instrumentation/ktor/v1_0/KtorServerTracing.kt @@ -38,6 +38,8 @@ class KtorServerTracing private constructor( internal val httpAttributesExtractorBuilder = HttpServerAttributesExtractor.builder(KtorHttpServerAttributesGetter.INSTANCE) + internal val httpSpanNameExtractorBuilder = HttpSpanNameExtractor.builder(KtorHttpServerAttributesGetter.INSTANCE) + internal var statusExtractor: (SpanStatusExtractor) -> SpanStatusExtractor = { a -> a } @@ -74,6 +76,7 @@ class KtorServerTracing private constructor( fun setKnownMethods(knownMethods: Set) { httpAttributesExtractorBuilder.setKnownMethods(knownMethods) + httpSpanNameExtractorBuilder.setKnownMethods(knownMethods) } internal fun isOpenTelemetryInitialized(): Boolean = this::openTelemetry.isInitialized @@ -112,7 +115,7 @@ class KtorServerTracing private constructor( val instrumenterBuilder = Instrumenter.builder( configuration.openTelemetry, INSTRUMENTATION_NAME, - HttpSpanNameExtractor.create(httpAttributesGetter), + configuration.httpSpanNameExtractorBuilder.build() ) configuration.additionalExtractors.forEach { instrumenterBuilder.addAttributesExtractor(it) } diff --git a/instrumentation/ktor/ktor-2.0/library/src/main/kotlin/io/opentelemetry/instrumentation/ktor/v2_0/client/KtorClientTracingBuilder.kt b/instrumentation/ktor/ktor-2.0/library/src/main/kotlin/io/opentelemetry/instrumentation/ktor/v2_0/client/KtorClientTracingBuilder.kt index c29e30d2eb..1de7914339 100644 --- a/instrumentation/ktor/ktor-2.0/library/src/main/kotlin/io/opentelemetry/instrumentation/ktor/v2_0/client/KtorClientTracingBuilder.kt +++ b/instrumentation/ktor/ktor-2.0/library/src/main/kotlin/io/opentelemetry/instrumentation/ktor/v2_0/client/KtorClientTracingBuilder.kt @@ -23,6 +23,7 @@ class KtorClientTracingBuilder { private var openTelemetry: OpenTelemetry? = null private val additionalExtractors = mutableListOf>() private val httpAttributesExtractorBuilder = HttpClientAttributesExtractor.builder(KtorHttpClientAttributesGetter) + private val httpSpanNameExtractorBuilder = HttpSpanNameExtractor.builder(KtorHttpClientAttributesGetter) private var emitExperimentalHttpClientMetrics = false fun setOpenTelemetry(openTelemetry: OpenTelemetry) { @@ -45,6 +46,7 @@ class KtorClientTracingBuilder { fun setKnownMethods(knownMethods: Set) { httpAttributesExtractorBuilder.setKnownMethods(knownMethods) + httpSpanNameExtractorBuilder.setKnownMethods(knownMethods) } fun addAttributesExtractors(vararg extractors: AttributesExtractor) = @@ -72,7 +74,7 @@ class KtorClientTracingBuilder { val instrumenterBuilder = Instrumenter.builder( initializedOpenTelemetry, INSTRUMENTATION_NAME, - HttpSpanNameExtractor.create(KtorHttpClientAttributesGetter), + httpSpanNameExtractorBuilder.build() ) .setSpanStatusExtractor(HttpSpanStatusExtractor.create(KtorHttpClientAttributesGetter)) .addAttributesExtractor(httpAttributesExtractorBuilder.build()) diff --git a/instrumentation/ktor/ktor-2.0/library/src/main/kotlin/io/opentelemetry/instrumentation/ktor/v2_0/server/KtorServerTracing.kt b/instrumentation/ktor/ktor-2.0/library/src/main/kotlin/io/opentelemetry/instrumentation/ktor/v2_0/server/KtorServerTracing.kt index 03dbc7d6f0..18d28944df 100644 --- a/instrumentation/ktor/ktor-2.0/library/src/main/kotlin/io/opentelemetry/instrumentation/ktor/v2_0/server/KtorServerTracing.kt +++ b/instrumentation/ktor/ktor-2.0/library/src/main/kotlin/io/opentelemetry/instrumentation/ktor/v2_0/server/KtorServerTracing.kt @@ -39,6 +39,8 @@ class KtorServerTracing private constructor( internal val httpAttributesExtractorBuilder = HttpServerAttributesExtractor.builder(KtorHttpServerAttributesGetter.INSTANCE) + internal val httpSpanNameExtractorBuilder = HttpSpanNameExtractor.builder(KtorHttpServerAttributesGetter.INSTANCE) + internal var statusExtractor: (SpanStatusExtractor) -> SpanStatusExtractor = { a -> a } @@ -75,6 +77,7 @@ class KtorServerTracing private constructor( fun setKnownMethods(knownMethods: Set) { httpAttributesExtractorBuilder.setKnownMethods(knownMethods) + httpSpanNameExtractorBuilder.setKnownMethods(knownMethods) } internal fun isOpenTelemetryInitialized(): Boolean = this::openTelemetry.isInitialized @@ -112,7 +115,7 @@ class KtorServerTracing private constructor( val instrumenterBuilder = Instrumenter.builder( configuration.openTelemetry, INSTRUMENTATION_NAME, - HttpSpanNameExtractor.create(httpAttributesGetter), + configuration.httpSpanNameExtractorBuilder.build() ) configuration.additionalExtractors.forEach { instrumenterBuilder.addAttributesExtractor(it) } diff --git a/instrumentation/liberty/liberty-dispatcher-20.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/liberty/dispatcher/LibertyDispatcherSingletons.java b/instrumentation/liberty/liberty-dispatcher-20.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/liberty/dispatcher/LibertyDispatcherSingletons.java index 2c95aa4833..b53f52b900 100644 --- a/instrumentation/liberty/liberty-dispatcher-20.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/liberty/dispatcher/LibertyDispatcherSingletons.java +++ b/instrumentation/liberty/liberty-dispatcher-20.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/liberty/dispatcher/LibertyDispatcherSingletons.java @@ -29,7 +29,9 @@ public final class LibertyDispatcherSingletons { Instrumenter.builder( GlobalOpenTelemetry.get(), INSTRUMENTATION_NAME, - HttpSpanNameExtractor.create(httpAttributesGetter)) + HttpSpanNameExtractor.builder(httpAttributesGetter) + .setKnownMethods(CommonConfig.get().getKnownHttpRequestMethods()) + .build()) .setSpanStatusExtractor(HttpSpanStatusExtractor.create(httpAttributesGetter)) .addAttributesExtractor( HttpServerAttributesExtractor.builder(httpAttributesGetter) diff --git a/instrumentation/netty/netty-3.8/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v3_8/client/NettyClientSingletons.java b/instrumentation/netty/netty-3.8/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v3_8/client/NettyClientSingletons.java index 80a2e5ea60..8fcef38b74 100644 --- a/instrumentation/netty/netty-3.8/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v3_8/client/NettyClientSingletons.java +++ b/instrumentation/netty/netty-3.8/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v3_8/client/NettyClientSingletons.java @@ -36,7 +36,9 @@ public final class NettyClientSingletons { Instrumenter.builder( GlobalOpenTelemetry.get(), INSTRUMENTATION_NAME, - HttpSpanNameExtractor.create(httpAttributesGetter)) + HttpSpanNameExtractor.builder(httpAttributesGetter) + .setKnownMethods(CommonConfig.get().getKnownHttpRequestMethods()) + .build()) .setSpanStatusExtractor(HttpSpanStatusExtractor.create(httpAttributesGetter)) .addAttributesExtractor( HttpClientAttributesExtractor.builder(httpAttributesGetter) diff --git a/instrumentation/netty/netty-3.8/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v3_8/server/NettyServerSingletons.java b/instrumentation/netty/netty-3.8/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v3_8/server/NettyServerSingletons.java index 403d674555..0f251ae3e3 100644 --- a/instrumentation/netty/netty-3.8/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v3_8/server/NettyServerSingletons.java +++ b/instrumentation/netty/netty-3.8/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v3_8/server/NettyServerSingletons.java @@ -31,7 +31,9 @@ final class NettyServerSingletons { Instrumenter.builder( GlobalOpenTelemetry.get(), "io.opentelemetry.netty-3.8", - HttpSpanNameExtractor.create(httpServerAttributesGetter)) + HttpSpanNameExtractor.builder(httpServerAttributesGetter) + .setKnownMethods(CommonConfig.get().getKnownHttpRequestMethods()) + .build()) .setSpanStatusExtractor(HttpSpanStatusExtractor.create(httpServerAttributesGetter)) .addAttributesExtractor( HttpServerAttributesExtractor.builder(httpServerAttributesGetter) diff --git a/instrumentation/netty/netty-4-common/library/src/main/java/io/opentelemetry/instrumentation/netty/v4/common/internal/client/NettyClientInstrumenterFactory.java b/instrumentation/netty/netty-4-common/library/src/main/java/io/opentelemetry/instrumentation/netty/v4/common/internal/client/NettyClientInstrumenterFactory.java index f219c99bb6..d2035722f6 100644 --- a/instrumentation/netty/netty-4-common/library/src/main/java/io/opentelemetry/instrumentation/netty/v4/common/internal/client/NettyClientInstrumenterFactory.java +++ b/instrumentation/netty/netty-4-common/library/src/main/java/io/opentelemetry/instrumentation/netty/v4/common/internal/client/NettyClientInstrumenterFactory.java @@ -17,6 +17,7 @@ import io.opentelemetry.instrumentation.api.instrumenter.http.HttpClientAttribut import io.opentelemetry.instrumentation.api.instrumenter.http.HttpClientExperimentalMetrics; import io.opentelemetry.instrumentation.api.instrumenter.http.HttpClientMetrics; import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanNameExtractor; +import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanNameExtractorBuilder; import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanStatusExtractor; import io.opentelemetry.instrumentation.api.instrumenter.net.PeerServiceAttributesExtractor; import io.opentelemetry.instrumentation.netty.common.internal.NettyConnectionRequest; @@ -56,6 +57,7 @@ public final class NettyClientInstrumenterFactory { public Instrumenter createHttpInstrumenter( Consumer> extractorConfigurer, + Consumer> spanNameExtractorConfigurer, List> additionalHttpAttributeExtractors) { NettyHttpClientAttributesGetter httpAttributesGetter = new NettyHttpClientAttributesGetter(); @@ -64,11 +66,13 @@ public final class NettyClientInstrumenterFactory { HttpClientAttributesExtractor.builder(httpAttributesGetter); extractorConfigurer.accept(extractorBuilder); + HttpSpanNameExtractorBuilder httpSpanNameExtractorBuilder = + HttpSpanNameExtractor.builder(httpAttributesGetter); + spanNameExtractorConfigurer.accept(httpSpanNameExtractorBuilder); + InstrumenterBuilder builder = Instrumenter.builder( - openTelemetry, - instrumentationName, - HttpSpanNameExtractor.create(httpAttributesGetter)) + openTelemetry, instrumentationName, httpSpanNameExtractorBuilder.build()) .setSpanStatusExtractor(HttpSpanStatusExtractor.create(httpAttributesGetter)) .addAttributesExtractor(extractorBuilder.build()) .addAttributesExtractor( diff --git a/instrumentation/netty/netty-4-common/library/src/main/java/io/opentelemetry/instrumentation/netty/v4/common/internal/server/NettyServerInstrumenterFactory.java b/instrumentation/netty/netty-4-common/library/src/main/java/io/opentelemetry/instrumentation/netty/v4/common/internal/server/NettyServerInstrumenterFactory.java index 088ecc94c1..28ab52bb86 100644 --- a/instrumentation/netty/netty-4-common/library/src/main/java/io/opentelemetry/instrumentation/netty/v4/common/internal/server/NettyServerInstrumenterFactory.java +++ b/instrumentation/netty/netty-4-common/library/src/main/java/io/opentelemetry/instrumentation/netty/v4/common/internal/server/NettyServerInstrumenterFactory.java @@ -15,6 +15,7 @@ import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerExperime import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerMetrics; import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRoute; import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanNameExtractor; +import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanNameExtractorBuilder; import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanStatusExtractor; import io.opentelemetry.instrumentation.netty.common.internal.NettyErrorHolder; import io.opentelemetry.instrumentation.netty.v4.common.HttpRequestAndChannel; @@ -31,6 +32,7 @@ public final class NettyServerInstrumenterFactory { String instrumentationName, Consumer> extractorConfigurer, + Consumer> spanNameExtractorConfigurer, boolean emitExperimentalHttpServerMetrics) { NettyHttpServerAttributesGetter httpAttributesGetter = new NettyHttpServerAttributesGetter(); @@ -39,11 +41,13 @@ public final class NettyServerInstrumenterFactory { HttpServerAttributesExtractor.builder(httpAttributesGetter); extractorConfigurer.accept(extractorBuilder); + HttpSpanNameExtractorBuilder httpSpanNameExtractorBuilder = + HttpSpanNameExtractor.builder(httpAttributesGetter); + spanNameExtractorConfigurer.accept(httpSpanNameExtractorBuilder); + InstrumenterBuilder builder = Instrumenter.builder( - openTelemetry, - instrumentationName, - HttpSpanNameExtractor.create(httpAttributesGetter)) + openTelemetry, instrumentationName, httpSpanNameExtractorBuilder.build()) .setSpanStatusExtractor(HttpSpanStatusExtractor.create(httpAttributesGetter)) .addAttributesExtractor(extractorBuilder.build()) .addOperationMetrics(HttpServerMetrics.get()); diff --git a/instrumentation/netty/netty-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v4_0/client/NettyClientSingletons.java b/instrumentation/netty/netty-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v4_0/client/NettyClientSingletons.java index bac89dbe1a..a53d588dc0 100644 --- a/instrumentation/netty/netty-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v4_0/client/NettyClientSingletons.java +++ b/instrumentation/netty/netty-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v4_0/client/NettyClientSingletons.java @@ -56,6 +56,7 @@ public final class NettyClientSingletons { .setCapturedRequestHeaders(CommonConfig.get().getClientRequestHeaders()) .setCapturedResponseHeaders(CommonConfig.get().getClientResponseHeaders()) .setKnownMethods(CommonConfig.get().getKnownHttpRequestMethods()), + builder -> builder.setKnownMethods(CommonConfig.get().getKnownHttpRequestMethods()), Collections.emptyList()); CONNECTION_INSTRUMENTER = factory.createConnectionInstrumenter(); SSL_INSTRUMENTER = factory.createSslInstrumenter(); diff --git a/instrumentation/netty/netty-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v4_0/server/NettyServerSingletons.java b/instrumentation/netty/netty-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v4_0/server/NettyServerSingletons.java index 2b9b66d274..054735d0e9 100644 --- a/instrumentation/netty/netty-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v4_0/server/NettyServerSingletons.java +++ b/instrumentation/netty/netty-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v4_0/server/NettyServerSingletons.java @@ -23,6 +23,7 @@ public final class NettyServerSingletons { .setCapturedRequestHeaders(CommonConfig.get().getServerRequestHeaders()) .setCapturedResponseHeaders(CommonConfig.get().getServerResponseHeaders()) .setKnownMethods(CommonConfig.get().getKnownHttpRequestMethods()), + builder -> builder.setKnownMethods(CommonConfig.get().getKnownHttpRequestMethods()), CommonConfig.get().shouldEmitExperimentalHttpServerMetrics()); public static Instrumenter instrumenter() { diff --git a/instrumentation/netty/netty-4.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v4_1/NettyClientSingletons.java b/instrumentation/netty/netty-4.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v4_1/NettyClientSingletons.java index 3842aa3eea..20532c074d 100644 --- a/instrumentation/netty/netty-4.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v4_1/NettyClientSingletons.java +++ b/instrumentation/netty/netty-4.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v4_1/NettyClientSingletons.java @@ -56,6 +56,7 @@ public final class NettyClientSingletons { .setCapturedRequestHeaders(CommonConfig.get().getClientRequestHeaders()) .setCapturedResponseHeaders(CommonConfig.get().getClientResponseHeaders()) .setKnownMethods(CommonConfig.get().getKnownHttpRequestMethods()), + builder -> builder.setKnownMethods(CommonConfig.get().getKnownHttpRequestMethods()), Collections.emptyList()); CONNECTION_INSTRUMENTER = factory.createConnectionInstrumenter(); SSL_INSTRUMENTER = factory.createSslInstrumenter(); diff --git a/instrumentation/netty/netty-4.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v4_1/NettyServerSingletons.java b/instrumentation/netty/netty-4.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v4_1/NettyServerSingletons.java index f7956d6717..3675e720a5 100644 --- a/instrumentation/netty/netty-4.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v4_1/NettyServerSingletons.java +++ b/instrumentation/netty/netty-4.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v4_1/NettyServerSingletons.java @@ -23,6 +23,7 @@ public final class NettyServerSingletons { .setCapturedRequestHeaders(CommonConfig.get().getServerRequestHeaders()) .setCapturedResponseHeaders(CommonConfig.get().getServerResponseHeaders()) .setKnownMethods(CommonConfig.get().getKnownHttpRequestMethods()), + builder -> builder.setKnownMethods(CommonConfig.get().getKnownHttpRequestMethods()), CommonConfig.get().shouldEmitExperimentalHttpServerMetrics()); public static Instrumenter instrumenter() { diff --git a/instrumentation/netty/netty-4.1/library/src/main/java/io/opentelemetry/instrumentation/netty/v4_1/NettyClientTelemetryBuilder.java b/instrumentation/netty/netty-4.1/library/src/main/java/io/opentelemetry/instrumentation/netty/v4_1/NettyClientTelemetryBuilder.java index b9bca46de5..23440e2d56 100644 --- a/instrumentation/netty/netty-4.1/library/src/main/java/io/opentelemetry/instrumentation/netty/v4_1/NettyClientTelemetryBuilder.java +++ b/instrumentation/netty/netty-4.1/library/src/main/java/io/opentelemetry/instrumentation/netty/v4_1/NettyClientTelemetryBuilder.java @@ -10,6 +10,7 @@ import io.netty.handler.codec.http.HttpResponse; import io.opentelemetry.api.OpenTelemetry; import io.opentelemetry.instrumentation.api.instrumenter.AttributesExtractor; import io.opentelemetry.instrumentation.api.instrumenter.http.HttpClientAttributesExtractorBuilder; +import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanNameExtractorBuilder; import io.opentelemetry.instrumentation.netty.v4.common.HttpRequestAndChannel; import io.opentelemetry.instrumentation.netty.v4.common.internal.client.NettyClientInstrumenterFactory; import io.opentelemetry.instrumentation.netty.v4.common.internal.client.NettyConnectionInstrumentationFlag; @@ -28,6 +29,8 @@ public final class NettyClientTelemetryBuilder { private Consumer> extractorConfigurer = builder -> {}; + private Consumer> + spanNameExtractorConfigurer = builder -> {}; private boolean emitExperimentalHttpClientMetrics = false; NettyClientTelemetryBuilder(OpenTelemetry openTelemetry) { @@ -90,6 +93,8 @@ public final class NettyClientTelemetryBuilder { public NettyClientTelemetryBuilder setKnownMethods(Set knownMethods) { extractorConfigurer = extractorConfigurer.andThen(builder -> builder.setKnownMethods(knownMethods)); + spanNameExtractorConfigurer = + spanNameExtractorConfigurer.andThen(builder -> builder.setKnownMethods(knownMethods)); return this; } @@ -116,6 +121,7 @@ public final class NettyClientTelemetryBuilder { NettyConnectionInstrumentationFlag.DISABLED, Collections.emptyMap(), emitExperimentalHttpClientMetrics) - .createHttpInstrumenter(extractorConfigurer, additionalAttributesExtractors)); + .createHttpInstrumenter( + extractorConfigurer, spanNameExtractorConfigurer, additionalAttributesExtractors)); } } diff --git a/instrumentation/netty/netty-4.1/library/src/main/java/io/opentelemetry/instrumentation/netty/v4_1/NettyServerTelemetryBuilder.java b/instrumentation/netty/netty-4.1/library/src/main/java/io/opentelemetry/instrumentation/netty/v4_1/NettyServerTelemetryBuilder.java index 9b00f27215..7912b9bd5a 100644 --- a/instrumentation/netty/netty-4.1/library/src/main/java/io/opentelemetry/instrumentation/netty/v4_1/NettyServerTelemetryBuilder.java +++ b/instrumentation/netty/netty-4.1/library/src/main/java/io/opentelemetry/instrumentation/netty/v4_1/NettyServerTelemetryBuilder.java @@ -9,6 +9,7 @@ import com.google.errorprone.annotations.CanIgnoreReturnValue; import io.netty.handler.codec.http.HttpResponse; import io.opentelemetry.api.OpenTelemetry; import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerAttributesExtractorBuilder; +import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanNameExtractorBuilder; import io.opentelemetry.instrumentation.netty.v4.common.HttpRequestAndChannel; import io.opentelemetry.instrumentation.netty.v4.common.internal.server.NettyServerInstrumenterFactory; import java.util.List; @@ -22,6 +23,8 @@ public final class NettyServerTelemetryBuilder { private Consumer> extractorConfigurer = builder -> {}; + private Consumer> + spanNameExtractorConfigurer = builder -> {}; private boolean emitExperimentalHttpServerMetrics = false; NettyServerTelemetryBuilder(OpenTelemetry openTelemetry) { @@ -73,6 +76,8 @@ public final class NettyServerTelemetryBuilder { public NettyServerTelemetryBuilder setKnownMethods(Set knownMethods) { extractorConfigurer = extractorConfigurer.andThen(builder -> builder.setKnownMethods(knownMethods)); + spanNameExtractorConfigurer = + spanNameExtractorConfigurer.andThen(builder -> builder.setKnownMethods(knownMethods)); return this; } @@ -96,6 +101,7 @@ public final class NettyServerTelemetryBuilder { openTelemetry, "io.opentelemetry.netty-4.1", extractorConfigurer, + spanNameExtractorConfigurer, emitExperimentalHttpServerMetrics)); } } diff --git a/instrumentation/okhttp/okhttp-2.2/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/okhttp/v2_2/OkHttp2Singletons.java b/instrumentation/okhttp/okhttp-2.2/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/okhttp/v2_2/OkHttp2Singletons.java index 0a6270e4fb..9246fa9d58 100644 --- a/instrumentation/okhttp/okhttp-2.2/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/okhttp/v2_2/OkHttp2Singletons.java +++ b/instrumentation/okhttp/okhttp-2.2/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/okhttp/v2_2/OkHttp2Singletons.java @@ -37,7 +37,9 @@ public final class OkHttp2Singletons { Instrumenter.builder( openTelemetry, INSTRUMENTATION_NAME, - HttpSpanNameExtractor.create(httpAttributesGetter)) + HttpSpanNameExtractor.builder(httpAttributesGetter) + .setKnownMethods(CommonConfig.get().getKnownHttpRequestMethods()) + .build()) .setSpanStatusExtractor(HttpSpanStatusExtractor.create(httpAttributesGetter)) .addAttributesExtractor( HttpClientAttributesExtractor.builder(httpAttributesGetter) diff --git a/instrumentation/okhttp/okhttp-3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/okhttp/v3_0/OkHttp3Singletons.java b/instrumentation/okhttp/okhttp-3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/okhttp/v3_0/OkHttp3Singletons.java index 514d597202..c2dbf07be1 100644 --- a/instrumentation/okhttp/okhttp-3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/okhttp/v3_0/OkHttp3Singletons.java +++ b/instrumentation/okhttp/okhttp-3.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/okhttp/v3_0/OkHttp3Singletons.java @@ -33,6 +33,7 @@ public final class OkHttp3Singletons { .setCapturedRequestHeaders(CommonConfig.get().getClientRequestHeaders()) .setCapturedResponseHeaders(CommonConfig.get().getClientResponseHeaders()) .setKnownMethods(CommonConfig.get().getKnownHttpRequestMethods()), + builder -> builder.setKnownMethods(CommonConfig.get().getKnownHttpRequestMethods()), singletonList( PeerServiceAttributesExtractor.create( OkHttpAttributesGetter.INSTANCE, CommonConfig.get().getPeerServiceMapping())), diff --git a/instrumentation/okhttp/okhttp-3.0/library/src/main/java/io/opentelemetry/instrumentation/okhttp/v3_0/OkHttpTelemetryBuilder.java b/instrumentation/okhttp/okhttp-3.0/library/src/main/java/io/opentelemetry/instrumentation/okhttp/v3_0/OkHttpTelemetryBuilder.java index d06ba6f27d..a63503ec9a 100644 --- a/instrumentation/okhttp/okhttp-3.0/library/src/main/java/io/opentelemetry/instrumentation/okhttp/v3_0/OkHttpTelemetryBuilder.java +++ b/instrumentation/okhttp/okhttp-3.0/library/src/main/java/io/opentelemetry/instrumentation/okhttp/v3_0/OkHttpTelemetryBuilder.java @@ -9,6 +9,7 @@ import com.google.errorprone.annotations.CanIgnoreReturnValue; import io.opentelemetry.api.OpenTelemetry; import io.opentelemetry.instrumentation.api.instrumenter.AttributesExtractor; import io.opentelemetry.instrumentation.api.instrumenter.http.HttpClientAttributesExtractorBuilder; +import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanNameExtractorBuilder; import io.opentelemetry.instrumentation.okhttp.v3_0.internal.OkHttpInstrumenterFactory; import java.util.ArrayList; import java.util.List; @@ -25,6 +26,8 @@ public final class OkHttpTelemetryBuilder { new ArrayList<>(); private Consumer> extractorConfigurer = builder -> {}; + private Consumer> spanNameExtractorConfigurer = + builder -> {}; private boolean emitExperimentalHttpClientMetrics = false; OkHttpTelemetryBuilder(OpenTelemetry openTelemetry) { @@ -83,6 +86,8 @@ public final class OkHttpTelemetryBuilder { public OkHttpTelemetryBuilder setKnownMethods(Set knownMethods) { extractorConfigurer = extractorConfigurer.andThen(builder -> builder.setKnownMethods(knownMethods)); + spanNameExtractorConfigurer = + spanNameExtractorConfigurer.andThen(builder -> builder.setKnownMethods(knownMethods)); return this; } @@ -107,6 +112,7 @@ public final class OkHttpTelemetryBuilder { OkHttpInstrumenterFactory.create( openTelemetry, extractorConfigurer, + spanNameExtractorConfigurer, additionalExtractors, emitExperimentalHttpClientMetrics), openTelemetry.getPropagators()); diff --git a/instrumentation/okhttp/okhttp-3.0/library/src/main/java/io/opentelemetry/instrumentation/okhttp/v3_0/internal/OkHttpInstrumenterFactory.java b/instrumentation/okhttp/okhttp-3.0/library/src/main/java/io/opentelemetry/instrumentation/okhttp/v3_0/internal/OkHttpInstrumenterFactory.java index 86ab68209e..99bb22cf0f 100644 --- a/instrumentation/okhttp/okhttp-3.0/library/src/main/java/io/opentelemetry/instrumentation/okhttp/v3_0/internal/OkHttpInstrumenterFactory.java +++ b/instrumentation/okhttp/okhttp-3.0/library/src/main/java/io/opentelemetry/instrumentation/okhttp/v3_0/internal/OkHttpInstrumenterFactory.java @@ -16,6 +16,7 @@ import io.opentelemetry.instrumentation.api.instrumenter.http.HttpClientAttribut import io.opentelemetry.instrumentation.api.instrumenter.http.HttpClientExperimentalMetrics; import io.opentelemetry.instrumentation.api.instrumenter.http.HttpClientMetrics; import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanNameExtractor; +import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanNameExtractorBuilder; import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanStatusExtractor; import java.util.List; import java.util.function.Consumer; @@ -33,6 +34,7 @@ public final class OkHttpInstrumenterFactory { public static Instrumenter create( OpenTelemetry openTelemetry, Consumer> extractorConfigurer, + Consumer> spanNameExtractorConfigurer, List> additionalAttributesExtractors, boolean emitExperimentalHttpClientMetrics) { @@ -42,11 +44,13 @@ public final class OkHttpInstrumenterFactory { HttpClientAttributesExtractor.builder(httpAttributesGetter); extractorConfigurer.accept(extractorBuilder); + HttpSpanNameExtractorBuilder httpSpanNameExtractorBuilder = + HttpSpanNameExtractor.builder(httpAttributesGetter); + spanNameExtractorConfigurer.accept(httpSpanNameExtractorBuilder); + InstrumenterBuilder builder = Instrumenter.builder( - openTelemetry, - INSTRUMENTATION_NAME, - HttpSpanNameExtractor.create(httpAttributesGetter)) + openTelemetry, INSTRUMENTATION_NAME, httpSpanNameExtractorBuilder.build()) .setSpanStatusExtractor(HttpSpanStatusExtractor.create(httpAttributesGetter)) .addAttributesExtractor(extractorBuilder.build()) .addAttributesExtractors(additionalAttributesExtractors) diff --git a/instrumentation/play/play-ws/play-ws-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/playws/PlayWsClientInstrumenterFactory.java b/instrumentation/play/play-ws/play-ws-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/playws/PlayWsClientInstrumenterFactory.java index ff9f657f94..ad08215e91 100644 --- a/instrumentation/play/play-ws/play-ws-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/playws/PlayWsClientInstrumenterFactory.java +++ b/instrumentation/play/play-ws/play-ws-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/playws/PlayWsClientInstrumenterFactory.java @@ -27,7 +27,9 @@ public final class PlayWsClientInstrumenterFactory { Instrumenter.builder( GlobalOpenTelemetry.get(), instrumentationName, - HttpSpanNameExtractor.create(httpAttributesGetter)) + HttpSpanNameExtractor.builder(httpAttributesGetter) + .setKnownMethods(CommonConfig.get().getKnownHttpRequestMethods()) + .build()) .setSpanStatusExtractor(HttpSpanStatusExtractor.create(httpAttributesGetter)) .addAttributesExtractor( HttpClientAttributesExtractor.builder(httpAttributesGetter) diff --git a/instrumentation/ratpack/ratpack-1.7/library/src/main/java/io/opentelemetry/instrumentation/ratpack/v1_7/RatpackTelemetryBuilder.java b/instrumentation/ratpack/ratpack-1.7/library/src/main/java/io/opentelemetry/instrumentation/ratpack/v1_7/RatpackTelemetryBuilder.java index e87275cf85..f81e98b144 100644 --- a/instrumentation/ratpack/ratpack-1.7/library/src/main/java/io/opentelemetry/instrumentation/ratpack/v1_7/RatpackTelemetryBuilder.java +++ b/instrumentation/ratpack/ratpack-1.7/library/src/main/java/io/opentelemetry/instrumentation/ratpack/v1_7/RatpackTelemetryBuilder.java @@ -20,6 +20,7 @@ import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerExperime import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerMetrics; import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRoute; import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanNameExtractor; +import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanNameExtractorBuilder; import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanStatusExtractor; import java.util.ArrayList; import java.util.List; @@ -45,6 +46,11 @@ public final class RatpackTelemetryBuilder { httpServerAttributesExtractorBuilder = HttpServerAttributesExtractor.builder(RatpackHttpAttributesGetter.INSTANCE); + private final HttpSpanNameExtractorBuilder httpClientSpanNameExtractorBuilder = + HttpSpanNameExtractor.builder(RatpackHttpClientAttributesGetter.INSTANCE); + private final HttpSpanNameExtractorBuilder httpServerSpanNameExtractorBuilder = + HttpSpanNameExtractor.builder(RatpackHttpAttributesGetter.INSTANCE); + private final List> additionalHttpClientExtractors = new ArrayList<>(); @@ -135,6 +141,8 @@ public final class RatpackTelemetryBuilder { public RatpackTelemetryBuilder setKnownMethods(Set knownMethods) { httpClientAttributesExtractorBuilder.setKnownMethods(knownMethods); httpServerAttributesExtractorBuilder.setKnownMethods(knownMethods); + httpClientSpanNameExtractorBuilder.setKnownMethods(knownMethods); + httpServerSpanNameExtractorBuilder.setKnownMethods(knownMethods); return this; } @@ -174,7 +182,7 @@ public final class RatpackTelemetryBuilder { InstrumenterBuilder builder = Instrumenter.builder( - openTelemetry, INSTRUMENTATION_NAME, HttpSpanNameExtractor.create(httpAttributes)) + openTelemetry, INSTRUMENTATION_NAME, httpServerSpanNameExtractorBuilder.build()) .setSpanStatusExtractor(HttpSpanStatusExtractor.create(httpAttributes)) .addAttributesExtractor(httpServerAttributesExtractorBuilder.build()) .addAttributesExtractors(additionalExtractors) @@ -191,7 +199,7 @@ public final class RatpackTelemetryBuilder { InstrumenterBuilder builder = Instrumenter.builder( - openTelemetry, INSTRUMENTATION_NAME, HttpSpanNameExtractor.create(httpAttributes)) + openTelemetry, INSTRUMENTATION_NAME, httpClientSpanNameExtractorBuilder.build()) .setSpanStatusExtractor(HttpSpanStatusExtractor.create(httpAttributes)) .addAttributesExtractor(httpClientAttributesExtractorBuilder.build()) .addAttributesExtractors(additionalHttpClientExtractors) diff --git a/instrumentation/reactor/reactor-netty/reactor-netty-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/reactornetty/v1_0/ReactorNettySingletons.java b/instrumentation/reactor/reactor-netty/reactor-netty-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/reactornetty/v1_0/ReactorNettySingletons.java index 0d36c7de6b..9af6959387 100644 --- a/instrumentation/reactor/reactor-netty/reactor-netty-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/reactornetty/v1_0/ReactorNettySingletons.java +++ b/instrumentation/reactor/reactor-netty/reactor-netty-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/reactornetty/v1_0/ReactorNettySingletons.java @@ -50,7 +50,9 @@ public final class ReactorNettySingletons { Instrumenter.builder( GlobalOpenTelemetry.get(), INSTRUMENTATION_NAME, - HttpSpanNameExtractor.create(httpAttributesGetter)) + HttpSpanNameExtractor.builder(httpAttributesGetter) + .setKnownMethods(CommonConfig.get().getKnownHttpRequestMethods()) + .build()) .setSpanStatusExtractor(HttpSpanStatusExtractor.create(httpAttributesGetter)) .addAttributesExtractor( HttpClientAttributesExtractor.builder(httpAttributesGetter) diff --git a/instrumentation/restlet/restlet-1.1/library/src/main/java/io/opentelemetry/instrumentation/restlet/v1_1/RestletTelemetryBuilder.java b/instrumentation/restlet/restlet-1.1/library/src/main/java/io/opentelemetry/instrumentation/restlet/v1_1/RestletTelemetryBuilder.java index 6f5f0bf6f9..a0e4f81975 100644 --- a/instrumentation/restlet/restlet-1.1/library/src/main/java/io/opentelemetry/instrumentation/restlet/v1_1/RestletTelemetryBuilder.java +++ b/instrumentation/restlet/restlet-1.1/library/src/main/java/io/opentelemetry/instrumentation/restlet/v1_1/RestletTelemetryBuilder.java @@ -16,6 +16,7 @@ import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerExperime import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerMetrics; import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRoute; import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanNameExtractor; +import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanNameExtractorBuilder; import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanStatusExtractor; import java.util.ArrayList; import java.util.List; @@ -34,7 +35,8 @@ public final class RestletTelemetryBuilder { private final HttpServerAttributesExtractorBuilder httpAttributesExtractorBuilder = HttpServerAttributesExtractor.builder(RestletHttpAttributesGetter.INSTANCE); - + private final HttpSpanNameExtractorBuilder httpSpanNameExtractorBuilder = + HttpSpanNameExtractor.builder(RestletHttpAttributesGetter.INSTANCE); private boolean emitExperimentalHttpServerMetrics = false; RestletTelemetryBuilder(OpenTelemetry openTelemetry) { @@ -90,6 +92,7 @@ public final class RestletTelemetryBuilder { @CanIgnoreReturnValue public RestletTelemetryBuilder setKnownMethods(Set knownMethods) { httpAttributesExtractorBuilder.setKnownMethods(knownMethods); + httpSpanNameExtractorBuilder.setKnownMethods(knownMethods); return this; } @@ -115,9 +118,7 @@ public final class RestletTelemetryBuilder { InstrumenterBuilder builder = Instrumenter.builder( - openTelemetry, - INSTRUMENTATION_NAME, - HttpSpanNameExtractor.create(httpAttributesGetter)) + openTelemetry, INSTRUMENTATION_NAME, httpSpanNameExtractorBuilder.build()) .setSpanStatusExtractor(HttpSpanStatusExtractor.create(httpAttributesGetter)) .addAttributesExtractor(httpAttributesExtractorBuilder.build()) .addAttributesExtractors(additionalExtractors) diff --git a/instrumentation/restlet/restlet-2.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/restlet/v2_0/RestletSingletons.java b/instrumentation/restlet/restlet-2.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/restlet/v2_0/RestletSingletons.java index d8ce98b71f..5a811253e0 100644 --- a/instrumentation/restlet/restlet-2.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/restlet/v2_0/RestletSingletons.java +++ b/instrumentation/restlet/restlet-2.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/restlet/v2_0/RestletSingletons.java @@ -9,6 +9,7 @@ import io.opentelemetry.api.GlobalOpenTelemetry; import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter; import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerAttributesExtractor; import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRouteGetter; +import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanNameExtractor; import io.opentelemetry.instrumentation.restlet.v2_0.internal.RestletHttpAttributesGetter; import io.opentelemetry.instrumentation.restlet.v2_0.internal.RestletInstrumenterFactory; import io.opentelemetry.javaagent.bootstrap.internal.CommonConfig; @@ -27,6 +28,9 @@ public final class RestletSingletons { .setCapturedResponseHeaders(CommonConfig.get().getServerResponseHeaders()) .setKnownMethods(CommonConfig.get().getKnownHttpRequestMethods()) .build(), + HttpSpanNameExtractor.builder(RestletHttpAttributesGetter.INSTANCE) + .setKnownMethods(CommonConfig.get().getKnownHttpRequestMethods()) + .build(), Collections.emptyList(), CommonConfig.get().shouldEmitExperimentalHttpServerMetrics()); diff --git a/instrumentation/restlet/restlet-2.0/library/src/main/java/io/opentelemetry/instrumentation/restlet/v2_0/RestletTelemetryBuilder.java b/instrumentation/restlet/restlet-2.0/library/src/main/java/io/opentelemetry/instrumentation/restlet/v2_0/RestletTelemetryBuilder.java index 7971d098b2..e32145ab06 100644 --- a/instrumentation/restlet/restlet-2.0/library/src/main/java/io/opentelemetry/instrumentation/restlet/v2_0/RestletTelemetryBuilder.java +++ b/instrumentation/restlet/restlet-2.0/library/src/main/java/io/opentelemetry/instrumentation/restlet/v2_0/RestletTelemetryBuilder.java @@ -11,6 +11,8 @@ import io.opentelemetry.instrumentation.api.instrumenter.AttributesExtractor; import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter; import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerAttributesExtractor; import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerAttributesExtractorBuilder; +import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanNameExtractor; +import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanNameExtractorBuilder; import io.opentelemetry.instrumentation.restlet.v2_0.internal.RestletHttpAttributesGetter; import io.opentelemetry.instrumentation.restlet.v2_0.internal.RestletInstrumenterFactory; import java.util.ArrayList; @@ -28,7 +30,8 @@ public final class RestletTelemetryBuilder { private final HttpServerAttributesExtractorBuilder httpAttributesExtractorBuilder = HttpServerAttributesExtractor.builder(RestletHttpAttributesGetter.INSTANCE); - + private final HttpSpanNameExtractorBuilder httpSpanNameExtractorBuilder = + HttpSpanNameExtractor.builder(RestletHttpAttributesGetter.INSTANCE); private boolean emitExperimentalHttpServerMetrics = false; RestletTelemetryBuilder(OpenTelemetry openTelemetry) { @@ -84,6 +87,7 @@ public final class RestletTelemetryBuilder { @CanIgnoreReturnValue public RestletTelemetryBuilder setKnownMethods(Set knownMethods) { httpAttributesExtractorBuilder.setKnownMethods(knownMethods); + httpSpanNameExtractorBuilder.setKnownMethods(knownMethods); return this; } @@ -109,6 +113,7 @@ public final class RestletTelemetryBuilder { RestletInstrumenterFactory.newServerInstrumenter( openTelemetry, httpAttributesExtractorBuilder.build(), + httpSpanNameExtractorBuilder.build(), additionalExtractors, emitExperimentalHttpServerMetrics); 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 51091373b7..3d156a67b5 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 @@ -9,10 +9,10 @@ import io.opentelemetry.api.OpenTelemetry; 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.SpanNameExtractor; import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerExperimentalMetrics; import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerMetrics; import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRoute; -import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanNameExtractor; import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanStatusExtractor; import java.util.List; import org.restlet.Request; @@ -29,6 +29,7 @@ public final class RestletInstrumenterFactory { public static Instrumenter newServerInstrumenter( OpenTelemetry openTelemetry, AttributesExtractor httpServerAttributesExtractor, + SpanNameExtractor httpServerSpanNameExtractor, List> additionalExtractors, boolean emitExperimentalHttpServerMetrics) { @@ -36,9 +37,7 @@ public final class RestletInstrumenterFactory { InstrumenterBuilder builder = Instrumenter.builder( - openTelemetry, - INSTRUMENTATION_NAME, - HttpSpanNameExtractor.create(httpAttributesGetter)) + openTelemetry, INSTRUMENTATION_NAME, httpServerSpanNameExtractor) .setSpanStatusExtractor(HttpSpanStatusExtractor.create(httpAttributesGetter)) .addAttributesExtractor(httpServerAttributesExtractor) .addAttributesExtractors(additionalExtractors) diff --git a/instrumentation/servlet/servlet-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/servlet/ServletInstrumenterBuilder.java b/instrumentation/servlet/servlet-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/servlet/ServletInstrumenterBuilder.java index 27056f2bcd..c18bdee305 100644 --- a/instrumentation/servlet/servlet-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/servlet/ServletInstrumenterBuilder.java +++ b/instrumentation/servlet/servlet-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/servlet/ServletInstrumenterBuilder.java @@ -87,7 +87,9 @@ public final class ServletInstrumenterBuilder { HttpServerAttributesGetter, ServletResponseContext> httpAttributesGetter = new ServletHttpAttributesGetter<>(accessor); SpanNameExtractor> spanNameExtractor = - HttpSpanNameExtractor.create(httpAttributesGetter); + HttpSpanNameExtractor.builder(httpAttributesGetter) + .setKnownMethods(CommonConfig.get().getKnownHttpRequestMethods()) + .build(); return build(instrumentationName, accessor, spanNameExtractor, httpAttributesGetter); } diff --git a/instrumentation/spring/spring-web/spring-web-3.1/library/src/main/java/io/opentelemetry/instrumentation/spring/web/v3_1/SpringWebTelemetryBuilder.java b/instrumentation/spring/spring-web/spring-web-3.1/library/src/main/java/io/opentelemetry/instrumentation/spring/web/v3_1/SpringWebTelemetryBuilder.java index 4a3322e41e..1c71b83afe 100644 --- a/instrumentation/spring/spring-web/spring-web-3.1/library/src/main/java/io/opentelemetry/instrumentation/spring/web/v3_1/SpringWebTelemetryBuilder.java +++ b/instrumentation/spring/spring-web/spring-web-3.1/library/src/main/java/io/opentelemetry/instrumentation/spring/web/v3_1/SpringWebTelemetryBuilder.java @@ -16,6 +16,7 @@ import io.opentelemetry.instrumentation.api.instrumenter.http.HttpClientAttribut import io.opentelemetry.instrumentation.api.instrumenter.http.HttpClientExperimentalMetrics; import io.opentelemetry.instrumentation.api.instrumenter.http.HttpClientMetrics; import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanNameExtractor; +import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanNameExtractorBuilder; import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanStatusExtractor; import java.util.ArrayList; import java.util.List; @@ -35,6 +36,8 @@ public final class SpringWebTelemetryBuilder { private final HttpClientAttributesExtractorBuilder httpAttributesExtractorBuilder = HttpClientAttributesExtractor.builder(SpringWebHttpAttributesGetter.INSTANCE); + private final HttpSpanNameExtractorBuilder httpSpanNameExtractorBuilder = + HttpSpanNameExtractor.builder(SpringWebHttpAttributesGetter.INSTANCE); private boolean emitExperimentalHttpClientMetrics = false; @Nullable @@ -103,6 +106,7 @@ public final class SpringWebTelemetryBuilder { @CanIgnoreReturnValue public SpringWebTelemetryBuilder setKnownMethods(Set knownMethods) { httpAttributesExtractorBuilder.setKnownMethods(knownMethods); + httpSpanNameExtractorBuilder.setKnownMethods(knownMethods); return this; } @@ -126,8 +130,7 @@ public final class SpringWebTelemetryBuilder { public SpringWebTelemetry build() { SpringWebHttpAttributesGetter httpAttributeGetter = SpringWebHttpAttributesGetter.INSTANCE; - SpanNameExtractor originalSpanNameExtractor = - HttpSpanNameExtractor.create(httpAttributeGetter); + SpanNameExtractor originalSpanNameExtractor = httpSpanNameExtractorBuilder.build(); SpanNameExtractor spanNameExtractor = originalSpanNameExtractor; if (spanNameExtractorTransformer != null) { spanNameExtractor = spanNameExtractorTransformer.apply(originalSpanNameExtractor); diff --git a/instrumentation/spring/spring-webflux/spring-webflux-5.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/webflux/v5_0/client/WebClientHelper.java b/instrumentation/spring/spring-webflux/spring-webflux-5.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/webflux/v5_0/client/WebClientHelper.java index fc0c8f6250..d1bbd05591 100644 --- a/instrumentation/spring/spring-webflux/spring-webflux-5.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/webflux/v5_0/client/WebClientHelper.java +++ b/instrumentation/spring/spring-webflux/spring-webflux-5.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/webflux/v5_0/client/WebClientHelper.java @@ -30,6 +30,7 @@ public final class WebClientHelper { .setCapturedRequestHeaders(CommonConfig.get().getClientRequestHeaders()) .setCapturedResponseHeaders(CommonConfig.get().getClientResponseHeaders()) .setKnownMethods(CommonConfig.get().getKnownHttpRequestMethods()), + builder -> builder.setKnownMethods(CommonConfig.get().getKnownHttpRequestMethods()), singletonList( PeerServiceAttributesExtractor.create( WebClientHttpAttributesGetter.INSTANCE, diff --git a/instrumentation/spring/spring-webflux/spring-webflux-5.3/library/src/main/java/io/opentelemetry/instrumentation/spring/webflux/v5_3/SpringWebfluxTelemetryBuilder.java b/instrumentation/spring/spring-webflux/spring-webflux-5.3/library/src/main/java/io/opentelemetry/instrumentation/spring/webflux/v5_3/SpringWebfluxTelemetryBuilder.java index 01edab49c1..ae2c4fdcff 100644 --- a/instrumentation/spring/spring-webflux/spring-webflux-5.3/library/src/main/java/io/opentelemetry/instrumentation/spring/webflux/v5_3/SpringWebfluxTelemetryBuilder.java +++ b/instrumentation/spring/spring-webflux/spring-webflux-5.3/library/src/main/java/io/opentelemetry/instrumentation/spring/webflux/v5_3/SpringWebfluxTelemetryBuilder.java @@ -17,6 +17,7 @@ import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerExperime import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerMetrics; import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRoute; import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanNameExtractor; +import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanNameExtractorBuilder; import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanStatusExtractor; import io.opentelemetry.instrumentation.spring.webflux.v5_3.internal.ClientInstrumenterFactory; import java.util.ArrayList; @@ -41,9 +42,13 @@ public final class SpringWebfluxTelemetryBuilder { private final HttpServerAttributesExtractorBuilder httpServerAttributesExtractorBuilder = HttpServerAttributesExtractor.builder(WebfluxServerHttpAttributesGetter.INSTANCE); + private final HttpSpanNameExtractorBuilder httpServerSpanNameExtractorBuilder = + HttpSpanNameExtractor.builder(WebfluxServerHttpAttributesGetter.INSTANCE); private Consumer> clientExtractorConfigurer = builder -> {}; + private Consumer> clientSpanNameExtractorConfigurer = + builder -> {}; private boolean captureExperimentalSpanAttributes = false; private boolean emitExperimentalHttpClientMetrics = false; private boolean emitExperimentalHttpServerMetrics = false; @@ -158,7 +163,10 @@ public final class SpringWebfluxTelemetryBuilder { public SpringWebfluxTelemetryBuilder setKnownMethods(Set knownMethods) { clientExtractorConfigurer = clientExtractorConfigurer.andThen(builder -> builder.setKnownMethods(knownMethods)); + clientSpanNameExtractorConfigurer = + clientSpanNameExtractorConfigurer.andThen(builder -> builder.setKnownMethods(knownMethods)); httpServerAttributesExtractorBuilder.setKnownMethods(knownMethods); + httpServerSpanNameExtractorBuilder.setKnownMethods(knownMethods); return this; } @@ -198,6 +206,7 @@ public final class SpringWebfluxTelemetryBuilder { ClientInstrumenterFactory.create( openTelemetry, clientExtractorConfigurer, + clientSpanNameExtractorConfigurer, clientAdditionalExtractors, captureExperimentalSpanAttributes, emitExperimentalHttpClientMetrics); @@ -214,7 +223,7 @@ public final class SpringWebfluxTelemetryBuilder { InstrumenterBuilder builder = Instrumenter.builder( - openTelemetry, INSTRUMENTATION_NAME, HttpSpanNameExtractor.create(getter)) + openTelemetry, INSTRUMENTATION_NAME, httpServerSpanNameExtractorBuilder.build()) .setSpanStatusExtractor(HttpSpanStatusExtractor.create(getter)) .addAttributesExtractor(httpServerAttributesExtractorBuilder.build()) .addAttributesExtractors(serverAdditionalExtractors) diff --git a/instrumentation/spring/spring-webflux/spring-webflux-5.3/library/src/main/java/io/opentelemetry/instrumentation/spring/webflux/v5_3/internal/ClientInstrumenterFactory.java b/instrumentation/spring/spring-webflux/spring-webflux-5.3/library/src/main/java/io/opentelemetry/instrumentation/spring/webflux/v5_3/internal/ClientInstrumenterFactory.java index dddfd64b03..fe6cf6f679 100644 --- a/instrumentation/spring/spring-webflux/spring-webflux-5.3/library/src/main/java/io/opentelemetry/instrumentation/spring/webflux/v5_3/internal/ClientInstrumenterFactory.java +++ b/instrumentation/spring/spring-webflux/spring-webflux-5.3/library/src/main/java/io/opentelemetry/instrumentation/spring/webflux/v5_3/internal/ClientInstrumenterFactory.java @@ -16,6 +16,7 @@ import io.opentelemetry.instrumentation.api.instrumenter.http.HttpClientAttribut import io.opentelemetry.instrumentation.api.instrumenter.http.HttpClientExperimentalMetrics; import io.opentelemetry.instrumentation.api.instrumenter.http.HttpClientMetrics; import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanNameExtractor; +import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanNameExtractorBuilder; import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanStatusExtractor; import java.util.List; import java.util.function.Consumer; @@ -36,6 +37,7 @@ public final class ClientInstrumenterFactory { OpenTelemetry openTelemetry, Consumer> extractorConfigurer, + Consumer> spanNameExtractorConfigurer, List> additionalExtractors, boolean captureExperimentalSpanAttributes, boolean emitExperimentalHttpClientMetrics) { @@ -46,11 +48,13 @@ public final class ClientInstrumenterFactory { HttpClientAttributesExtractor.builder(httpAttributesGetter); extractorConfigurer.accept(extractorBuilder); + HttpSpanNameExtractorBuilder httpSpanNameExtractorBuilder = + HttpSpanNameExtractor.builder(httpAttributesGetter); + spanNameExtractorConfigurer.accept(httpSpanNameExtractorBuilder); + InstrumenterBuilder clientBuilder = Instrumenter.builder( - openTelemetry, - INSTRUMENTATION_NAME, - HttpSpanNameExtractor.create(httpAttributesGetter)) + openTelemetry, INSTRUMENTATION_NAME, httpSpanNameExtractorBuilder.build()) .setSpanStatusExtractor(HttpSpanStatusExtractor.create(httpAttributesGetter)) .addAttributesExtractor(extractorBuilder.build()) .addAttributesExtractors(additionalExtractors) diff --git a/instrumentation/spring/spring-webmvc/spring-webmvc-5.3/library/src/main/java/io/opentelemetry/instrumentation/spring/webmvc/v5_3/SpringWebMvcTelemetryBuilder.java b/instrumentation/spring/spring-webmvc/spring-webmvc-5.3/library/src/main/java/io/opentelemetry/instrumentation/spring/webmvc/v5_3/SpringWebMvcTelemetryBuilder.java index cf668326c3..c00f9fd173 100644 --- a/instrumentation/spring/spring-webmvc/spring-webmvc-5.3/library/src/main/java/io/opentelemetry/instrumentation/spring/webmvc/v5_3/SpringWebMvcTelemetryBuilder.java +++ b/instrumentation/spring/spring-webmvc/spring-webmvc-5.3/library/src/main/java/io/opentelemetry/instrumentation/spring/webmvc/v5_3/SpringWebMvcTelemetryBuilder.java @@ -17,6 +17,7 @@ import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerExperime import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerMetrics; import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRoute; import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanNameExtractor; +import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanNameExtractorBuilder; import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanStatusExtractor; import java.util.ArrayList; import java.util.List; @@ -37,6 +38,8 @@ public final class SpringWebMvcTelemetryBuilder { private final HttpServerAttributesExtractorBuilder httpAttributesExtractorBuilder = HttpServerAttributesExtractor.builder(SpringWebMvcHttpAttributesGetter.INSTANCE); + private final HttpSpanNameExtractorBuilder httpSpanNameExtractorBuilder = + HttpSpanNameExtractor.builder(SpringWebMvcHttpAttributesGetter.INSTANCE); @Nullable private Function< @@ -110,6 +113,7 @@ public final class SpringWebMvcTelemetryBuilder { @CanIgnoreReturnValue public SpringWebMvcTelemetryBuilder setKnownMethods(Set knownMethods) { httpAttributesExtractorBuilder.setKnownMethods(knownMethods); + httpSpanNameExtractorBuilder.setKnownMethods(knownMethods); return this; } @@ -135,7 +139,7 @@ public final class SpringWebMvcTelemetryBuilder { SpringWebMvcHttpAttributesGetter.INSTANCE; SpanNameExtractor originalSpanNameExtractor = - HttpSpanNameExtractor.create(httpAttributesGetter); + httpSpanNameExtractorBuilder.build(); SpanNameExtractor spanNameExtractor = originalSpanNameExtractor; if (spanNameExtractorTransformer != null) { spanNameExtractor = spanNameExtractorTransformer.apply(originalSpanNameExtractor); diff --git a/instrumentation/spring/spring-webmvc/spring-webmvc-6.0/library/src/main/java/io/opentelemetry/instrumentation/spring/webmvc/v6_0/SpringWebMvcTelemetryBuilder.java b/instrumentation/spring/spring-webmvc/spring-webmvc-6.0/library/src/main/java/io/opentelemetry/instrumentation/spring/webmvc/v6_0/SpringWebMvcTelemetryBuilder.java index c172a578df..364429ccd7 100644 --- a/instrumentation/spring/spring-webmvc/spring-webmvc-6.0/library/src/main/java/io/opentelemetry/instrumentation/spring/webmvc/v6_0/SpringWebMvcTelemetryBuilder.java +++ b/instrumentation/spring/spring-webmvc/spring-webmvc-6.0/library/src/main/java/io/opentelemetry/instrumentation/spring/webmvc/v6_0/SpringWebMvcTelemetryBuilder.java @@ -17,6 +17,7 @@ import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerExperime import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerMetrics; import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRoute; import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanNameExtractor; +import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanNameExtractorBuilder; import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanStatusExtractor; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; @@ -37,6 +38,8 @@ public final class SpringWebMvcTelemetryBuilder { private final HttpServerAttributesExtractorBuilder httpAttributesExtractorBuilder = HttpServerAttributesExtractor.builder(SpringWebMvcHttpAttributesGetter.INSTANCE); + private final HttpSpanNameExtractorBuilder httpSpanNameExtractorBuilder = + HttpSpanNameExtractor.builder(SpringWebMvcHttpAttributesGetter.INSTANCE); @Nullable private Function< @@ -110,6 +113,7 @@ public final class SpringWebMvcTelemetryBuilder { @CanIgnoreReturnValue public SpringWebMvcTelemetryBuilder setKnownMethods(Set knownMethods) { httpAttributesExtractorBuilder.setKnownMethods(knownMethods); + httpSpanNameExtractorBuilder.setKnownMethods(knownMethods); return this; } @@ -135,7 +139,7 @@ public final class SpringWebMvcTelemetryBuilder { SpringWebMvcHttpAttributesGetter.INSTANCE; SpanNameExtractor originalSpanNameExtractor = - HttpSpanNameExtractor.create(httpAttributesGetter); + httpSpanNameExtractorBuilder.build(); SpanNameExtractor spanNameExtractor = originalSpanNameExtractor; if (spanNameExtractorTransformer != null) { spanNameExtractor = spanNameExtractorTransformer.apply(originalSpanNameExtractor); diff --git a/instrumentation/tomcat/tomcat-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/tomcat/common/TomcatInstrumenterFactory.java b/instrumentation/tomcat/tomcat-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/tomcat/common/TomcatInstrumenterFactory.java index 82ae8a040f..bd2ee855f7 100644 --- a/instrumentation/tomcat/tomcat-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/tomcat/common/TomcatInstrumenterFactory.java +++ b/instrumentation/tomcat/tomcat-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/tomcat/common/TomcatInstrumenterFactory.java @@ -33,7 +33,9 @@ public final class TomcatInstrumenterFactory { Instrumenter.builder( GlobalOpenTelemetry.get(), instrumentationName, - HttpSpanNameExtractor.create(httpAttributesGetter)) + HttpSpanNameExtractor.builder(httpAttributesGetter) + .setKnownMethods(CommonConfig.get().getKnownHttpRequestMethods()) + .build()) .setSpanStatusExtractor(HttpSpanStatusExtractor.create(httpAttributesGetter)) .setErrorCauseExtractor(new ServletErrorCauseExtractor<>(accessor)) .addAttributesExtractor( diff --git a/instrumentation/undertow-1.4/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/undertow/UndertowSingletons.java b/instrumentation/undertow-1.4/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/undertow/UndertowSingletons.java index 90aa5aa797..3811f41319 100644 --- a/instrumentation/undertow-1.4/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/undertow/UndertowSingletons.java +++ b/instrumentation/undertow-1.4/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/undertow/UndertowSingletons.java @@ -31,7 +31,9 @@ public final class UndertowSingletons { Instrumenter.builder( GlobalOpenTelemetry.get(), INSTRUMENTATION_NAME, - HttpSpanNameExtractor.create(httpAttributesGetter)) + HttpSpanNameExtractor.builder(httpAttributesGetter) + .setKnownMethods(CommonConfig.get().getKnownHttpRequestMethods()) + .build()) .setSpanStatusExtractor(HttpSpanStatusExtractor.create(httpAttributesGetter)) .addAttributesExtractor( HttpServerAttributesExtractor.builder(httpAttributesGetter) diff --git a/instrumentation/vertx/vertx-http-client/vertx-http-client-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/vertx/client/VertxClientInstrumenterFactory.java b/instrumentation/vertx/vertx-http-client/vertx-http-client-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/vertx/client/VertxClientInstrumenterFactory.java index 60ceaa5427..c0b5052389 100644 --- a/instrumentation/vertx/vertx-http-client/vertx-http-client-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/vertx/client/VertxClientInstrumenterFactory.java +++ b/instrumentation/vertx/vertx-http-client/vertx-http-client-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/vertx/client/VertxClientInstrumenterFactory.java @@ -27,7 +27,9 @@ public final class VertxClientInstrumenterFactory { Instrumenter.builder( GlobalOpenTelemetry.get(), instrumentationName, - HttpSpanNameExtractor.create(httpAttributesGetter)) + HttpSpanNameExtractor.builder(httpAttributesGetter) + .setKnownMethods(CommonConfig.get().getKnownHttpRequestMethods()) + .build()) .setSpanStatusExtractor(HttpSpanStatusExtractor.create(httpAttributesGetter)) .addAttributesExtractor( HttpClientAttributesExtractor.builder(httpAttributesGetter) diff --git a/testing-common/src/main/groovy/io/opentelemetry/instrumentation/test/base/HttpClientTest.groovy b/testing-common/src/main/groovy/io/opentelemetry/instrumentation/test/base/HttpClientTest.groovy index 4f6a50ed2a..dc2b9e90bb 100644 --- a/testing-common/src/main/groovy/io/opentelemetry/instrumentation/test/base/HttpClientTest.groovy +++ b/testing-common/src/main/groovy/io/opentelemetry/instrumentation/test/base/HttpClientTest.groovy @@ -374,7 +374,7 @@ abstract class HttpClientTest extends InstrumentationSpecification { } protected String expectedClientSpanName(URI uri, String method) { - return HttpConstants._OTHER == method ? "TEST" : method + return HttpConstants._OTHER == method ? "HTTP" : method } Integer responseCodeOnRedirectError() { diff --git a/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/junit/http/HttpClientTestOptions.java b/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/junit/http/HttpClientTestOptions.java index 91429eb961..593d72dfa1 100644 --- a/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/junit/http/HttpClientTestOptions.java +++ b/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/junit/http/HttpClientTestOptions.java @@ -36,7 +36,7 @@ public abstract class HttpClientTestOptions { SemconvStabilityUtil.getAttributeKey(SemanticAttributes.USER_AGENT_ORIGINAL)))); public static final BiFunction DEFAULT_EXPECTED_CLIENT_SPAN_NAME_MAPPER = - (uri, method) -> HttpConstants._OTHER.equals(method) ? "TEST" : method; + (uri, method) -> HttpConstants._OTHER.equals(method) ? "HTTP" : method; public static final int FOUND_STATUS_CODE = HttpStatus.FOUND.code();