Refactor and rename `HttpClientResend` and `HttpRouteHolder` (#9280)

Co-authored-by: Trask Stalnaker <trask.stalnaker@gmail.com>
This commit is contained in:
Mateusz Rzeszutek 2023-08-26 02:37:25 +02:00 committed by GitHub
parent 2ebf4134f9
commit d7a34f90ba
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
94 changed files with 649 additions and 455 deletions

View File

@ -35,7 +35,7 @@ public final class HttpClientAttributesExtractorBuilder<REQUEST, RESPONSE> {
List<String> capturedRequestHeaders = emptyList();
List<String> capturedResponseHeaders = emptyList();
Set<String> knownMethods = HttpConstants.KNOWN_METHODS;
ToIntFunction<Context> resendCountIncrementer = HttpClientResend::getAndIncrement;
ToIntFunction<Context> resendCountIncrementer = HttpClientResendCount::getAndIncrement;
HttpClientAttributesExtractorBuilder(
HttpClientAttributesGetter<REQUEST, RESPONSE> httpAttributesGetter,

View File

@ -11,12 +11,12 @@ import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter;
import java.util.concurrent.atomic.AtomicIntegerFieldUpdater;
/** A helper that keeps track of the count of the HTTP request resend attempts. */
public final class HttpClientResend {
public final class HttpClientResendCount {
private static final ContextKey<HttpClientResend> KEY =
private static final ContextKey<HttpClientResendCount> KEY =
ContextKey.named("opentelemetry-http-client-resend-key");
private static final AtomicIntegerFieldUpdater<HttpClientResend> resendsUpdater =
AtomicIntegerFieldUpdater.newUpdater(HttpClientResend.class, "resends");
private static final AtomicIntegerFieldUpdater<HttpClientResendCount> resendsUpdater =
AtomicIntegerFieldUpdater.newUpdater(HttpClientResendCount.class, "resends");
/**
* Initializes the HTTP request resend counter.
@ -29,16 +29,20 @@ public final class HttpClientResend {
if (context.get(KEY) != null) {
return context;
}
return context.with(KEY, new HttpClientResend());
return context.with(KEY, new HttpClientResendCount());
}
/**
* Returns the count of the already made attempts to send an HTTP request; 0 if this is the first
* send attempt.
*/
public static int get(Context context) {
HttpClientResend resend = context.get(KEY);
HttpClientResendCount resend = context.get(KEY);
return resend == null ? 0 : resend.resends;
}
static int getAndIncrement(Context context) {
HttpClientResend resend = context.get(KEY);
HttpClientResendCount resend = context.get(KEY);
if (resend == null) {
return 0;
}
@ -48,5 +52,5 @@ public final class HttpClientResend {
@SuppressWarnings("unused") // it actually is used by the resendsUpdater
private volatile int resends = 0;
private HttpClientResend() {}
private HttpClientResendCount() {}
}

View File

@ -5,17 +5,12 @@
package io.opentelemetry.instrumentation.api.instrumenter.http;
import io.opentelemetry.context.Context;
import javax.annotation.Nullable;
/** An interface for getting the {@code http.route} attribute. */
/**
* An interface for getting the {@code http.route} attribute.
*
* @deprecated This class is deprecated and will be removed in the 2.0 release. Use {@link
* HttpServerRouteBiGetter} instead.
*/
@Deprecated
@FunctionalInterface
public interface HttpRouteBiGetter<T, U> {
/**
* Returns the {@code http.route} attribute extracted from {@code context}, {@code arg1} and
* {@code arg2}; or {@code null} if it was not found.
*/
@Nullable
String get(Context context, T arg1, U arg2);
}
public interface HttpRouteBiGetter<T, U> extends HttpServerRouteBiGetter<T, U> {}

View File

@ -5,17 +5,12 @@
package io.opentelemetry.instrumentation.api.instrumenter.http;
import io.opentelemetry.context.Context;
import javax.annotation.Nullable;
/** An interface for getting the {@code http.route} attribute. */
/**
* An interface for getting the {@code http.route} attribute.
*
* @deprecated This class is deprecated and will be removed in the 2.0 release. Use {@link
* HttpServerRouteGetter} instead.
*/
@Deprecated
@FunctionalInterface
public interface HttpRouteGetter<T> {
/**
* Returns the {@code http.route} attribute extracted from {@code context} and {@code arg}; or
* {@code null} if it was not found.
*/
@Nullable
String get(Context context, T arg);
}
public interface HttpRouteGetter<T> extends HttpServerRouteGetter<T> {}

View File

@ -5,13 +5,9 @@
package io.opentelemetry.instrumentation.api.instrumenter.http;
import io.opentelemetry.api.trace.Span;
import io.opentelemetry.context.Context;
import io.opentelemetry.instrumentation.api.instrumenter.ContextCustomizer;
import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter;
import io.opentelemetry.instrumentation.api.instrumenter.LocalRootSpan;
import io.opentelemetry.instrumentation.api.internal.HttpRouteState;
import io.opentelemetry.semconv.trace.attributes.SemanticAttributes;
import javax.annotation.Nullable;
/**
@ -22,7 +18,11 @@ import javax.annotation.Nullable;
* later, after the instrumented operation starts. This class provides several static methods that
* allow the instrumentation author to provide the matching HTTP route to the instrumentation when
* it is discovered.
*
* @deprecated This class is deprecated and will be removed in the 2.0 release. Use {@link
* HttpServerRoute} instead.
*/
@Deprecated
public final class HttpRouteHolder {
/**
@ -31,13 +31,7 @@ public final class HttpRouteHolder {
*/
public static <REQUEST> ContextCustomizer<REQUEST> create(
HttpServerAttributesGetter<REQUEST, ?> getter) {
return (context, request, startAttributes) -> {
if (HttpRouteState.fromContextOrNull(context) != null) {
return context;
}
String method = getter.getHttpRequestMethod(request);
return context.with(HttpRouteState.create(method, null, 0));
};
return HttpServerRoute.create(getter);
}
private HttpRouteHolder() {}
@ -57,7 +51,7 @@ public final class HttpRouteHolder {
*/
public static void updateHttpRoute(
Context context, HttpRouteSource source, @Nullable String httpRoute) {
updateHttpRoute(context, source, ConstantAdapter.INSTANCE, httpRoute);
HttpServerRoute.update(context, source.toHttpServerRouteSource(), httpRoute);
}
/**
@ -75,7 +69,7 @@ public final class HttpRouteHolder {
*/
public static <T> void updateHttpRoute(
Context context, HttpRouteSource source, HttpRouteGetter<T> httpRouteGetter, T arg1) {
updateHttpRoute(context, source, OneArgAdapter.getInstance(), arg1, httpRouteGetter);
HttpServerRoute.update(context, source.toHttpServerRouteSource(), httpRouteGetter, arg1);
}
/**
@ -97,92 +91,6 @@ public final class HttpRouteHolder {
HttpRouteBiGetter<T, U> httpRouteGetter,
T arg1,
U arg2) {
Span serverSpan = LocalRootSpan.fromContextOrNull(context);
// even if the server span is not sampled, we have to continue - we need to compute the
// http.route properly so that it can be captured by the server metrics
if (serverSpan == null) {
return;
}
HttpRouteState httpRouteState = HttpRouteState.fromContextOrNull(context);
if (httpRouteState == null) {
// TODO: remove this branch?
String httpRoute = httpRouteGetter.get(context, arg1, arg2);
if (httpRoute != null && !httpRoute.isEmpty()) {
// update just the attribute - without http.method we can't compute a proper span name here
serverSpan.setAttribute(SemanticAttributes.HTTP_ROUTE, httpRoute);
}
return;
}
// special case for servlet filters, even when we have a route from previous filter see whether
// the new route is better and if so use it instead
boolean onlyIfBetterRoute =
!source.useFirst && source.order == httpRouteState.getUpdatedBySourceOrder();
if (source.order > httpRouteState.getUpdatedBySourceOrder() || onlyIfBetterRoute) {
String route = httpRouteGetter.get(context, arg1, arg2);
if (route != null
&& !route.isEmpty()
&& (!onlyIfBetterRoute || isBetterRoute(httpRouteState, route))) {
// update just the span name - the attribute will be picked up by the
// HttpServerAttributesExtractor at the end of request processing
updateSpanName(serverSpan, httpRouteState, route);
httpRouteState.update(context, source.order, route);
}
}
}
// This is used when setting route from a servlet filter to pick the most descriptive (longest)
// route.
private static boolean isBetterRoute(HttpRouteState httpRouteState, String name) {
String route = httpRouteState.getRoute();
int routeLength = route == null ? 0 : route.length();
return name.length() > routeLength;
}
private static void updateSpanName(Span serverSpan, HttpRouteState httpRouteState, String route) {
String method = httpRouteState.getMethod();
// method should never really be null - but in case it for some reason is, we'll rely on the
// span name extractor behavior
if (method != null) {
serverSpan.updateName(method + " " + route);
}
}
/**
* Returns the {@code http.route} attribute value that's stored in the {@code context}, or null if
* it was not set before.
*/
@Nullable
static String getRoute(Context context) {
HttpRouteState httpRouteState = HttpRouteState.fromContextOrNull(context);
return httpRouteState == null ? null : httpRouteState.getRoute();
}
private static final class OneArgAdapter<T> implements HttpRouteBiGetter<T, HttpRouteGetter<T>> {
private static final OneArgAdapter<Object> INSTANCE = new OneArgAdapter<>();
@SuppressWarnings("unchecked")
static <T> OneArgAdapter<T> getInstance() {
return (OneArgAdapter<T>) INSTANCE;
}
@Override
@Nullable
public String get(Context context, T arg, HttpRouteGetter<T> httpRouteGetter) {
return httpRouteGetter.get(context, arg);
}
}
private static final class ConstantAdapter implements HttpRouteGetter<String> {
private static final ConstantAdapter INSTANCE = new ConstantAdapter();
@Nullable
@Override
public String get(Context context, String route) {
return route;
}
HttpServerRoute.update(context, source.toHttpServerRouteSource(), httpRouteGetter, arg1, arg2);
}
}

View File

@ -5,7 +5,13 @@
package io.opentelemetry.instrumentation.api.instrumenter.http;
/** Represents the source that provided the {@code http.route} attribute. */
/**
* Represents the source that provided the {@code http.route} attribute.
*
* @deprecated This class is deprecated and will be removed in the 2.0 release. Use {@link
* HttpServerRouteSource} instead.
*/
@Deprecated
public enum HttpRouteSource {
// for servlet filters we try to find the best name which isn't necessarily from the first
// filter that is called
@ -27,4 +33,18 @@ public enum HttpRouteSource {
this.order = order;
this.useFirst = useFirst;
}
HttpServerRouteSource toHttpServerRouteSource() {
switch (this) {
case FILTER:
return HttpServerRouteSource.SERVER_FILTER;
case SERVLET:
return HttpServerRouteSource.SERVER;
case CONTROLLER:
return HttpServerRouteSource.CONTROLLER;
case NESTED_CONTROLLER:
return HttpServerRouteSource.NESTED_CONTROLLER;
}
throw new IllegalStateException("Unsupported value " + this);
}
}

View File

@ -37,7 +37,7 @@ public final class HttpServerAttributesExtractorBuilder<REQUEST, RESPONSE> {
List<String> capturedRequestHeaders = emptyList();
List<String> capturedResponseHeaders = emptyList();
Set<String> knownMethods = HttpConstants.KNOWN_METHODS;
Function<Context, String> httpRouteGetter = HttpRouteHolder::getRoute;
Function<Context, String> httpRouteGetter = HttpServerRoute::get;
HttpServerAttributesExtractorBuilder(
HttpServerAttributesGetter<REQUEST, RESPONSE> httpAttributesGetter,

View File

@ -0,0 +1,194 @@
/*
* Copyright The OpenTelemetry Authors
* SPDX-License-Identifier: Apache-2.0
*/
package io.opentelemetry.instrumentation.api.instrumenter.http;
import io.opentelemetry.api.trace.Span;
import io.opentelemetry.context.Context;
import io.opentelemetry.instrumentation.api.instrumenter.ContextCustomizer;
import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter;
import io.opentelemetry.instrumentation.api.instrumenter.LocalRootSpan;
import io.opentelemetry.instrumentation.api.internal.HttpRouteState;
import io.opentelemetry.semconv.trace.attributes.SemanticAttributes;
import javax.annotation.Nullable;
/**
* A helper class that keeps track of the {@code http.route} attribute value during HTTP server
* request processing.
*
* <p>Usually the route is not accessible when the request processing starts; and needs to be set
* later, after the instrumented operation starts. This class provides several static methods that
* allow the instrumentation author to provide the matching HTTP route to the instrumentation when
* it is discovered.
*/
public final class HttpServerRoute {
/**
* Returns a {@link ContextCustomizer} that initializes an {@link HttpServerRoute} in the {@link
* Context} returned from {@link Instrumenter#start(Context, Object)}.
*/
public static <REQUEST> ContextCustomizer<REQUEST> create(
HttpServerAttributesGetter<REQUEST, ?> getter) {
return (context, request, startAttributes) -> {
if (HttpRouteState.fromContextOrNull(context) != null) {
return context;
}
String method = getter.getHttpRequestMethod(request);
return context.with(HttpRouteState.create(method, null, 0));
};
}
private HttpServerRoute() {}
/**
* Updates the {@code http.route} attribute in the received {@code context}.
*
* <p>If there is a server span in the context, and the context has been customized with a {@link
* HttpServerRoute}, then this method will update the route using the provided {@code httpRoute}
* if and only if the last {@link HttpServerRouteSource} to update the route using this method has
* strictly lower priority than the provided {@link HttpServerRouteSource}, and the passed value
* is non-null.
*
* <p>If there is a server span in the context, and the context has NOT been customized with a
* {@link HttpServerRoute}, then this method will update the route using the provided value if it
* is non-null.
*/
public static void update(
Context context, HttpServerRouteSource source, @Nullable String httpRoute) {
update(context, source, ConstantAdapter.INSTANCE, httpRoute);
}
/**
* Updates the {@code http.route} attribute in the received {@code context}.
*
* <p>If there is a server span in the context, and the context has been customized with a {@link
* HttpServerRoute}, then this method will update the route using the provided {@link
* HttpServerRouteGetter} if and only if the last {@link HttpServerRouteSource} to update the
* route using this method has strictly lower priority than the provided {@link
* HttpServerRouteSource}, and the value returned from the {@link HttpServerRouteGetter} is
* non-null.
*
* <p>If there is a server span in the context, and the context has NOT been customized with a
* {@link HttpServerRoute}, then this method will update the route using the provided {@link
* HttpServerRouteGetter} if the value returned from it is non-null.
*/
public static <T> void update(
Context context,
HttpServerRouteSource source,
HttpServerRouteGetter<T> httpRouteGetter,
T arg1) {
update(context, source, OneArgAdapter.getInstance(), arg1, httpRouteGetter);
}
/**
* Updates the {@code http.route} attribute in the received {@code context}.
*
* <p>If there is a server span in the context, and the context has been customized with a {@link
* HttpServerRoute}, then this method will update the route using the provided {@link
* HttpServerRouteBiGetter} if and only if the last {@link HttpServerRouteSource} to update the
* route using this method has strictly lower priority than the provided {@link
* HttpServerRouteSource}, and the value returned from the {@link HttpServerRouteBiGetter} is
* non-null.
*
* <p>If there is a server span in the context, and the context has NOT been customized with a
* {@code ServerSpanName}, then this method will update the route using the provided {@link
* HttpServerRouteBiGetter} if the value returned from it is non-null.
*/
public static <T, U> void update(
Context context,
HttpServerRouteSource source,
HttpServerRouteBiGetter<T, U> httpRouteGetter,
T arg1,
U arg2) {
Span serverSpan = LocalRootSpan.fromContextOrNull(context);
// even if the server span is not sampled, we have to continue - we need to compute the
// http.route properly so that it can be captured by the server metrics
if (serverSpan == null) {
return;
}
HttpRouteState httpRouteState = HttpRouteState.fromContextOrNull(context);
if (httpRouteState == null) {
// TODO: remove this branch?
String httpRoute = httpRouteGetter.get(context, arg1, arg2);
if (httpRoute != null && !httpRoute.isEmpty()) {
// update just the attribute - without http.method we can't compute a proper span name here
serverSpan.setAttribute(SemanticAttributes.HTTP_ROUTE, httpRoute);
}
return;
}
// special case for servlet filters, even when we have a route from previous filter see whether
// the new route is better and if so use it instead
boolean onlyIfBetterRoute =
!source.useFirst && source.order == httpRouteState.getUpdatedBySourceOrder();
if (source.order > httpRouteState.getUpdatedBySourceOrder() || onlyIfBetterRoute) {
String route = httpRouteGetter.get(context, arg1, arg2);
if (route != null
&& !route.isEmpty()
&& (!onlyIfBetterRoute || isBetterRoute(httpRouteState, route))) {
// update just the span name - the attribute will be picked up by the
// HttpServerAttributesExtractor at the end of request processing
updateSpanName(serverSpan, httpRouteState, route);
httpRouteState.update(context, source.order, route);
}
}
}
// This is used when setting route from a servlet filter to pick the most descriptive (longest)
// route.
private static boolean isBetterRoute(HttpRouteState httpRouteState, String name) {
String route = httpRouteState.getRoute();
int routeLength = route == null ? 0 : route.length();
return name.length() > routeLength;
}
private static void updateSpanName(Span serverSpan, HttpRouteState httpRouteState, String route) {
String method = httpRouteState.getMethod();
// method should never really be null - but in case it for some reason is, we'll rely on the
// span name extractor behavior
if (method != null) {
serverSpan.updateName(method + " " + route);
}
}
/**
* Returns the {@code http.route} attribute value that's stored in the {@code context}, or null if
* it was not set before.
*/
@Nullable
static String get(Context context) {
HttpRouteState httpRouteState = HttpRouteState.fromContextOrNull(context);
return httpRouteState == null ? null : httpRouteState.getRoute();
}
private static final class OneArgAdapter<T>
implements HttpServerRouteBiGetter<T, HttpServerRouteGetter<T>> {
private static final OneArgAdapter<Object> INSTANCE = new OneArgAdapter<>();
@SuppressWarnings("unchecked")
static <T> OneArgAdapter<T> getInstance() {
return (OneArgAdapter<T>) INSTANCE;
}
@Override
@Nullable
public String get(Context context, T arg, HttpServerRouteGetter<T> httpRouteGetter) {
return httpRouteGetter.get(context, arg);
}
}
private static final class ConstantAdapter implements HttpServerRouteGetter<String> {
private static final ConstantAdapter INSTANCE = new ConstantAdapter();
@Nullable
@Override
public String get(Context context, String route) {
return route;
}
}
}

View File

@ -0,0 +1,21 @@
/*
* Copyright The OpenTelemetry Authors
* SPDX-License-Identifier: Apache-2.0
*/
package io.opentelemetry.instrumentation.api.instrumenter.http;
import io.opentelemetry.context.Context;
import javax.annotation.Nullable;
/** An interface for getting the {@code http.route} attribute. */
@FunctionalInterface
public interface HttpServerRouteBiGetter<T, U> {
/**
* Returns the {@code http.route} attribute extracted from {@code context}, {@code arg1} and
* {@code arg2}; or {@code null} if it was not found.
*/
@Nullable
String get(Context context, T arg1, U arg2);
}

View File

@ -0,0 +1,21 @@
/*
* Copyright The OpenTelemetry Authors
* SPDX-License-Identifier: Apache-2.0
*/
package io.opentelemetry.instrumentation.api.instrumenter.http;
import io.opentelemetry.context.Context;
import javax.annotation.Nullable;
/** An interface for getting the {@code http.route} attribute. */
@FunctionalInterface
public interface HttpServerRouteGetter<T> {
/**
* Returns the {@code http.route} attribute extracted from {@code context} and {@code arg}; or
* {@code null} if it was not found.
*/
@Nullable
String get(Context context, T arg);
}

View File

@ -0,0 +1,41 @@
/*
* Copyright The OpenTelemetry Authors
* SPDX-License-Identifier: Apache-2.0
*/
package io.opentelemetry.instrumentation.api.instrumenter.http;
/** Represents the source that provided the {@code http.route} attribute. */
public enum HttpServerRouteSource {
/**
* Represents a "filter" that may execute before the actual server handler. E.g. the Servlet API
* {@code Filter} interface. Since multiple filters may match the same request, the one with the
* longest (most detailed) route will be chosen.
*/
SERVER_FILTER(1, /* useFirst= */ false),
/** Represents the actual server handler. E.g. the Servlet API {@code Servlet} interface. */
SERVER(2),
/**
* Represents the controller, usually defined as part of some MVC framework. E.g. a Spring Web MVC
* controller method, or a JAX-RS annotated resource method.
*/
CONTROLLER(3),
/**
* Represents a nested controller, usually defined as part of some MVC framework. E.g. a JAX-RS
* annotated sub-resource method. Since multiple nested controllers may match the same request,
* the one with the longest (most detailed) route will be chosen.
*/
NESTED_CONTROLLER(4, false);
final int order;
final boolean useFirst;
HttpServerRouteSource(int order) {
this(order, /* useFirst= */ true);
}
HttpServerRouteSource(int order, boolean useFirst) {
this.order = order;
this.useFirst = useFirst;
}
}

View File

@ -0,0 +1,28 @@
/*
* Copyright The OpenTelemetry Authors
* SPDX-License-Identifier: Apache-2.0
*/
package io.opentelemetry.instrumentation.api.instrumenter.http;
import static org.assertj.core.api.Assertions.assertThat;
import io.opentelemetry.context.Context;
import org.junit.jupiter.api.Test;
class HttpClientResendCountTest {
@Test
void resendCountShouldBeZeroWhenNotInitialized() {
assertThat(HttpClientResendCount.getAndIncrement(Context.root())).isEqualTo(0);
assertThat(HttpClientResendCount.getAndIncrement(Context.root())).isEqualTo(0);
}
@Test
void incrementResendCount() {
Context context = HttpClientResendCount.initialize(Context.root());
assertThat(HttpClientResendCount.getAndIncrement(context)).isEqualTo(0);
assertThat(HttpClientResendCount.getAndIncrement(context)).isEqualTo(1);
}
}

View File

@ -1,28 +0,0 @@
/*
* Copyright The OpenTelemetry Authors
* SPDX-License-Identifier: Apache-2.0
*/
package io.opentelemetry.instrumentation.api.instrumenter.http;
import static org.assertj.core.api.Assertions.assertThat;
import io.opentelemetry.context.Context;
import org.junit.jupiter.api.Test;
class HttpClientResendTest {
@Test
void resendCountShouldBeZeroWhenNotInitialized() {
assertThat(HttpClientResend.getAndIncrement(Context.root())).isEqualTo(0);
assertThat(HttpClientResend.getAndIncrement(Context.root())).isEqualTo(0);
}
@Test
void incrementResendCount() {
Context context = HttpClientResend.initialize(Context.root());
assertThat(HttpClientResend.getAndIncrement(context)).isEqualTo(0);
assertThat(HttpClientResend.getAndIncrement(context)).isEqualTo(1);
}
}

View File

@ -22,7 +22,7 @@ import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;
@ExtendWith(MockitoExtension.class)
class HttpRouteHolderTest {
class HttpServerRouteTest {
@RegisterExtension static final OpenTelemetryExtension testing = OpenTelemetryExtension.create();
@ -33,7 +33,7 @@ class HttpRouteHolderTest {
void setUp() {
instrumenter =
Instrumenter.<String, Void>builder(testing.getOpenTelemetry(), "test", s -> s)
.addContextCustomizer(HttpRouteHolder.create(getter))
.addContextCustomizer(HttpServerRoute.create(getter))
.buildInstrumenter();
}
@ -44,13 +44,13 @@ class HttpRouteHolderTest {
parentSpan.end();
Context context = instrumenter.start(Context.root().with(parentSpan), "test");
assertNull(HttpRouteHolder.getRoute(context));
assertNull(HttpServerRoute.get(context));
HttpRouteHolder.updateHttpRoute(context, HttpRouteSource.SERVLET, "/get/:id");
HttpServerRoute.update(context, HttpServerRouteSource.SERVER, "/get/:id");
instrumenter.end(context, "test", null, null);
assertNull(HttpRouteHolder.getRoute(context));
assertNull(HttpServerRoute.get(context));
assertThat(testing.getSpans())
.satisfiesExactly(
span -> assertThat(span).hasName("parent"), span -> assertThat(span).hasName("test"));
@ -61,13 +61,13 @@ class HttpRouteHolderTest {
when(getter.getHttpRequestMethod("test")).thenReturn("GET");
Context context = instrumenter.start(Context.root(), "test");
assertNull(HttpRouteHolder.getRoute(context));
assertNull(HttpServerRoute.get(context));
HttpRouteHolder.updateHttpRoute(context, HttpRouteSource.SERVLET, "/get/:id");
HttpServerRoute.update(context, HttpServerRouteSource.SERVER, "/get/:id");
instrumenter.end(context, "test", null, null);
assertEquals("/get/:id", HttpRouteHolder.getRoute(context));
assertEquals("/get/:id", HttpServerRoute.get(context));
assertThat(testing.getSpans())
.satisfiesExactly(span -> assertThat(span).hasName("GET /get/:id"));
}
@ -77,14 +77,14 @@ class HttpRouteHolderTest {
when(getter.getHttpRequestMethod("test")).thenReturn("GET");
Context context = instrumenter.start(Context.root(), "test");
assertNull(HttpRouteHolder.getRoute(context));
assertNull(HttpServerRoute.get(context));
HttpRouteHolder.updateHttpRoute(context, HttpRouteSource.SERVLET, "/route1");
HttpRouteHolder.updateHttpRoute(context, HttpRouteSource.SERVLET, "/route2");
HttpServerRoute.update(context, HttpServerRouteSource.SERVER, "/route1");
HttpServerRoute.update(context, HttpServerRouteSource.SERVER, "/route2");
instrumenter.end(context, "test", null, null);
assertEquals("/route1", HttpRouteHolder.getRoute(context));
assertEquals("/route1", HttpServerRoute.get(context));
assertThat(testing.getSpans())
.satisfiesExactly(span -> assertThat(span).hasName("GET /route1"));
}
@ -94,14 +94,14 @@ class HttpRouteHolderTest {
when(getter.getHttpRequestMethod("test")).thenReturn("GET");
Context context = instrumenter.start(Context.root(), "test");
assertNull(HttpRouteHolder.getRoute(context));
assertNull(HttpServerRoute.get(context));
HttpRouteHolder.updateHttpRoute(context, HttpRouteSource.CONTROLLER, "/route1");
HttpRouteHolder.updateHttpRoute(context, HttpRouteSource.SERVLET, "/route2");
HttpServerRoute.update(context, HttpServerRouteSource.CONTROLLER, "/route1");
HttpServerRoute.update(context, HttpServerRouteSource.SERVER, "/route2");
instrumenter.end(context, "test", null, null);
assertEquals("/route1", HttpRouteHolder.getRoute(context));
assertEquals("/route1", HttpServerRoute.get(context));
assertThat(testing.getSpans())
.satisfiesExactly(span -> assertThat(span).hasName("GET /route1"));
}
@ -111,14 +111,14 @@ class HttpRouteHolderTest {
when(getter.getHttpRequestMethod("test")).thenReturn("GET");
Context context = instrumenter.start(Context.root(), "test");
assertNull(HttpRouteHolder.getRoute(context));
assertNull(HttpServerRoute.get(context));
HttpRouteHolder.updateHttpRoute(context, HttpRouteSource.SERVLET, "/route1");
HttpRouteHolder.updateHttpRoute(context, HttpRouteSource.CONTROLLER, "/route2");
HttpServerRoute.update(context, HttpServerRouteSource.SERVER, "/route1");
HttpServerRoute.update(context, HttpServerRouteSource.CONTROLLER, "/route2");
instrumenter.end(context, "test", null, null);
assertEquals("/route2", HttpRouteHolder.getRoute(context));
assertEquals("/route2", HttpServerRoute.get(context));
assertThat(testing.getSpans())
.satisfiesExactly(span -> assertThat(span).hasName("GET /route2"));
}
@ -128,14 +128,14 @@ class HttpRouteHolderTest {
when(getter.getHttpRequestMethod("test")).thenReturn("GET");
Context context = instrumenter.start(Context.root(), "test");
assertNull(HttpRouteHolder.getRoute(context));
assertNull(HttpServerRoute.get(context));
HttpRouteHolder.updateHttpRoute(context, HttpRouteSource.FILTER, "/a/route");
HttpRouteHolder.updateHttpRoute(context, HttpRouteSource.FILTER, "/a/much/better/route");
HttpServerRoute.update(context, HttpServerRouteSource.SERVER_FILTER, "/a/route");
HttpServerRoute.update(context, HttpServerRouteSource.SERVER_FILTER, "/a/much/better/route");
instrumenter.end(context, "test", null, null);
assertEquals("/a/much/better/route", HttpRouteHolder.getRoute(context));
assertEquals("/a/much/better/route", HttpServerRoute.get(context));
assertThat(testing.getSpans())
.satisfiesExactly(span -> assertThat(span).hasName("GET /a/much/better/route"));
}
@ -145,14 +145,14 @@ class HttpRouteHolderTest {
when(getter.getHttpRequestMethod("test")).thenReturn("GET");
Context context = instrumenter.start(Context.root(), "test");
assertNull(HttpRouteHolder.getRoute(context));
assertNull(HttpServerRoute.get(context));
HttpRouteHolder.updateHttpRoute(context, HttpRouteSource.FILTER, "/a/pretty/good/route");
HttpRouteHolder.updateHttpRoute(context, HttpRouteSource.FILTER, "/a");
HttpServerRoute.update(context, HttpServerRouteSource.SERVER_FILTER, "/a/pretty/good/route");
HttpServerRoute.update(context, HttpServerRouteSource.SERVER_FILTER, "/a");
instrumenter.end(context, "test", null, null);
assertEquals("/a/pretty/good/route", HttpRouteHolder.getRoute(context));
assertEquals("/a/pretty/good/route", HttpServerRoute.get(context));
assertThat(testing.getSpans())
.satisfiesExactly(span -> assertThat(span).hasName("GET /a/pretty/good/route"));
}
@ -162,13 +162,13 @@ class HttpRouteHolderTest {
when(getter.getHttpRequestMethod("test")).thenReturn(null);
Context context = instrumenter.start(Context.root(), "test");
assertNull(HttpRouteHolder.getRoute(context));
assertNull(HttpServerRoute.get(context));
HttpRouteHolder.updateHttpRoute(context, HttpRouteSource.SERVLET, "/get/:id");
HttpServerRoute.update(context, HttpServerRouteSource.SERVER, "/get/:id");
instrumenter.end(context, "test", null, null);
assertEquals("/get/:id", HttpRouteHolder.getRoute(context));
assertEquals("/get/:id", HttpServerRoute.get(context));
assertThat(testing.getSpans()).satisfiesExactly(span -> assertThat(span).hasName("test"));
}
}

View File

@ -9,9 +9,9 @@ import akka.http.scaladsl.model.HttpRequest;
import akka.http.scaladsl.model.HttpResponse;
import io.opentelemetry.api.GlobalOpenTelemetry;
import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteHolder;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerAttributesExtractor;
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 io.opentelemetry.javaagent.bootstrap.internal.CommonConfig;
@ -36,7 +36,7 @@ public final class AkkaHttpServerSingletons {
.setKnownMethods(CommonConfig.get().getKnownHttpRequestMethods())
.build())
.addOperationMetrics(HttpServerMetrics.get())
.addContextCustomizer(HttpRouteHolder.create(httpAttributesGetter))
.addContextCustomizer(HttpServerRoute.create(httpAttributesGetter))
.buildServerInstrumenter(AkkaHttpServerHeaders.INSTANCE);
}

View File

@ -14,8 +14,8 @@ import io.opentelemetry.api.trace.Span;
import io.opentelemetry.api.trace.StatusCode;
import io.opentelemetry.context.Context;
import io.opentelemetry.instrumentation.api.instrumenter.ErrorCauseExtractor;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteHolder;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteSource;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRoute;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRouteSource;
class ServerDecorator extends SimpleDecoratingHttpService {
@ -34,8 +34,8 @@ class ServerDecorator extends SimpleDecoratingHttpService {
Context otelContext = Context.current();
HttpRouteHolder.updateHttpRoute(
otelContext, HttpRouteSource.SERVLET, (context, name) -> name, matchedRoute);
HttpServerRoute.update(
otelContext, HttpServerRouteSource.SERVER, (context, name) -> name, matchedRoute);
try {
return unwrap().serve(ctx, req);

View File

@ -19,10 +19,10 @@ import io.opentelemetry.instrumentation.api.instrumenter.http.HttpClientAttribut
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpClientAttributesExtractorBuilder;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpClientExperimentalMetrics;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpClientMetrics;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteHolder;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerAttributesExtractor;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerAttributesExtractorBuilder;
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 io.opentelemetry.instrumentation.armeria.v1_3.internal.ArmeriaHttpClientAttributesGetter;
@ -214,7 +214,7 @@ public final class ArmeriaTelemetryBuilder {
HttpSpanStatusExtractor.create(serverAttributesGetter)))
.addAttributesExtractor(httpServerAttributesExtractorBuilder.build())
.addOperationMetrics(HttpServerMetrics.get())
.addContextCustomizer(HttpRouteHolder.create(serverAttributesGetter));
.addContextCustomizer(HttpServerRoute.create(serverAttributesGetter));
if (peerService != null) {
clientInstrumenterBuilder.addAttributesExtractor(

View File

@ -25,8 +25,8 @@ package io.opentelemetry.javaagent.instrumentation.apachecamel.decorators;
import io.opentelemetry.api.common.AttributesBuilder;
import io.opentelemetry.context.Context;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteHolder;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteSource;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRoute;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRouteSource;
import io.opentelemetry.javaagent.instrumentation.apachecamel.CamelDirection;
import io.opentelemetry.semconv.trace.attributes.SemanticAttributes;
import java.net.MalformedURLException;
@ -122,9 +122,9 @@ class HttpSpanDecorator extends BaseSpanDecorator {
if (!shouldAppendHttpRoute(camelDirection)) {
return;
}
HttpRouteHolder.updateHttpRoute(
HttpServerRoute.update(
context,
HttpRouteSource.CONTROLLER,
HttpServerRouteSource.CONTROLLER,
(c, exchange, endpoint) -> getPath(exchange, endpoint),
camelExchange,
camelEndpoint);

View File

@ -11,8 +11,8 @@ import io.opentelemetry.context.Context;
import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter;
import io.opentelemetry.instrumentation.api.instrumenter.code.CodeAttributesExtractor;
import io.opentelemetry.instrumentation.api.instrumenter.code.CodeSpanNameExtractor;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteHolder;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteSource;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRoute;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRouteSource;
public final class FinatraSingletons {
@ -34,8 +34,8 @@ public final class FinatraSingletons {
}
public static void updateServerSpanName(Context context, RouteInfo routeInfo) {
HttpRouteHolder.updateHttpRoute(
context, HttpRouteSource.CONTROLLER, (c, route) -> route.path(), routeInfo);
HttpServerRoute.update(
context, HttpServerRouteSource.CONTROLLER, (c, route) -> route.path(), routeInfo);
}
private FinatraSingletons() {}

View File

@ -5,13 +5,13 @@
package io.opentelemetry.javaagent.instrumentation.grails;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteGetter;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRouteGetter;
import io.opentelemetry.javaagent.bootstrap.servlet.ServletContextPath;
import org.grails.web.mapping.mvc.GrailsControllerUrlMappingInfo;
public class GrailsServerSpanNaming {
public static final HttpRouteGetter<GrailsControllerUrlMappingInfo> SERVER_SPAN_NAME =
public static final HttpServerRouteGetter<GrailsControllerUrlMappingInfo> SERVER_SPAN_NAME =
(context, info) -> {
String action =
info.getActionName() != null

View File

@ -5,7 +5,6 @@
package io.opentelemetry.javaagent.instrumentation.grails;
import static io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteSource.CONTROLLER;
import static net.bytebuddy.matcher.ElementMatchers.isMethod;
import static net.bytebuddy.matcher.ElementMatchers.isPublic;
import static net.bytebuddy.matcher.ElementMatchers.named;
@ -13,7 +12,8 @@ import static net.bytebuddy.matcher.ElementMatchers.takesArgument;
import static net.bytebuddy.matcher.ElementMatchers.takesArguments;
import io.opentelemetry.context.Context;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteHolder;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRoute;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRouteSource;
import io.opentelemetry.javaagent.bootstrap.Java8BytecodeBridge;
import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation;
import io.opentelemetry.javaagent.extension.instrumentation.TypeTransformer;
@ -48,9 +48,9 @@ public class UrlMappingsInfoHandlerAdapterInstrumentation implements TypeInstrum
if (handler instanceof GrailsControllerUrlMappingInfo) {
Context parentContext = Java8BytecodeBridge.currentContext();
HttpRouteHolder.updateHttpRoute(
HttpServerRoute.update(
parentContext,
CONTROLLER,
HttpServerRouteSource.CONTROLLER,
GrailsServerSpanNaming.SERVER_SPAN_NAME,
(GrailsControllerUrlMappingInfo) handler);
}

View File

@ -7,9 +7,9 @@ package io.opentelemetry.javaagent.instrumentation.grizzly;
import io.opentelemetry.api.GlobalOpenTelemetry;
import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteHolder;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerAttributesExtractor;
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 io.opentelemetry.javaagent.bootstrap.internal.CommonConfig;
@ -45,7 +45,7 @@ public final class GrizzlySingletons {
.init(context))
.addContextCustomizer(
(context, httpRequestPacket, startAttributes) -> GrizzlyErrorHolder.init(context))
.addContextCustomizer(HttpRouteHolder.create(httpAttributesGetter))
.addContextCustomizer(HttpServerRoute.create(httpAttributesGetter))
.buildServerInstrumenter(HttpRequestHeadersGetter.INSTANCE);
}

View File

@ -19,8 +19,8 @@ import static net.bytebuddy.matcher.ElementMatchers.not;
import io.opentelemetry.context.Context;
import io.opentelemetry.context.Scope;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteHolder;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteSource;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRoute;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRouteSource;
import io.opentelemetry.javaagent.bootstrap.CallDepth;
import io.opentelemetry.javaagent.bootstrap.Java8BytecodeBridge;
import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation;
@ -83,9 +83,9 @@ public class JaxrsAnnotationsInstrumentation implements TypeInstrumentation {
Context parentContext = Java8BytecodeBridge.currentContext();
handlerData = new HandlerData(target.getClass(), method);
HttpRouteHolder.updateHttpRoute(
HttpServerRoute.update(
parentContext,
HttpRouteSource.CONTROLLER,
HttpServerRouteSource.CONTROLLER,
JaxrsServerSpanNaming.SERVER_SPAN_NAME,
handlerData);

View File

@ -5,13 +5,13 @@
package io.opentelemetry.javaagent.instrumentation.jaxrs.v1_0;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteGetter;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRouteGetter;
import io.opentelemetry.javaagent.bootstrap.jaxrs.JaxrsContextPath;
import io.opentelemetry.javaagent.bootstrap.servlet.ServletContextPath;
public class JaxrsServerSpanNaming {
public static final HttpRouteGetter<HandlerData> SERVER_SPAN_NAME =
public static final HttpServerRouteGetter<HandlerData> SERVER_SPAN_NAME =
(context, handlerData) -> {
String pathBasedSpanName = handlerData.getServerSpanName();
// If path based name is empty skip prepending context path so that path based name would

View File

@ -9,8 +9,8 @@ import static io.opentelemetry.javaagent.instrumentation.jaxrs.v2_0.JaxrsAnnotat
import io.opentelemetry.context.Context;
import io.opentelemetry.context.Scope;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteHolder;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteSource;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRoute;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRouteSource;
import io.opentelemetry.javaagent.bootstrap.Java8BytecodeBridge;
import io.opentelemetry.javaagent.instrumentation.jaxrs.JaxrsConstants;
import io.opentelemetry.javaagent.instrumentation.jaxrs.JaxrsServerSpanNaming;
@ -64,9 +64,9 @@ public class DefaultRequestContextInstrumentation extends AbstractRequestContext
Context parentContext = Java8BytecodeBridge.currentContext();
handlerData = new Jaxrs2HandlerData(filterClass, method);
HttpRouteHolder.updateHttpRoute(
HttpServerRoute.update(
parentContext,
HttpRouteSource.CONTROLLER,
HttpServerRouteSource.CONTROLLER,
JaxrsServerSpanNaming.SERVER_SPAN_NAME,
handlerData);

View File

@ -18,8 +18,8 @@ import static net.bytebuddy.matcher.ElementMatchers.not;
import io.opentelemetry.context.Context;
import io.opentelemetry.context.Scope;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteHolder;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteSource;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRoute;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRouteSource;
import io.opentelemetry.instrumentation.api.util.VirtualField;
import io.opentelemetry.javaagent.bootstrap.CallDepth;
import io.opentelemetry.javaagent.bootstrap.Java8BytecodeBridge;
@ -105,9 +105,9 @@ public class JaxrsAnnotationsInstrumentation implements TypeInstrumentation {
Context parentContext = Java8BytecodeBridge.currentContext();
handlerData = new Jaxrs2HandlerData(target.getClass(), method);
HttpRouteHolder.updateHttpRoute(
HttpServerRoute.update(
parentContext,
HttpRouteSource.CONTROLLER,
HttpServerRouteSource.CONTROLLER,
JaxrsServerSpanNaming.SERVER_SPAN_NAME,
handlerData);

View File

@ -8,9 +8,9 @@ package io.opentelemetry.javaagent.instrumentation.jaxrs.v2_0;
import static io.opentelemetry.javaagent.instrumentation.jaxrs.JaxrsPathUtil.normalizePath;
import io.opentelemetry.context.Context;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteGetter;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteHolder;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteSource;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRoute;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRouteGetter;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRouteSource;
import io.opentelemetry.javaagent.bootstrap.jaxrs.JaxrsContextPath;
import io.opentelemetry.javaagent.bootstrap.servlet.ServletContextPath;
import org.apache.cxf.jaxrs.model.ClassResourceInfo;
@ -18,7 +18,7 @@ import org.apache.cxf.jaxrs.model.OperationResourceInfo;
import org.apache.cxf.jaxrs.model.URITemplate;
import org.apache.cxf.message.Exchange;
public final class CxfSpanName implements HttpRouteGetter<String> {
public final class CxfSpanName implements HttpServerRouteGetter<String> {
public static final CxfSpanName INSTANCE = new CxfSpanName();
@ -26,7 +26,7 @@ public final class CxfSpanName implements HttpRouteGetter<String> {
Context context = Context.current();
String jaxrsName = calculateJaxrsName(context, exchange);
HttpRouteHolder.updateHttpRoute(context, HttpRouteSource.NESTED_CONTROLLER, this, jaxrsName);
HttpServerRoute.update(context, HttpServerRouteSource.NESTED_CONTROLLER, this, jaxrsName);
return JaxrsContextPath.init(context, jaxrsName);
}

View File

@ -8,9 +8,9 @@ package io.opentelemetry.javaagent.instrumentation.jaxrs.v2_0;
import static io.opentelemetry.javaagent.instrumentation.jaxrs.JaxrsPathUtil.normalizePath;
import io.opentelemetry.context.Context;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteGetter;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteHolder;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteSource;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRoute;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRouteGetter;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRouteSource;
import io.opentelemetry.javaagent.bootstrap.jaxrs.JaxrsContextPath;
import io.opentelemetry.javaagent.bootstrap.servlet.ServletContextPath;
import javax.annotation.Nullable;
@ -19,13 +19,13 @@ import javax.ws.rs.core.UriInfo;
import org.glassfish.jersey.server.ContainerRequest;
import org.glassfish.jersey.server.ExtendedUriInfo;
public class JerseySpanName implements HttpRouteGetter<Request> {
public class JerseySpanName implements HttpServerRouteGetter<Request> {
public static final JerseySpanName INSTANCE = new JerseySpanName();
public void updateServerSpanName(Request request) {
Context context = Context.current();
HttpRouteHolder.updateHttpRoute(context, HttpRouteSource.NESTED_CONTROLLER, this, request);
HttpServerRoute.update(context, HttpServerRouteSource.NESTED_CONTROLLER, this, request);
}
@Override

View File

@ -5,22 +5,21 @@
package io.opentelemetry.javaagent.instrumentation.jaxrs.v2_0;
import static io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteSource.NESTED_CONTROLLER;
import io.opentelemetry.context.Context;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteGetter;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteHolder;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRoute;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRouteGetter;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRouteSource;
import io.opentelemetry.javaagent.bootstrap.jaxrs.JaxrsContextPath;
import io.opentelemetry.javaagent.bootstrap.servlet.ServletContextPath;
import javax.annotation.Nullable;
public final class ResteasySpanName implements HttpRouteGetter<String> {
public final class ResteasySpanName implements HttpServerRouteGetter<String> {
public static final ResteasySpanName INSTANCE = new ResteasySpanName();
public void updateServerSpanName(Context context, String name) {
if (name != null) {
HttpRouteHolder.updateHttpRoute(context, NESTED_CONTROLLER, this, name);
HttpServerRoute.update(context, HttpServerRouteSource.NESTED_CONTROLLER, this, name);
}
}

View File

@ -9,8 +9,8 @@ import static io.opentelemetry.javaagent.instrumentation.jaxrs.v3_0.JaxrsAnnotat
import io.opentelemetry.context.Context;
import io.opentelemetry.context.Scope;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteHolder;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteSource;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRoute;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRouteSource;
import io.opentelemetry.javaagent.bootstrap.Java8BytecodeBridge;
import io.opentelemetry.javaagent.instrumentation.jaxrs.JaxrsConstants;
import io.opentelemetry.javaagent.instrumentation.jaxrs.JaxrsServerSpanNaming;
@ -64,9 +64,9 @@ public class DefaultRequestContextInstrumentation extends AbstractRequestContext
Context parentContext = Java8BytecodeBridge.currentContext();
handlerData = new Jaxrs3HandlerData(filterClass, method);
HttpRouteHolder.updateHttpRoute(
HttpServerRoute.update(
parentContext,
HttpRouteSource.CONTROLLER,
HttpServerRouteSource.CONTROLLER,
JaxrsServerSpanNaming.SERVER_SPAN_NAME,
handlerData);

View File

@ -18,8 +18,8 @@ import static net.bytebuddy.matcher.ElementMatchers.not;
import io.opentelemetry.context.Context;
import io.opentelemetry.context.Scope;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteHolder;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteSource;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRoute;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRouteSource;
import io.opentelemetry.instrumentation.api.util.VirtualField;
import io.opentelemetry.javaagent.bootstrap.CallDepth;
import io.opentelemetry.javaagent.bootstrap.Java8BytecodeBridge;
@ -105,9 +105,9 @@ public class JaxrsAnnotationsInstrumentation implements TypeInstrumentation {
Context parentContext = Java8BytecodeBridge.currentContext();
handlerData = new Jaxrs3HandlerData(target.getClass(), method);
HttpRouteHolder.updateHttpRoute(
HttpServerRoute.update(
parentContext,
HttpRouteSource.CONTROLLER,
HttpServerRouteSource.CONTROLLER,
JaxrsServerSpanNaming.SERVER_SPAN_NAME,
handlerData);

View File

@ -8,9 +8,9 @@ package io.opentelemetry.javaagent.instrumentation.jaxrs.v3_0;
import static io.opentelemetry.javaagent.instrumentation.jaxrs.JaxrsPathUtil.normalizePath;
import io.opentelemetry.context.Context;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteGetter;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteHolder;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteSource;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRoute;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRouteGetter;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRouteSource;
import io.opentelemetry.javaagent.bootstrap.jaxrs.JaxrsContextPath;
import io.opentelemetry.javaagent.bootstrap.servlet.ServletContextPath;
import jakarta.ws.rs.core.Request;
@ -19,13 +19,13 @@ import javax.annotation.Nullable;
import org.glassfish.jersey.server.ContainerRequest;
import org.glassfish.jersey.server.ExtendedUriInfo;
public class JerseySpanName implements HttpRouteGetter<Request> {
public class JerseySpanName implements HttpServerRouteGetter<Request> {
public static final JerseySpanName INSTANCE = new JerseySpanName();
public void updateServerSpanName(Request request) {
Context context = Context.current();
HttpRouteHolder.updateHttpRoute(context, HttpRouteSource.NESTED_CONTROLLER, this, request);
HttpServerRoute.update(context, HttpServerRouteSource.NESTED_CONTROLLER, this, request);
}
@Override

View File

@ -5,22 +5,21 @@
package io.opentelemetry.javaagent.instrumentation.jaxrs.v3_0;
import static io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteSource.NESTED_CONTROLLER;
import io.opentelemetry.context.Context;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteGetter;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteHolder;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRoute;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRouteGetter;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRouteSource;
import io.opentelemetry.javaagent.bootstrap.jaxrs.JaxrsContextPath;
import io.opentelemetry.javaagent.bootstrap.servlet.ServletContextPath;
import javax.annotation.Nullable;
public final class ResteasySpanName implements HttpRouteGetter<String> {
public final class ResteasySpanName implements HttpServerRouteGetter<String> {
public static final ResteasySpanName INSTANCE = new ResteasySpanName();
public void updateServerSpanName(Context context, String name) {
if (name != null) {
HttpRouteHolder.updateHttpRoute(context, NESTED_CONTROLLER, this, name);
HttpServerRoute.update(context, HttpServerRouteSource.NESTED_CONTROLLER, this, name);
}
}

View File

@ -5,13 +5,13 @@
package io.opentelemetry.javaagent.instrumentation.jaxrs;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteGetter;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRouteGetter;
import io.opentelemetry.javaagent.bootstrap.jaxrs.JaxrsContextPath;
import io.opentelemetry.javaagent.bootstrap.servlet.ServletContextPath;
public class JaxrsServerSpanNaming {
public static final HttpRouteGetter<HandlerData> SERVER_SPAN_NAME =
public static final HttpServerRouteGetter<HandlerData> SERVER_SPAN_NAME =
(context, handlerData) -> {
String pathBasedSpanName = handlerData.getServerSpanName();
// If path based name is empty skip prepending context path so that path based name would

View File

@ -9,8 +9,8 @@ import io.opentelemetry.api.trace.Span;
import io.opentelemetry.context.Context;
import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter;
import io.opentelemetry.instrumentation.api.instrumenter.LocalRootSpan;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteHolder;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteSource;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRoute;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRouteSource;
import io.opentelemetry.javaagent.bootstrap.Java8BytecodeBridge;
public final class RequestContextHelper {
@ -21,9 +21,9 @@ public final class RequestContextHelper {
Span serverSpan = LocalRootSpan.fromContextOrNull(parentContext);
Span currentSpan = Java8BytecodeBridge.spanFromContext(parentContext);
HttpRouteHolder.updateHttpRoute(
HttpServerRoute.update(
parentContext,
HttpRouteSource.CONTROLLER,
HttpServerRouteSource.CONTROLLER,
JaxrsServerSpanNaming.SERVER_SPAN_NAME,
handlerData);

View File

@ -18,10 +18,10 @@ import io.opentelemetry.instrumentation.api.instrumenter.AttributesExtractor
import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter
import io.opentelemetry.instrumentation.api.instrumenter.SpanKindExtractor
import io.opentelemetry.instrumentation.api.instrumenter.SpanStatusExtractor
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteHolder
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteSource
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerAttributesExtractor
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerMetrics
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRoute
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRouteSource
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanNameExtractor
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanStatusExtractor
import io.opentelemetry.instrumentation.api.internal.InstrumenterUtil
@ -121,7 +121,7 @@ class KtorServerTracing private constructor(
setSpanStatusExtractor(configuration.statusExtractor(HttpSpanStatusExtractor.create(httpAttributesGetter)))
addAttributesExtractor(configuration.httpAttributesExtractorBuilder.build())
addOperationMetrics(HttpServerMetrics.get())
addContextCustomizer(HttpRouteHolder.create(httpAttributesGetter))
addContextCustomizer(HttpServerRoute.create(httpAttributesGetter))
}
val instrumenter = InstrumenterUtil.buildUpstreamInstrumenter(
@ -175,7 +175,7 @@ class KtorServerTracing private constructor(
pipeline.environment.monitor.subscribe(Routing.RoutingCallStarted) { call ->
val context = call.attributes.getOrNull(contextKey)
if (context != null) {
HttpRouteHolder.updateHttpRoute(context, HttpRouteSource.SERVLET, { _, arg -> arg.route.parent.toString() }, call)
HttpServerRoute.update(context, HttpServerRouteSource.SERVER, { _, arg -> arg.route.parent.toString() }, call)
}
}

View File

@ -18,10 +18,10 @@ import io.opentelemetry.instrumentation.api.instrumenter.AttributesExtractor
import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter
import io.opentelemetry.instrumentation.api.instrumenter.SpanKindExtractor
import io.opentelemetry.instrumentation.api.instrumenter.SpanStatusExtractor
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteHolder
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteSource
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerAttributesExtractor
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerMetrics
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRoute
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRouteSource
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanNameExtractor
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanStatusExtractor
import io.opentelemetry.instrumentation.api.internal.InstrumenterUtil
@ -121,7 +121,7 @@ class KtorServerTracing private constructor(
setSpanStatusExtractor(configuration.statusExtractor(HttpSpanStatusExtractor.create(httpAttributesGetter)))
addAttributesExtractor(configuration.httpAttributesExtractorBuilder.build())
addOperationMetrics(HttpServerMetrics.get())
addContextCustomizer(HttpRouteHolder.create(httpAttributesGetter))
addContextCustomizer(HttpServerRoute.create(httpAttributesGetter))
}
val instrumenter = InstrumenterUtil.buildUpstreamInstrumenter(
@ -173,7 +173,7 @@ class KtorServerTracing private constructor(
}
pipeline.environment.monitor.subscribe(Routing.RoutingCallStarted) { call ->
HttpRouteHolder.updateHttpRoute(Context.current(), HttpRouteSource.SERVLET, { _, arg -> arg.route.parent.toString() }, call)
HttpServerRoute.update(Context.current(), HttpServerRouteSource.SERVER, { _, arg -> arg.route.parent.toString() }, call)
}
return feature

View File

@ -7,9 +7,9 @@ package io.opentelemetry.javaagent.instrumentation.liberty.dispatcher;
import io.opentelemetry.api.GlobalOpenTelemetry;
import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteHolder;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerAttributesExtractor;
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 io.opentelemetry.javaagent.bootstrap.internal.CommonConfig;
@ -35,7 +35,7 @@ public final class LibertyDispatcherSingletons {
.setCapturedResponseHeaders(CommonConfig.get().getServerResponseHeaders())
.setKnownMethods(CommonConfig.get().getKnownHttpRequestMethods())
.build())
.addContextCustomizer(HttpRouteHolder.create(httpAttributesGetter))
.addContextCustomizer(HttpServerRoute.create(httpAttributesGetter))
.addOperationMetrics(HttpServerMetrics.get())
.buildServerInstrumenter(LibertyDispatcherRequestGetter.INSTANCE);
}

View File

@ -7,9 +7,9 @@ package io.opentelemetry.javaagent.instrumentation.netty.v3_8.server;
import io.opentelemetry.api.GlobalOpenTelemetry;
import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteHolder;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerAttributesExtractor;
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 io.opentelemetry.instrumentation.netty.common.internal.NettyErrorHolder;
@ -40,7 +40,7 @@ final class NettyServerSingletons {
.addOperationMetrics(HttpServerMetrics.get())
.addContextCustomizer(
(context, requestAndChannel, startAttributes) -> NettyErrorHolder.init(context))
.addContextCustomizer(HttpRouteHolder.create(httpServerAttributesGetter))
.addContextCustomizer(HttpServerRoute.create(httpServerAttributesGetter))
.buildServerInstrumenter(NettyHeadersGetter.INSTANCE);
}

View File

@ -8,10 +8,10 @@ package io.opentelemetry.instrumentation.netty.v4.common.internal.server;
import io.netty.handler.codec.http.HttpResponse;
import io.opentelemetry.api.OpenTelemetry;
import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteHolder;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerAttributesExtractor;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerAttributesExtractorBuilder;
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 io.opentelemetry.instrumentation.netty.common.internal.NettyErrorHolder;
@ -42,7 +42,7 @@ public final class NettyServerInstrumenterFactory {
.addAttributesExtractor(extractorBuilder.build())
.addOperationMetrics(HttpServerMetrics.get())
.addContextCustomizer((context, request, attributes) -> NettyErrorHolder.init(context))
.addContextCustomizer(HttpRouteHolder.create(httpAttributesGetter))
.addContextCustomizer(HttpServerRoute.create(httpAttributesGetter))
.buildServerInstrumenter(HttpRequestHeadersGetter.INSTANCE);
}

View File

@ -11,7 +11,7 @@ import io.opentelemetry.api.GlobalOpenTelemetry;
import io.opentelemetry.context.Context;
import io.opentelemetry.context.Scope;
import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpClientResend;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpClientResendCount;
import io.opentelemetry.instrumentation.api.instrumenter.net.PeerServiceAttributesExtractor;
import io.opentelemetry.instrumentation.okhttp.v3_0.internal.ConnectionErrorSpanInterceptor;
import io.opentelemetry.instrumentation.okhttp.v3_0.internal.OkHttpAttributesGetter;
@ -40,7 +40,7 @@ public final class OkHttp3Singletons {
public static final Interceptor CONTEXT_INTERCEPTOR =
chain -> {
try (Scope ignored = HttpClientResend.initialize(Context.current()).makeCurrent()) {
try (Scope ignored = HttpClientResendCount.initialize(Context.current()).makeCurrent()) {
return chain.proceed(chain.request());
}
};

View File

@ -7,7 +7,7 @@ package io.opentelemetry.instrumentation.okhttp.v3_0;
import io.opentelemetry.context.Context;
import io.opentelemetry.context.Scope;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpClientResend;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpClientResendCount;
import java.io.IOException;
import okhttp3.Interceptor;
import okhttp3.Request;
@ -23,7 +23,7 @@ final class ContextInterceptor implements Interceptor {
parentContext = Context.current();
}
// include the resend counter
Context context = HttpClientResend.initialize(parentContext);
Context context = HttpClientResendCount.initialize(parentContext);
try (Scope ignored = context.makeCurrent()) {
return chain.proceed(request);
}

View File

@ -7,7 +7,7 @@ package io.opentelemetry.instrumentation.okhttp.v3_0.internal;
import io.opentelemetry.context.Context;
import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpClientResend;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpClientResendCount;
import io.opentelemetry.instrumentation.api.internal.InstrumenterUtil;
import java.io.IOException;
import java.time.Instant;
@ -42,7 +42,7 @@ public final class ConnectionErrorSpanInterceptor implements Interceptor {
throw t;
} finally {
// only create a span when there wasn't any HTTP request
if (HttpClientResend.get(parentContext) == 0) {
if (HttpClientResendCount.get(parentContext) == 0) {
if (instrumenter.shouldStart(parentContext, request)) {
InstrumenterUtil.startAndEnd(
instrumenter, parentContext, request, response, error, startTime, Instant.now());

View File

@ -12,8 +12,8 @@ import io.opentelemetry.api.trace.Span;
import io.opentelemetry.api.trace.SpanKind;
import io.opentelemetry.context.Context;
import io.opentelemetry.instrumentation.api.instrumenter.LocalRootSpan;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteHolder;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteSource;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRoute;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRouteSource;
import io.opentelemetry.instrumentation.api.internal.SpanKey;
import io.opentelemetry.instrumentation.testing.junit.AgentInstrumentationExtension;
import io.opentelemetry.instrumentation.testing.junit.InstrumentationExtension;
@ -80,8 +80,8 @@ class ContextBridgeTest {
AgentSpanTesting.runWithHttpServerSpan(
"server",
() ->
HttpRouteHolder.updateHttpRoute(
Context.current(), HttpRouteSource.SERVLET, "/test/controller/:id"));
HttpServerRoute.update(
Context.current(), HttpServerRouteSource.SERVER, "/test/controller/:id"));
testing.waitAndAssertTraces(
trace ->
@ -100,8 +100,8 @@ class ContextBridgeTest {
AgentSpanTesting.runWithHttpServerSpan(
"server",
() ->
HttpRouteHolder.updateHttpRoute(
Context.current(), HttpRouteSource.CONTROLLER, "/test/controller/:id"));
HttpServerRoute.update(
Context.current(), HttpServerRouteSource.CONTROLLER, "/test/controller/:id"));
testing.waitAndAssertTraces(
trace ->

View File

@ -11,9 +11,9 @@ import io.opentelemetry.context.Context;
import io.opentelemetry.context.ContextKey;
import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter;
import io.opentelemetry.instrumentation.api.instrumenter.SpanKindExtractor;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteHolder;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteSource;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerAttributesExtractor;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRoute;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRouteSource;
import io.opentelemetry.instrumentation.api.internal.SpanKey;
public final class AgentSpanTestingInstrumenter {
@ -31,14 +31,14 @@ public final class AgentSpanTestingInstrumenter {
Instrumenter.<String, Void>builder(GlobalOpenTelemetry.get(), "test", request -> request)
.addAttributesExtractor(
HttpServerAttributesExtractor.create(MockHttpServerAttributesGetter.INSTANCE))
.addContextCustomizer(HttpRouteHolder.create(MockHttpServerAttributesGetter.INSTANCE))
.addContextCustomizer(HttpServerRoute.create(MockHttpServerAttributesGetter.INSTANCE))
.addContextCustomizer(
(context, request, startAttributes) -> context.with(REQUEST_CONTEXT_KEY, request))
.buildInstrumenter(SpanKindExtractor.alwaysServer());
public static Context startHttpServerSpan(String name) {
Context context = HTTP_SERVER_INSTRUMENTER.start(Context.current(), name);
HttpRouteHolder.updateHttpRoute(context, HttpRouteSource.SERVLET, "/test/server/*");
HttpServerRoute.update(context, HttpServerRouteSource.SERVER, "/test/server/*");
return context;
}

View File

@ -9,8 +9,8 @@ import io.opentelemetry.api.GlobalOpenTelemetry;
import io.opentelemetry.api.trace.Span;
import io.opentelemetry.context.Context;
import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteHolder;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteSource;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRoute;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRouteSource;
import play.api.mvc.Request;
import scala.Option;
@ -33,7 +33,7 @@ public final class Play24Singletons {
}
Span.fromContext(context).updateName(route);
HttpRouteHolder.updateHttpRoute(context, HttpRouteSource.CONTROLLER, route);
HttpServerRoute.update(context, HttpServerRouteSource.CONTROLLER, route);
}
private static String getRoute(Request<?> request) {

View File

@ -9,8 +9,8 @@ import io.opentelemetry.api.GlobalOpenTelemetry;
import io.opentelemetry.api.trace.Span;
import io.opentelemetry.context.Context;
import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteHolder;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteSource;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRoute;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRouteSource;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import javax.annotation.Nullable;
@ -60,7 +60,7 @@ public final class Play26Singletons {
}
Span.fromContext(context).updateName(route);
HttpRouteHolder.updateHttpRoute(context, HttpRouteSource.CONTROLLER, route);
HttpServerRoute.update(context, HttpServerRouteSource.CONTROLLER, route);
}
private static String getRoute(Request<?> request) {

View File

@ -5,7 +5,6 @@
package io.opentelemetry.javaagent.instrumentation.quarkus.resteasy.reactive;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteSource;
import org.jboss.resteasy.reactive.server.core.ResteasyReactiveRequestContext;
public final class OtelRequestContext {
@ -15,8 +14,7 @@ public final class OtelRequestContext {
public static OtelRequestContext start(ResteasyReactiveRequestContext requestContext) {
OtelRequestContext context = new OtelRequestContext();
contextThreadLocal.set(context);
ResteasyReactiveSpanName.INSTANCE.updateServerSpanName(
requestContext, HttpRouteSource.NESTED_CONTROLLER);
ResteasyReactiveSpanName.INSTANCE.updateServerSpanName(requestContext);
return context;
}
@ -31,8 +29,7 @@ public final class OtelRequestContext {
context.firstInvoke = false;
return;
}
ResteasyReactiveSpanName.INSTANCE.updateServerSpanName(
requestContext, HttpRouteSource.NESTED_CONTROLLER);
ResteasyReactiveSpanName.INSTANCE.updateServerSpanName(requestContext);
}
public void close() {

View File

@ -8,8 +8,8 @@ package io.opentelemetry.javaagent.instrumentation.quarkus.resteasy.reactive;
import static io.opentelemetry.javaagent.instrumentation.jaxrs.JaxrsPathUtil.normalizePath;
import io.opentelemetry.context.Context;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteHolder;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteSource;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRoute;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRouteSource;
import io.opentelemetry.instrumentation.api.util.VirtualField;
import org.jboss.resteasy.reactive.server.core.ResteasyReactiveRequestContext;
import org.jboss.resteasy.reactive.server.mapping.RuntimeResource;
@ -22,10 +22,10 @@ final class ResteasyReactiveSpanName {
public static final ResteasyReactiveSpanName INSTANCE = new ResteasyReactiveSpanName();
void updateServerSpanName(ResteasyReactiveRequestContext requestContext, HttpRouteSource source) {
void updateServerSpanName(ResteasyReactiveRequestContext requestContext) {
Context context = Context.current();
String jaxRsName = calculateJaxRsName(requestContext);
HttpRouteHolder.updateHttpRoute(context, source, jaxRsName);
HttpServerRoute.update(context, HttpServerRouteSource.NESTED_CONTROLLER, jaxRsName);
pathField.set(requestContext, jaxRsName);
}

View File

@ -10,8 +10,8 @@ import io.opentelemetry.api.trace.Span;
import io.opentelemetry.api.trace.StatusCode;
import io.opentelemetry.instrumentation.api.instrumenter.ErrorCauseExtractor;
import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteHolder;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteSource;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRoute;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRouteSource;
import ratpack.handling.Context;
public final class RatpackSingletons {
@ -41,8 +41,8 @@ public final class RatpackSingletons {
}
// update the netty server span name; FILTER is probably the best match for ratpack Handlers
HttpRouteHolder.updateHttpRoute(
otelContext, HttpRouteSource.FILTER, (context, name) -> name, matchedRoute);
HttpServerRoute.update(
otelContext, HttpServerRouteSource.SERVER_FILTER, (context, name) -> name, matchedRoute);
return matchedRoute;
}

View File

@ -5,11 +5,11 @@
package io.opentelemetry.instrumentation.ratpack.v1_7;
import static io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteSource.CONTROLLER;
import static io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRouteSource.CONTROLLER;
import io.opentelemetry.context.Scope;
import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteHolder;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRoute;
import ratpack.error.ServerErrorHandler;
import ratpack.handling.Context;
import ratpack.handling.Handler;
@ -39,7 +39,7 @@ public final class OpenTelemetryServerHandler implements Handler {
context.onClose(
outcome -> {
// Route not available in beginning of request so handle it manually here.
HttpRouteHolder.updateHttpRoute(
HttpServerRoute.update(
otelCtx, CONTROLLER, OpenTelemetryServerHandler::getRoute, context);
Throwable error =

View File

@ -11,10 +11,10 @@ import io.opentelemetry.instrumentation.api.instrumenter.AttributesExtractor;
import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpClientAttributesExtractor;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpClientAttributesExtractorBuilder;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteHolder;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerAttributesExtractor;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerAttributesExtractorBuilder;
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.ArrayList;
@ -142,7 +142,7 @@ public final class RatpackTelemetryBuilder {
.addAttributesExtractor(httpServerAttributesExtractorBuilder.build())
.addAttributesExtractors(additionalExtractors)
.addOperationMetrics(HttpServerMetrics.get())
.addContextCustomizer(HttpRouteHolder.create(httpAttributes))
.addContextCustomizer(HttpServerRoute.create(httpAttributes))
.buildServerInstrumenter(RatpackGetter.INSTANCE);
return new RatpackTelemetry(instrumenter, httpClientInstrumenter());

View File

@ -8,7 +8,7 @@ package io.opentelemetry.javaagent.instrumentation.reactornetty.v1_0;
import static io.opentelemetry.javaagent.instrumentation.reactornetty.v1_0.ReactorContextKeys.CONTEXTS_HOLDER_KEY;
import io.opentelemetry.context.Context;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpClientResend;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpClientResendCount;
import io.opentelemetry.instrumentation.netty.v4_1.NettyClientTelemetry;
import java.util.function.BiConsumer;
import java.util.function.Function;
@ -118,7 +118,7 @@ public final class HttpResponseReceiverInstrumenter {
public void accept(HttpClientRequest request, Throwable error) {
instrumentationContexts.endClientSpan(null, error);
if (HttpClientResend.get(instrumentationContexts.getParentContext()) == 0) {
if (HttpClientResendCount.get(instrumentationContexts.getParentContext()) == 0) {
// request is an instance of FailedHttpClientRequest, which does not implement a correct
// resourceUrl() method -- we have to work around that
request = FailedRequestWithUrlMaker.create(config, request);

View File

@ -8,7 +8,7 @@ package io.opentelemetry.javaagent.instrumentation.reactornetty.v1_0;
import static io.opentelemetry.javaagent.instrumentation.reactornetty.v1_0.ReactorNettySingletons.instrumenter;
import io.opentelemetry.context.Context;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpClientResend;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpClientResendCount;
import io.opentelemetry.instrumentation.api.internal.InstrumenterUtil;
import io.opentelemetry.instrumentation.api.internal.Timer;
import java.util.Queue;
@ -27,7 +27,7 @@ final class InstrumentationContexts {
private final Queue<RequestAndContext> clientContexts = new LinkedBlockingQueue<>();
void initialize(Context parentContext) {
this.parentContext = HttpClientResend.initialize(parentContext);
this.parentContext = HttpClientResendCount.initialize(parentContext);
timer = Timer.start();
}

View File

@ -7,7 +7,7 @@ package io.opentelemetry.javaagent.instrumentation.restlet.v1_1;
import io.opentelemetry.api.GlobalOpenTelemetry;
import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteGetter;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRouteGetter;
import io.opentelemetry.instrumentation.restlet.v1_1.RestletTelemetry;
import io.opentelemetry.javaagent.bootstrap.internal.CommonConfig;
import io.opentelemetry.javaagent.bootstrap.servlet.ServletContextPath;
@ -28,7 +28,7 @@ public final class RestletSingletons {
return INSTRUMENTER;
}
public static HttpRouteGetter<String> serverSpanName() {
public static HttpServerRouteGetter<String> serverSpanName() {
return ServletContextPath::prepend;
}

View File

@ -5,14 +5,14 @@
package io.opentelemetry.javaagent.instrumentation.restlet.v1_1;
import static io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteSource.CONTROLLER;
import static io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRouteSource.CONTROLLER;
import static io.opentelemetry.javaagent.bootstrap.Java8BytecodeBridge.currentContext;
import static io.opentelemetry.javaagent.instrumentation.restlet.v1_1.RestletSingletons.serverSpanName;
import static net.bytebuddy.matcher.ElementMatchers.isMethod;
import static net.bytebuddy.matcher.ElementMatchers.named;
import static net.bytebuddy.matcher.ElementMatchers.takesArgument;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteHolder;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRoute;
import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation;
import io.opentelemetry.javaagent.extension.instrumentation.TypeTransformer;
import net.bytebuddy.asm.Advice;
@ -44,7 +44,7 @@ public class RouteInstrumentation implements TypeInstrumentation {
public static void getRouteInfo(@Advice.This Route route, @Advice.Argument(0) Request request) {
String pattern = route.getTemplate().getPattern();
HttpRouteHolder.updateHttpRoute(currentContext(), CONTROLLER, serverSpanName(), pattern);
HttpServerRoute.update(currentContext(), CONTROLLER, serverSpanName(), pattern);
}
}
}

View File

@ -5,7 +5,7 @@
package io.opentelemetry.javaagent.instrumentation.restlet.v1_1;
import static io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteSource.CONTROLLER;
import static io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRouteSource.CONTROLLER;
import static io.opentelemetry.javaagent.bootstrap.Java8BytecodeBridge.currentContext;
import static io.opentelemetry.javaagent.instrumentation.restlet.v1_1.RestletSingletons.instrumenter;
import static io.opentelemetry.javaagent.instrumentation.restlet.v1_1.RestletSingletons.serverSpanName;
@ -15,7 +15,7 @@ import static net.bytebuddy.matcher.ElementMatchers.takesArgument;
import io.opentelemetry.context.Context;
import io.opentelemetry.context.Scope;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteHolder;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRoute;
import io.opentelemetry.javaagent.bootstrap.http.HttpServerResponseCustomizerHolder;
import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation;
import io.opentelemetry.javaagent.extension.instrumentation.TypeTransformer;
@ -77,7 +77,7 @@ public class ServerInstrumentation implements TypeInstrumentation {
scope.close();
if (Status.CLIENT_ERROR_NOT_FOUND.equals(response.getStatus())) {
HttpRouteHolder.updateHttpRoute(context, CONTROLLER, serverSpanName(), "/*");
HttpServerRoute.update(context, CONTROLLER, serverSpanName(), "/*");
}
HttpServerResponseCustomizerHolder.getCustomizer()

View File

@ -9,10 +9,10 @@ import com.google.errorprone.annotations.CanIgnoreReturnValue;
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.HttpRouteHolder;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerAttributesExtractor;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerAttributesExtractorBuilder;
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.ArrayList;
@ -105,7 +105,7 @@ public final class RestletTelemetryBuilder {
.addAttributesExtractor(httpAttributesExtractorBuilder.build())
.addAttributesExtractors(additionalExtractors)
.addOperationMetrics(HttpServerMetrics.get())
.addContextCustomizer(HttpRouteHolder.create(httpAttributesGetter))
.addContextCustomizer(HttpServerRoute.create(httpAttributesGetter))
.buildServerInstrumenter(RestletHeadersGetter.INSTANCE);
return new RestletTelemetry(instrumenter);

View File

@ -5,12 +5,12 @@
package io.opentelemetry.instrumentation.restlet.v1_1;
import static io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteSource.CONTROLLER;
import static io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRouteSource.CONTROLLER;
import io.opentelemetry.context.Context;
import io.opentelemetry.context.Scope;
import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteHolder;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRoute;
import org.restlet.Filter;
import org.restlet.data.Request;
import org.restlet.data.Response;
@ -38,7 +38,7 @@ final class TracingFilter extends Filter {
scope = context.makeCurrent();
}
HttpRouteHolder.updateHttpRoute(context, CONTROLLER, (ctx, s) -> s, path);
HttpServerRoute.update(context, CONTROLLER, (ctx, s) -> s, path);
Throwable statusThrowable = null;
try {

View File

@ -7,8 +7,8 @@ package io.opentelemetry.javaagent.instrumentation.restlet.v2_0;
import io.opentelemetry.api.GlobalOpenTelemetry;
import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteGetter;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerAttributesExtractor;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRouteGetter;
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;
@ -33,7 +33,7 @@ public final class RestletSingletons {
return INSTRUMENTER;
}
public static HttpRouteGetter<String> serverSpanName() {
public static HttpServerRouteGetter<String> serverSpanName() {
return ServletContextPath::prepend;
}

View File

@ -5,7 +5,7 @@
package io.opentelemetry.javaagent.instrumentation.restlet.v2_0;
import static io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteSource.CONTROLLER;
import static io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRouteSource.CONTROLLER;
import static io.opentelemetry.javaagent.bootstrap.Java8BytecodeBridge.currentContext;
import static io.opentelemetry.javaagent.instrumentation.restlet.v2_0.RestletSingletons.serverSpanName;
import static net.bytebuddy.matcher.ElementMatchers.isMethod;
@ -13,7 +13,7 @@ import static net.bytebuddy.matcher.ElementMatchers.named;
import static net.bytebuddy.matcher.ElementMatchers.namedOneOf;
import static net.bytebuddy.matcher.ElementMatchers.takesArgument;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteHolder;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRoute;
import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation;
import io.opentelemetry.javaagent.extension.instrumentation.TypeTransformer;
import net.bytebuddy.asm.Advice;
@ -46,7 +46,7 @@ public class RouteInstrumentation implements TypeInstrumentation {
@Advice.This TemplateRoute route, @Advice.Argument(0) Request request) {
String pattern = route.getTemplate().getPattern();
HttpRouteHolder.updateHttpRoute(currentContext(), CONTROLLER, serverSpanName(), pattern);
HttpServerRoute.update(currentContext(), CONTROLLER, serverSpanName(), pattern);
}
}
}

View File

@ -5,7 +5,7 @@
package io.opentelemetry.javaagent.instrumentation.restlet.v2_0;
import static io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteSource.CONTROLLER;
import static io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRouteSource.CONTROLLER;
import static io.opentelemetry.javaagent.bootstrap.Java8BytecodeBridge.currentContext;
import static io.opentelemetry.javaagent.instrumentation.restlet.v2_0.RestletSingletons.instrumenter;
import static io.opentelemetry.javaagent.instrumentation.restlet.v2_0.RestletSingletons.serverSpanName;
@ -15,7 +15,7 @@ import static net.bytebuddy.matcher.ElementMatchers.takesArgument;
import io.opentelemetry.context.Context;
import io.opentelemetry.context.Scope;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteHolder;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRoute;
import io.opentelemetry.javaagent.bootstrap.http.HttpServerResponseCustomizerHolder;
import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation;
import io.opentelemetry.javaagent.extension.instrumentation.TypeTransformer;
@ -77,7 +77,7 @@ public class ServerInstrumentation implements TypeInstrumentation {
scope.close();
if (Status.CLIENT_ERROR_NOT_FOUND.equals(response.getStatus())) {
HttpRouteHolder.updateHttpRoute(context, CONTROLLER, serverSpanName(), "/*");
HttpServerRoute.update(context, CONTROLLER, serverSpanName(), "/*");
}
HttpServerResponseCustomizerHolder.getCustomizer()

View File

@ -5,12 +5,12 @@
package io.opentelemetry.instrumentation.restlet.v2_0;
import static io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteSource.CONTROLLER;
import static io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRouteSource.CONTROLLER;
import io.opentelemetry.context.Context;
import io.opentelemetry.context.Scope;
import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteHolder;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRoute;
import org.restlet.Request;
import org.restlet.Response;
import org.restlet.resource.ResourceException;
@ -39,7 +39,7 @@ final class TracingFilter extends Filter {
scope = context.makeCurrent();
}
HttpRouteHolder.updateHttpRoute(context, CONTROLLER, (ctx, s) -> s, path);
HttpServerRoute.update(context, CONTROLLER, (ctx, s) -> s, path);
Throwable statusThrowable = null;
try {

View File

@ -8,8 +8,8 @@ package io.opentelemetry.instrumentation.restlet.v2_0.internal;
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.HttpRouteHolder;
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;
@ -37,7 +37,7 @@ public final class RestletInstrumenterFactory {
.addAttributesExtractor(httpServerAttributesExtractor)
.addAttributesExtractors(additionalExtractors)
.addOperationMetrics(HttpServerMetrics.get())
.addContextCustomizer(HttpRouteHolder.create(httpAttributesGetter))
.addContextCustomizer(HttpServerRoute.create(httpAttributesGetter))
.buildServerInstrumenter(new RestletHeadersGetter());
}

View File

@ -5,15 +5,15 @@
package io.opentelemetry.javaagent.instrumentation.servlet;
import static io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteSource.FILTER;
import static io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteSource.SERVLET;
import static io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRouteSource.SERVER;
import static io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRouteSource.SERVER_FILTER;
import io.opentelemetry.api.trace.Span;
import io.opentelemetry.api.trace.SpanContext;
import io.opentelemetry.context.Context;
import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter;
import io.opentelemetry.instrumentation.api.instrumenter.LocalRootSpan;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteHolder;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRoute;
import io.opentelemetry.javaagent.bootstrap.servlet.AppServerBridge;
import io.opentelemetry.javaagent.bootstrap.servlet.MappingResolver;
import io.opentelemetry.javaagent.bootstrap.servlet.ServletContextPath;
@ -86,8 +86,8 @@ public abstract class BaseServletHelper<REQUEST, RESPONSE> {
Context context, REQUEST request, MappingResolver mappingResolver, boolean servlet) {
Context result = addServletContextPath(context, request);
if (mappingResolver != null) {
HttpRouteHolder.updateHttpRoute(
result, servlet ? SERVLET : FILTER, spanNameProvider, mappingResolver, request);
HttpServerRoute.update(
result, servlet ? SERVER : SERVER_FILTER, spanNameProvider, mappingResolver, request);
}
return result;

View File

@ -12,10 +12,10 @@ import io.opentelemetry.instrumentation.api.instrumenter.ContextCustomizer;
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.HttpRouteHolder;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerAttributesExtractor;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerAttributesGetter;
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 io.opentelemetry.javaagent.bootstrap.internal.CommonConfig;
@ -65,7 +65,7 @@ public final class ServletInstrumenterBuilder<REQUEST, RESPONSE> {
.build())
.addAttributesExtractor(additionalAttributesExtractor)
.addOperationMetrics(HttpServerMetrics.get())
.addContextCustomizer(HttpRouteHolder.create(httpAttributesGetter));
.addContextCustomizer(HttpServerRoute.create(httpAttributesGetter));
if (ServletRequestParametersExtractor.enabled()) {
AttributesExtractor<ServletRequestContext<REQUEST>, ServletResponseContext<RESPONSE>>
requestParametersExtractor = new ServletRequestParametersExtractor<>(accessor);

View File

@ -6,14 +6,14 @@
package io.opentelemetry.javaagent.instrumentation.servlet;
import io.opentelemetry.context.Context;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteBiGetter;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRouteBiGetter;
import io.opentelemetry.javaagent.bootstrap.servlet.MappingResolver;
import io.opentelemetry.javaagent.bootstrap.servlet.ServletContextPath;
import javax.annotation.Nullable;
/** Helper class for constructing span name for given servlet/filter mapping and request. */
public class ServletSpanNameProvider<REQUEST>
implements HttpRouteBiGetter<MappingResolver, REQUEST> {
implements HttpServerRouteBiGetter<MappingResolver, REQUEST> {
private final ServletAccessor<REQUEST, ?> servletAccessor;
public ServletSpanNameProvider(ServletAccessor<REQUEST, ?> servletAccessor) {

View File

@ -6,8 +6,8 @@
package io.opentelemetry.javaagent.instrumentation.sparkjava;
import io.opentelemetry.context.Context;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteHolder;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteSource;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRoute;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRouteSource;
import javax.annotation.Nullable;
import spark.routematch.RouteMatch;
@ -16,8 +16,8 @@ public final class SparkRouteUpdater {
public static void updateHttpRoute(@Nullable RouteMatch routeMatch) {
if (routeMatch != null) {
Context context = Context.current();
HttpRouteHolder.updateHttpRoute(
context, HttpRouteSource.CONTROLLER, (c, r) -> r.getMatchUri(), routeMatch);
HttpServerRoute.update(
context, HttpServerRouteSource.CONTROLLER, (c, r) -> r.getMatchUri(), routeMatch);
}
}

View File

@ -19,8 +19,8 @@ import static net.bytebuddy.matcher.ElementMatchers.takesArguments;
import io.opentelemetry.context.Context;
import io.opentelemetry.context.Scope;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteHolder;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteSource;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRoute;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRouteSource;
import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation;
import io.opentelemetry.javaagent.extension.instrumentation.TypeTransformer;
import net.bytebuddy.asm.Advice;
@ -69,8 +69,8 @@ public class HandlerAdapterInstrumentation implements TypeInstrumentation {
// using the last portion of the nested path.
// HttpRouteSource.NESTED_CONTROLLER has useFirst false, and it will make http.route updated
// twice: 1st using the last portion of the nested path, 2nd time using the full nested path.
HttpRouteHolder.updateHttpRoute(
parentContext, HttpRouteSource.NESTED_CONTROLLER, httpRouteGetter(), exchange);
HttpServerRoute.update(
parentContext, HttpServerRouteSource.NESTED_CONTROLLER, httpRouteGetter(), exchange);
if (handler == null) {
return;

View File

@ -6,8 +6,8 @@
package io.opentelemetry.javaagent.instrumentation.spring.webflux.v5_0.server;
import io.opentelemetry.context.Context;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteHolder;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteSource;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRoute;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRouteSource;
import java.util.function.Consumer;
import java.util.regex.Pattern;
import javax.annotation.Nullable;
@ -29,7 +29,7 @@ public class RouteOnSuccess implements Consumer<HandlerFunction<?>> {
@Override
public void accept(HandlerFunction<?> handler) {
HttpRouteHolder.updateHttpRoute(Context.current(), HttpRouteSource.CONTROLLER, route);
HttpServerRoute.update(Context.current(), HttpServerRouteSource.CONTROLLER, route);
}
private static String parsePredicateString(RouterFunction<?> routerFunction) {

View File

@ -8,7 +8,7 @@ package io.opentelemetry.javaagent.instrumentation.spring.webflux.v5_0.server;
import io.opentelemetry.api.GlobalOpenTelemetry;
import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter;
import io.opentelemetry.instrumentation.api.instrumenter.InstrumenterBuilder;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteGetter;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRouteGetter;
import io.opentelemetry.javaagent.bootstrap.internal.ExperimentalConfig;
import io.opentelemetry.javaagent.instrumentation.spring.webflux.v5_0.SpringWebfluxConfig;
import org.springframework.web.reactive.HandlerMapping;
@ -39,7 +39,7 @@ public final class WebfluxSingletons {
return INSTRUMENTER;
}
public static HttpRouteGetter<ServerWebExchange> httpRouteGetter() {
public static HttpServerRouteGetter<ServerWebExchange> httpRouteGetter() {
return (context, exchange) -> {
Object bestPatternObj = exchange.getAttribute(HandlerMapping.BEST_MATCHING_PATTERN_ATTRIBUTE);
if (bestPatternObj == null) {

View File

@ -11,10 +11,10 @@ import io.opentelemetry.instrumentation.api.instrumenter.AttributesExtractor;
import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter;
import io.opentelemetry.instrumentation.api.instrumenter.SpanNameExtractor;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpClientAttributesExtractorBuilder;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteHolder;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerAttributesExtractor;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerAttributesExtractorBuilder;
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 io.opentelemetry.instrumentation.spring.webflux.v5_3.internal.ClientInstrumenterFactory;
@ -197,7 +197,7 @@ public final class SpringWebfluxTelemetryBuilder {
.setSpanStatusExtractor(HttpSpanStatusExtractor.create(serverAttributesGetter))
.addAttributesExtractor(httpServerAttributesExtractorBuilder.build())
.addAttributesExtractors(serverAdditionalExtractors)
.addContextCustomizer(HttpRouteHolder.create(serverAttributesGetter))
.addContextCustomizer(HttpServerRoute.create(serverAttributesGetter))
.addOperationMetrics(HttpServerMetrics.get())
.buildServerInstrumenter(WebfluxTextMapGetter.INSTANCE);

View File

@ -8,8 +8,8 @@ package io.opentelemetry.instrumentation.spring.webflux.v5_3;
import io.opentelemetry.context.Context;
import io.opentelemetry.context.Scope;
import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteHolder;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteSource;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRoute;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRouteSource;
import org.reactivestreams.Subscription;
import org.springframework.core.Ordered;
import org.springframework.http.server.reactive.ServerHttpResponse;
@ -131,10 +131,11 @@ final class TelemetryProducingWebFilter implements WebFilter, Ordered {
private void end(Context currentContext, Throwable t) {
// Update HTTP route now, because during instrumenter.start()
// the HTTP route isn't available from the exchange attributes, but is afterwards
HttpRouteHolder.updateHttpRoute(
HttpServerRoute.update(
currentContext,
HttpRouteSource.CONTROLLER,
WebfluxServerHttpAttributesGetter.INSTANCE.getHttpRoute(exchange));
HttpServerRouteSource.CONTROLLER,
(context, exchange) -> WebfluxServerHttpAttributesGetter.INSTANCE.getHttpRoute(exchange),
exchange);
instrumenter.end(currentContext, exchange, exchange, t);
}
}

View File

@ -5,7 +5,7 @@
package io.opentelemetry.javaagent.instrumentation.spring.webmvc.v3_1;
import static io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteSource.CONTROLLER;
import static io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRouteSource.CONTROLLER;
import static io.opentelemetry.javaagent.extension.matcher.AgentElementMatchers.hasClassesNamed;
import static io.opentelemetry.javaagent.extension.matcher.AgentElementMatchers.implementsInterface;
import static io.opentelemetry.javaagent.instrumentation.spring.webmvc.v3_1.SpringWebMvcSingletons.handlerInstrumenter;
@ -18,7 +18,7 @@ import static net.bytebuddy.matcher.ElementMatchers.takesArguments;
import io.opentelemetry.context.Context;
import io.opentelemetry.context.Scope;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteHolder;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRoute;
import io.opentelemetry.javaagent.bootstrap.Java8BytecodeBridge;
import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation;
import io.opentelemetry.javaagent.extension.instrumentation.TypeTransformer;
@ -74,7 +74,7 @@ public class HandlerAdapterInstrumentation implements TypeInstrumentation {
}
// Name the parent span based on the matching pattern
HttpRouteHolder.updateHttpRoute(
HttpServerRoute.update(
parentContext, CONTROLLER, SpringWebMvcServerSpanNaming.SERVER_SPAN_NAME, request);
if (!handlerInstrumenter().shouldStart(parentContext, handler)) {

View File

@ -5,14 +5,14 @@
package io.opentelemetry.javaagent.instrumentation.spring.webmvc.v3_1;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteGetter;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRouteGetter;
import io.opentelemetry.javaagent.bootstrap.servlet.ServletContextPath;
import javax.servlet.http.HttpServletRequest;
import org.springframework.web.servlet.HandlerMapping;
public class SpringWebMvcServerSpanNaming {
public static final HttpRouteGetter<HttpServletRequest> SERVER_SPAN_NAME =
public static final HttpServerRouteGetter<HttpServletRequest> SERVER_SPAN_NAME =
(context, request) -> {
Object bestMatchingPattern =
request.getAttribute(HandlerMapping.BEST_MATCHING_PATTERN_ATTRIBUTE);

View File

@ -5,11 +5,11 @@
package org.springframework.web.servlet.v3_1;
import static io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteSource.CONTROLLER;
import static io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRouteSource.CONTROLLER;
import io.opentelemetry.context.Context;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteGetter;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteHolder;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRoute;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRouteGetter;
import io.opentelemetry.javaagent.instrumentation.spring.webmvc.v3_1.SpringWebMvcServerSpanNaming;
import java.io.IOException;
import java.lang.invoke.MethodHandle;
@ -37,7 +37,7 @@ public class OpenTelemetryHandlerMappingFilter implements Filter, Ordered {
private static final MethodHandle usesPathPatternsMh = getUsesPathPatternsMh();
private static final MethodHandle parseAndCacheMh = parseAndCacheMh();
private final HttpRouteGetter<HttpServletRequest> serverSpanName =
private final HttpServerRouteGetter<HttpServletRequest> serverSpanName =
(context, request) -> {
Object previousValue = null;
if (this.parseRequestPath && PATH_ATTRIBUTE != null) {
@ -84,8 +84,7 @@ public class OpenTelemetryHandlerMappingFilter implements Filter, Ordered {
} finally {
if (handlerMappings != null) {
Context context = Context.current();
HttpRouteHolder.updateHttpRoute(
context, CONTROLLER, serverSpanName, (HttpServletRequest) request);
HttpServerRoute.update(context, CONTROLLER, serverSpanName, (HttpServletRequest) request);
}
}
}

View File

@ -10,10 +10,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.SpanNameExtractor;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteHolder;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerAttributesExtractor;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerAttributesExtractorBuilder;
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.ArrayList;
@ -131,7 +131,7 @@ public final class SpringWebMvcTelemetryBuilder {
.addAttributesExtractor(httpAttributesExtractorBuilder.build())
.addAttributesExtractors(additionalExtractors)
.addOperationMetrics(HttpServerMetrics.get())
.addContextCustomizer(HttpRouteHolder.create(httpAttributesGetter))
.addContextCustomizer(HttpServerRoute.create(httpAttributesGetter))
.buildServerInstrumenter(JavaxHttpServletRequestGetter.INSTANCE);
return new SpringWebMvcTelemetry(instrumenter);

View File

@ -5,13 +5,13 @@
package io.opentelemetry.instrumentation.spring.webmvc.v5_3;
import static io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteSource.CONTROLLER;
import static io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRouteSource.CONTROLLER;
import static java.util.Objects.requireNonNull;
import io.opentelemetry.context.Context;
import io.opentelemetry.context.Scope;
import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteHolder;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRoute;
import java.io.IOException;
import javax.servlet.FilterChain;
import javax.servlet.ServletException;
@ -61,8 +61,7 @@ final class WebMvcTelemetryProducingFilter extends OncePerRequestFilter implemen
throw t;
} finally {
if (httpRouteSupport.hasMappings()) {
HttpRouteHolder.updateHttpRoute(
context, CONTROLLER, httpRouteSupport::getHttpRoute, request);
HttpServerRoute.update(context, CONTROLLER, httpRouteSupport::getHttpRoute, request);
}
instrumenter.end(context, request, response, error);
}

View File

@ -5,7 +5,7 @@
package io.opentelemetry.javaagent.instrumentation.spring.webmvc.v6_0;
import static io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteSource.CONTROLLER;
import static io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRouteSource.CONTROLLER;
import static io.opentelemetry.javaagent.extension.matcher.AgentElementMatchers.hasClassesNamed;
import static io.opentelemetry.javaagent.extension.matcher.AgentElementMatchers.implementsInterface;
import static io.opentelemetry.javaagent.instrumentation.spring.webmvc.v6_0.SpringWebMvcSingletons.handlerInstrumenter;
@ -18,7 +18,7 @@ import static net.bytebuddy.matcher.ElementMatchers.takesArguments;
import io.opentelemetry.context.Context;
import io.opentelemetry.context.Scope;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteHolder;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRoute;
import io.opentelemetry.javaagent.bootstrap.Java8BytecodeBridge;
import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation;
import io.opentelemetry.javaagent.extension.instrumentation.TypeTransformer;
@ -74,7 +74,7 @@ public class HandlerAdapterInstrumentation implements TypeInstrumentation {
}
// Name the parent span based on the matching pattern
HttpRouteHolder.updateHttpRoute(
HttpServerRoute.update(
parentContext, CONTROLLER, SpringWebMvcServerSpanNaming.SERVER_SPAN_NAME, request);
if (!handlerInstrumenter().shouldStart(parentContext, handler)) {

View File

@ -5,14 +5,14 @@
package io.opentelemetry.javaagent.instrumentation.spring.webmvc.v6_0;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteGetter;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRouteGetter;
import io.opentelemetry.javaagent.bootstrap.servlet.ServletContextPath;
import jakarta.servlet.http.HttpServletRequest;
import org.springframework.web.servlet.HandlerMapping;
public class SpringWebMvcServerSpanNaming {
public static final HttpRouteGetter<HttpServletRequest> SERVER_SPAN_NAME =
public static final HttpServerRouteGetter<HttpServletRequest> SERVER_SPAN_NAME =
(context, request) -> {
Object bestMatchingPattern =
request.getAttribute(HandlerMapping.BEST_MATCHING_PATTERN_ATTRIBUTE);

View File

@ -5,11 +5,11 @@
package org.springframework.web.servlet.v6_0;
import static io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteSource.CONTROLLER;
import static io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRouteSource.CONTROLLER;
import io.opentelemetry.context.Context;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteGetter;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteHolder;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRoute;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRouteGetter;
import io.opentelemetry.javaagent.instrumentation.spring.webmvc.v6_0.SpringWebMvcServerSpanNaming;
import jakarta.servlet.Filter;
import jakarta.servlet.FilterChain;
@ -33,7 +33,7 @@ import org.springframework.web.util.ServletRequestPathUtils;
public class OpenTelemetryHandlerMappingFilter implements Filter, Ordered {
private final HttpRouteGetter<HttpServletRequest> serverSpanName =
private final HttpServerRouteGetter<HttpServletRequest> serverSpanName =
(context, request) -> {
RequestPath previousValue = null;
if (this.parseRequestPath) {
@ -77,8 +77,7 @@ public class OpenTelemetryHandlerMappingFilter implements Filter, Ordered {
} finally {
if (handlerMappings != null) {
Context context = Context.current();
HttpRouteHolder.updateHttpRoute(
context, CONTROLLER, serverSpanName, (HttpServletRequest) request);
HttpServerRoute.update(context, CONTROLLER, serverSpanName, (HttpServletRequest) request);
}
}
}

View File

@ -10,10 +10,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.SpanNameExtractor;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteHolder;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerAttributesExtractor;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerAttributesExtractorBuilder;
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 jakarta.servlet.http.HttpServletRequest;
@ -131,7 +131,7 @@ public final class SpringWebMvcTelemetryBuilder {
.addAttributesExtractor(httpAttributesExtractorBuilder.build())
.addAttributesExtractors(additionalExtractors)
.addOperationMetrics(HttpServerMetrics.get())
.addContextCustomizer(HttpRouteHolder.create(httpAttributesGetter))
.addContextCustomizer(HttpServerRoute.create(httpAttributesGetter))
.buildServerInstrumenter(JakartaHttpServletRequestGetter.INSTANCE);
return new SpringWebMvcTelemetry(instrumenter);

View File

@ -5,13 +5,13 @@
package io.opentelemetry.instrumentation.spring.webmvc.v6_0;
import static io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteSource.CONTROLLER;
import static io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRouteSource.CONTROLLER;
import static java.util.Objects.requireNonNull;
import io.opentelemetry.context.Context;
import io.opentelemetry.context.Scope;
import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteHolder;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRoute;
import jakarta.servlet.FilterChain;
import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServletRequest;
@ -61,8 +61,7 @@ final class WebMvcTelemetryProducingFilter extends OncePerRequestFilter implemen
throw t;
} finally {
if (httpRouteSupport.hasMappings()) {
HttpRouteHolder.updateHttpRoute(
context, CONTROLLER, httpRouteSupport::getHttpRoute, request);
HttpServerRoute.update(context, CONTROLLER, httpRouteSupport::getHttpRoute, request);
}
instrumenter.end(context, request, response, error);
}

View File

@ -5,7 +5,7 @@
package io.opentelemetry.javaagent.instrumentation.struts2;
import static io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteSource.CONTROLLER;
import static io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRouteSource.CONTROLLER;
import static io.opentelemetry.javaagent.extension.matcher.AgentElementMatchers.hasClassesNamed;
import static io.opentelemetry.javaagent.extension.matcher.AgentElementMatchers.implementsInterface;
import static io.opentelemetry.javaagent.instrumentation.struts2.StrutsSingletons.instrumenter;
@ -16,7 +16,7 @@ import static net.bytebuddy.matcher.ElementMatchers.named;
import com.opensymphony.xwork2.ActionInvocation;
import io.opentelemetry.context.Context;
import io.opentelemetry.context.Scope;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteHolder;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRoute;
import io.opentelemetry.javaagent.bootstrap.Java8BytecodeBridge;
import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation;
import io.opentelemetry.javaagent.extension.instrumentation.TypeTransformer;
@ -53,7 +53,7 @@ public class ActionInvocationInstrumentation implements TypeInstrumentation {
@Advice.Local("otelScope") Scope scope) {
Context parentContext = Java8BytecodeBridge.currentContext();
HttpRouteHolder.updateHttpRoute(
HttpServerRoute.update(
parentContext,
CONTROLLER,
StrutsServerSpanNaming.SERVER_SPAN_NAME,

View File

@ -6,12 +6,12 @@
package io.opentelemetry.javaagent.instrumentation.struts2;
import com.opensymphony.xwork2.ActionProxy;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteGetter;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRouteGetter;
import io.opentelemetry.javaagent.bootstrap.servlet.ServletContextPath;
public class StrutsServerSpanNaming {
public static final HttpRouteGetter<ActionProxy> SERVER_SPAN_NAME =
public static final HttpServerRouteGetter<ActionProxy> SERVER_SPAN_NAME =
(context, actionProxy) -> {
// We take name from the config, because it contains the path pattern from the
// configuration.

View File

@ -5,7 +5,7 @@
package io.opentelemetry.javaagent.instrumentation.tapestry;
import static io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteSource.CONTROLLER;
import static io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRouteSource.CONTROLLER;
import static io.opentelemetry.javaagent.bootstrap.Java8BytecodeBridge.currentContext;
import static net.bytebuddy.matcher.ElementMatchers.isMethod;
import static net.bytebuddy.matcher.ElementMatchers.isPublic;
@ -13,7 +13,7 @@ import static net.bytebuddy.matcher.ElementMatchers.named;
import static net.bytebuddy.matcher.ElementMatchers.takesArgument;
import static net.bytebuddy.matcher.ElementMatchers.takesArguments;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteHolder;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRoute;
import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation;
import io.opentelemetry.javaagent.extension.instrumentation.TypeTransformer;
import net.bytebuddy.asm.Advice;
@ -58,7 +58,7 @@ public class InitializeActivePageNameInstrumentation implements TypeInstrumentat
@Advice.OnMethodEnter(suppress = Throwable.class)
public static void onEnter(@Advice.Argument(0) ComponentEventRequestParameters parameters) {
HttpRouteHolder.updateHttpRoute(
HttpServerRoute.update(
currentContext(),
CONTROLLER,
TapestryServerSpanNaming.SERVER_SPAN_NAME,
@ -71,7 +71,7 @@ public class InitializeActivePageNameInstrumentation implements TypeInstrumentat
@Advice.OnMethodEnter(suppress = Throwable.class)
public static void onEnter(@Advice.Argument(0) PageRenderRequestParameters parameters) {
HttpRouteHolder.updateHttpRoute(
HttpServerRoute.update(
currentContext(),
CONTROLLER,
TapestryServerSpanNaming.SERVER_SPAN_NAME,

View File

@ -5,12 +5,12 @@
package io.opentelemetry.javaagent.instrumentation.tapestry;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteGetter;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRouteGetter;
import io.opentelemetry.javaagent.bootstrap.servlet.ServletContextPath;
public class TapestryServerSpanNaming {
public static final HttpRouteGetter<String> SERVER_SPAN_NAME =
public static final HttpServerRouteGetter<String> SERVER_SPAN_NAME =
(context, pageName) -> {
if (pageName == null) {
return null;

View File

@ -7,9 +7,9 @@ package io.opentelemetry.javaagent.instrumentation.tomcat.common;
import io.opentelemetry.api.GlobalOpenTelemetry;
import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteHolder;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerAttributesExtractor;
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 io.opentelemetry.javaagent.bootstrap.internal.CommonConfig;
@ -39,7 +39,7 @@ public final class TomcatInstrumenterFactory {
.setCapturedResponseHeaders(CommonConfig.get().getServerResponseHeaders())
.setKnownMethods(CommonConfig.get().getKnownHttpRequestMethods())
.build())
.addContextCustomizer(HttpRouteHolder.create(httpAttributesGetter))
.addContextCustomizer(HttpServerRoute.create(httpAttributesGetter))
.addContextCustomizer(
(context, request, attributes) ->
new AppServerBridge.Builder()

View File

@ -7,9 +7,9 @@ package io.opentelemetry.javaagent.instrumentation.undertow;
import io.opentelemetry.api.GlobalOpenTelemetry;
import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteHolder;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerAttributesExtractor;
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 io.opentelemetry.javaagent.bootstrap.internal.CommonConfig;
@ -37,7 +37,7 @@ public final class UndertowSingletons {
.setCapturedResponseHeaders(CommonConfig.get().getServerResponseHeaders())
.setKnownMethods(CommonConfig.get().getKnownHttpRequestMethods())
.build())
.addContextCustomizer(HttpRouteHolder.create(httpAttributesGetter))
.addContextCustomizer(HttpServerRoute.create(httpAttributesGetter))
.addContextCustomizer(
(context, request, attributes) -> {
// span is ended when counter reaches 0, we start from 2 which accounts for the

View File

@ -12,8 +12,8 @@ import com.vaadin.flow.component.UI;
import com.vaadin.flow.router.Location;
import io.opentelemetry.context.Context;
import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteHolder;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteSource;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRoute;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRouteSource;
import io.opentelemetry.javaagent.bootstrap.servlet.ServletContextPath;
import javax.annotation.Nullable;
@ -42,10 +42,10 @@ public class VaadinHelper {
Context context, VaadinServiceRequest request, Throwable throwable) {
serviceInstrumenter.end(context, request, null, throwable);
HttpRouteHolder.updateHttpRoute(
HttpServerRoute.update(
context,
HttpRouteSource.CONTROLLER,
(c, req) -> getSpanNameForVaadinServiceContext(c, req),
HttpServerRouteSource.CONTROLLER,
VaadinHelper::getSpanNameForVaadinServiceContext,
request);
}
@ -107,9 +107,9 @@ public class VaadinHelper {
public void updateServerSpanName(Location location) {
Context context = Context.current();
HttpRouteHolder.updateHttpRoute(
HttpServerRoute.update(
context,
HttpRouteSource.NESTED_CONTROLLER,
HttpServerRouteSource.NESTED_CONTROLLER,
(c, loc) -> ServletContextPath.prepend(c, getSpanNameForLocation(loc)),
location);
}

View File

@ -8,8 +8,8 @@ package io.opentelemetry.javaagent.instrumentation.vertx;
import io.opentelemetry.api.trace.Span;
import io.opentelemetry.context.Context;
import io.opentelemetry.instrumentation.api.instrumenter.LocalRootSpan;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteHolder;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteSource;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRoute;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRouteSource;
import io.vertx.core.Handler;
import io.vertx.ext.web.RoutingContext;
import java.lang.reflect.InvocationTargetException;
@ -29,8 +29,11 @@ public final class RoutingContextHandlerWrapper implements Handler<RoutingContex
@Override
public void handle(RoutingContext context) {
Context otelContext = Context.current();
HttpRouteHolder.updateHttpRoute(
otelContext, HttpRouteSource.CONTROLLER, RoutingContextHandlerWrapper::getRoute, context);
HttpServerRoute.update(
otelContext,
HttpServerRouteSource.CONTROLLER,
RoutingContextHandlerWrapper::getRoute,
context);
try {
handler.handle(context);

View File

@ -5,11 +5,11 @@
package io.opentelemetry.javaagent.instrumentation.wicket;
import static io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteSource.CONTROLLER;
import static io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRouteSource.CONTROLLER;
import static net.bytebuddy.matcher.ElementMatchers.named;
import static net.bytebuddy.matcher.ElementMatchers.takesArgument;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteHolder;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRoute;
import io.opentelemetry.javaagent.bootstrap.Java8BytecodeBridge;
import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation;
import io.opentelemetry.javaagent.extension.instrumentation.TypeTransformer;
@ -39,7 +39,7 @@ public class RequestHandlerExecutorInstrumentation implements TypeInstrumentatio
@Advice.OnMethodEnter(suppress = Throwable.class)
public static void onExit(@Advice.Argument(0) IRequestHandler handler) {
if (handler instanceof IPageClassRequestHandler) {
HttpRouteHolder.updateHttpRoute(
HttpServerRoute.update(
Java8BytecodeBridge.currentContext(),
CONTROLLER,
WicketServerSpanNaming.SERVER_SPAN_NAME,

View File

@ -5,14 +5,14 @@
package io.opentelemetry.javaagent.instrumentation.wicket;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteGetter;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRouteGetter;
import io.opentelemetry.javaagent.bootstrap.servlet.ServletContextPath;
import org.apache.wicket.core.request.handler.IPageClassRequestHandler;
import org.apache.wicket.request.cycle.RequestCycle;
public final class WicketServerSpanNaming {
public static final HttpRouteGetter<IPageClassRequestHandler> SERVER_SPAN_NAME =
public static final HttpServerRouteGetter<IPageClassRequestHandler> SERVER_SPAN_NAME =
(context, handler) -> {
// using class name as page name
String pageName = handler.getPageClass().getName();

View File

@ -18,9 +18,9 @@ import io.opentelemetry.context.Scope;
import io.opentelemetry.instrumentation.api.instrumenter.AttributesExtractor;
import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter;
import io.opentelemetry.instrumentation.api.instrumenter.SpanKindExtractor;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteHolder;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerAttributesExtractor;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerAttributesGetter;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRoute;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanNameExtractor;
import io.opentelemetry.instrumentation.api.internal.SpanKey;
import io.opentelemetry.instrumentation.api.internal.SpanKeyProvider;
@ -51,7 +51,7 @@ final class TestInstrumenters {
// cover both semconv and span-kind strategies
.addAttributesExtractor(HttpServerAttributesExtractor.create(HttpServerGetter.INSTANCE))
.addAttributesExtractor(new SpanKeyAttributesExtractor(SpanKey.KIND_SERVER))
.addContextCustomizer(HttpRouteHolder.create(HttpServerGetter.INSTANCE))
.addContextCustomizer(HttpServerRoute.create(HttpServerGetter.INSTANCE))
.buildInstrumenter(SpanKindExtractor.alwaysServer());
}