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> capturedRequestHeaders = emptyList();
List<String> capturedResponseHeaders = emptyList(); List<String> capturedResponseHeaders = emptyList();
Set<String> knownMethods = HttpConstants.KNOWN_METHODS; Set<String> knownMethods = HttpConstants.KNOWN_METHODS;
ToIntFunction<Context> resendCountIncrementer = HttpClientResend::getAndIncrement; ToIntFunction<Context> resendCountIncrementer = HttpClientResendCount::getAndIncrement;
HttpClientAttributesExtractorBuilder( HttpClientAttributesExtractorBuilder(
HttpClientAttributesGetter<REQUEST, RESPONSE> httpAttributesGetter, HttpClientAttributesGetter<REQUEST, RESPONSE> httpAttributesGetter,

View File

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

View File

@ -5,17 +5,12 @@
package io.opentelemetry.instrumentation.api.instrumenter.http; 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 @FunctionalInterface
public interface HttpRouteBiGetter<T, U> { public interface HttpRouteBiGetter<T, U> extends 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

@ -5,17 +5,12 @@
package io.opentelemetry.instrumentation.api.instrumenter.http; 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 @FunctionalInterface
public interface HttpRouteGetter<T> { public interface HttpRouteGetter<T> extends 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

@ -5,13 +5,9 @@
package io.opentelemetry.instrumentation.api.instrumenter.http; package io.opentelemetry.instrumentation.api.instrumenter.http;
import io.opentelemetry.api.trace.Span;
import io.opentelemetry.context.Context; import io.opentelemetry.context.Context;
import io.opentelemetry.instrumentation.api.instrumenter.ContextCustomizer; import io.opentelemetry.instrumentation.api.instrumenter.ContextCustomizer;
import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter; 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; 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 * 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 * allow the instrumentation author to provide the matching HTTP route to the instrumentation when
* it is discovered. * 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 { public final class HttpRouteHolder {
/** /**
@ -31,13 +31,7 @@ public final class HttpRouteHolder {
*/ */
public static <REQUEST> ContextCustomizer<REQUEST> create( public static <REQUEST> ContextCustomizer<REQUEST> create(
HttpServerAttributesGetter<REQUEST, ?> getter) { HttpServerAttributesGetter<REQUEST, ?> getter) {
return (context, request, startAttributes) -> { return HttpServerRoute.create(getter);
if (HttpRouteState.fromContextOrNull(context) != null) {
return context;
}
String method = getter.getHttpRequestMethod(request);
return context.with(HttpRouteState.create(method, null, 0));
};
} }
private HttpRouteHolder() {} private HttpRouteHolder() {}
@ -57,7 +51,7 @@ public final class HttpRouteHolder {
*/ */
public static void updateHttpRoute( public static void updateHttpRoute(
Context context, HttpRouteSource source, @Nullable String httpRoute) { 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( public static <T> void updateHttpRoute(
Context context, HttpRouteSource source, HttpRouteGetter<T> httpRouteGetter, T arg1) { 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, HttpRouteBiGetter<T, U> httpRouteGetter,
T arg1, T arg1,
U arg2) { U arg2) {
Span serverSpan = LocalRootSpan.fromContextOrNull(context); HttpServerRoute.update(context, source.toHttpServerRouteSource(), httpRouteGetter, arg1, arg2);
// 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;
}
} }
} }

View File

@ -5,7 +5,13 @@
package io.opentelemetry.instrumentation.api.instrumenter.http; 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 { public enum HttpRouteSource {
// for servlet filters we try to find the best name which isn't necessarily from the first // for servlet filters we try to find the best name which isn't necessarily from the first
// filter that is called // filter that is called
@ -27,4 +33,18 @@ public enum HttpRouteSource {
this.order = order; this.order = order;
this.useFirst = useFirst; 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> capturedRequestHeaders = emptyList();
List<String> capturedResponseHeaders = emptyList(); List<String> capturedResponseHeaders = emptyList();
Set<String> knownMethods = HttpConstants.KNOWN_METHODS; Set<String> knownMethods = HttpConstants.KNOWN_METHODS;
Function<Context, String> httpRouteGetter = HttpRouteHolder::getRoute; Function<Context, String> httpRouteGetter = HttpServerRoute::get;
HttpServerAttributesExtractorBuilder( HttpServerAttributesExtractorBuilder(
HttpServerAttributesGetter<REQUEST, RESPONSE> httpAttributesGetter, 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; import org.mockito.junit.jupiter.MockitoExtension;
@ExtendWith(MockitoExtension.class) @ExtendWith(MockitoExtension.class)
class HttpRouteHolderTest { class HttpServerRouteTest {
@RegisterExtension static final OpenTelemetryExtension testing = OpenTelemetryExtension.create(); @RegisterExtension static final OpenTelemetryExtension testing = OpenTelemetryExtension.create();
@ -33,7 +33,7 @@ class HttpRouteHolderTest {
void setUp() { void setUp() {
instrumenter = instrumenter =
Instrumenter.<String, Void>builder(testing.getOpenTelemetry(), "test", s -> s) Instrumenter.<String, Void>builder(testing.getOpenTelemetry(), "test", s -> s)
.addContextCustomizer(HttpRouteHolder.create(getter)) .addContextCustomizer(HttpServerRoute.create(getter))
.buildInstrumenter(); .buildInstrumenter();
} }
@ -44,13 +44,13 @@ class HttpRouteHolderTest {
parentSpan.end(); parentSpan.end();
Context context = instrumenter.start(Context.root().with(parentSpan), "test"); 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); instrumenter.end(context, "test", null, null);
assertNull(HttpRouteHolder.getRoute(context)); assertNull(HttpServerRoute.get(context));
assertThat(testing.getSpans()) assertThat(testing.getSpans())
.satisfiesExactly( .satisfiesExactly(
span -> assertThat(span).hasName("parent"), span -> assertThat(span).hasName("test")); span -> assertThat(span).hasName("parent"), span -> assertThat(span).hasName("test"));
@ -61,13 +61,13 @@ class HttpRouteHolderTest {
when(getter.getHttpRequestMethod("test")).thenReturn("GET"); when(getter.getHttpRequestMethod("test")).thenReturn("GET");
Context context = instrumenter.start(Context.root(), "test"); 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); instrumenter.end(context, "test", null, null);
assertEquals("/get/:id", HttpRouteHolder.getRoute(context)); assertEquals("/get/:id", HttpServerRoute.get(context));
assertThat(testing.getSpans()) assertThat(testing.getSpans())
.satisfiesExactly(span -> assertThat(span).hasName("GET /get/:id")); .satisfiesExactly(span -> assertThat(span).hasName("GET /get/:id"));
} }
@ -77,14 +77,14 @@ class HttpRouteHolderTest {
when(getter.getHttpRequestMethod("test")).thenReturn("GET"); when(getter.getHttpRequestMethod("test")).thenReturn("GET");
Context context = instrumenter.start(Context.root(), "test"); Context context = instrumenter.start(Context.root(), "test");
assertNull(HttpRouteHolder.getRoute(context)); assertNull(HttpServerRoute.get(context));
HttpRouteHolder.updateHttpRoute(context, HttpRouteSource.SERVLET, "/route1"); HttpServerRoute.update(context, HttpServerRouteSource.SERVER, "/route1");
HttpRouteHolder.updateHttpRoute(context, HttpRouteSource.SERVLET, "/route2"); HttpServerRoute.update(context, HttpServerRouteSource.SERVER, "/route2");
instrumenter.end(context, "test", null, null); instrumenter.end(context, "test", null, null);
assertEquals("/route1", HttpRouteHolder.getRoute(context)); assertEquals("/route1", HttpServerRoute.get(context));
assertThat(testing.getSpans()) assertThat(testing.getSpans())
.satisfiesExactly(span -> assertThat(span).hasName("GET /route1")); .satisfiesExactly(span -> assertThat(span).hasName("GET /route1"));
} }
@ -94,14 +94,14 @@ class HttpRouteHolderTest {
when(getter.getHttpRequestMethod("test")).thenReturn("GET"); when(getter.getHttpRequestMethod("test")).thenReturn("GET");
Context context = instrumenter.start(Context.root(), "test"); Context context = instrumenter.start(Context.root(), "test");
assertNull(HttpRouteHolder.getRoute(context)); assertNull(HttpServerRoute.get(context));
HttpRouteHolder.updateHttpRoute(context, HttpRouteSource.CONTROLLER, "/route1"); HttpServerRoute.update(context, HttpServerRouteSource.CONTROLLER, "/route1");
HttpRouteHolder.updateHttpRoute(context, HttpRouteSource.SERVLET, "/route2"); HttpServerRoute.update(context, HttpServerRouteSource.SERVER, "/route2");
instrumenter.end(context, "test", null, null); instrumenter.end(context, "test", null, null);
assertEquals("/route1", HttpRouteHolder.getRoute(context)); assertEquals("/route1", HttpServerRoute.get(context));
assertThat(testing.getSpans()) assertThat(testing.getSpans())
.satisfiesExactly(span -> assertThat(span).hasName("GET /route1")); .satisfiesExactly(span -> assertThat(span).hasName("GET /route1"));
} }
@ -111,14 +111,14 @@ class HttpRouteHolderTest {
when(getter.getHttpRequestMethod("test")).thenReturn("GET"); when(getter.getHttpRequestMethod("test")).thenReturn("GET");
Context context = instrumenter.start(Context.root(), "test"); Context context = instrumenter.start(Context.root(), "test");
assertNull(HttpRouteHolder.getRoute(context)); assertNull(HttpServerRoute.get(context));
HttpRouteHolder.updateHttpRoute(context, HttpRouteSource.SERVLET, "/route1"); HttpServerRoute.update(context, HttpServerRouteSource.SERVER, "/route1");
HttpRouteHolder.updateHttpRoute(context, HttpRouteSource.CONTROLLER, "/route2"); HttpServerRoute.update(context, HttpServerRouteSource.CONTROLLER, "/route2");
instrumenter.end(context, "test", null, null); instrumenter.end(context, "test", null, null);
assertEquals("/route2", HttpRouteHolder.getRoute(context)); assertEquals("/route2", HttpServerRoute.get(context));
assertThat(testing.getSpans()) assertThat(testing.getSpans())
.satisfiesExactly(span -> assertThat(span).hasName("GET /route2")); .satisfiesExactly(span -> assertThat(span).hasName("GET /route2"));
} }
@ -128,14 +128,14 @@ class HttpRouteHolderTest {
when(getter.getHttpRequestMethod("test")).thenReturn("GET"); when(getter.getHttpRequestMethod("test")).thenReturn("GET");
Context context = instrumenter.start(Context.root(), "test"); Context context = instrumenter.start(Context.root(), "test");
assertNull(HttpRouteHolder.getRoute(context)); assertNull(HttpServerRoute.get(context));
HttpRouteHolder.updateHttpRoute(context, HttpRouteSource.FILTER, "/a/route"); HttpServerRoute.update(context, HttpServerRouteSource.SERVER_FILTER, "/a/route");
HttpRouteHolder.updateHttpRoute(context, HttpRouteSource.FILTER, "/a/much/better/route"); HttpServerRoute.update(context, HttpServerRouteSource.SERVER_FILTER, "/a/much/better/route");
instrumenter.end(context, "test", null, null); 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()) assertThat(testing.getSpans())
.satisfiesExactly(span -> assertThat(span).hasName("GET /a/much/better/route")); .satisfiesExactly(span -> assertThat(span).hasName("GET /a/much/better/route"));
} }
@ -145,14 +145,14 @@ class HttpRouteHolderTest {
when(getter.getHttpRequestMethod("test")).thenReturn("GET"); when(getter.getHttpRequestMethod("test")).thenReturn("GET");
Context context = instrumenter.start(Context.root(), "test"); Context context = instrumenter.start(Context.root(), "test");
assertNull(HttpRouteHolder.getRoute(context)); assertNull(HttpServerRoute.get(context));
HttpRouteHolder.updateHttpRoute(context, HttpRouteSource.FILTER, "/a/pretty/good/route"); HttpServerRoute.update(context, HttpServerRouteSource.SERVER_FILTER, "/a/pretty/good/route");
HttpRouteHolder.updateHttpRoute(context, HttpRouteSource.FILTER, "/a"); HttpServerRoute.update(context, HttpServerRouteSource.SERVER_FILTER, "/a");
instrumenter.end(context, "test", null, null); 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()) assertThat(testing.getSpans())
.satisfiesExactly(span -> assertThat(span).hasName("GET /a/pretty/good/route")); .satisfiesExactly(span -> assertThat(span).hasName("GET /a/pretty/good/route"));
} }
@ -162,13 +162,13 @@ class HttpRouteHolderTest {
when(getter.getHttpRequestMethod("test")).thenReturn(null); when(getter.getHttpRequestMethod("test")).thenReturn(null);
Context context = instrumenter.start(Context.root(), "test"); 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); 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")); 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 akka.http.scaladsl.model.HttpResponse;
import io.opentelemetry.api.GlobalOpenTelemetry; import io.opentelemetry.api.GlobalOpenTelemetry;
import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter; 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.HttpServerAttributesExtractor;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerMetrics; 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.HttpSpanNameExtractor;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanStatusExtractor; import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanStatusExtractor;
import io.opentelemetry.javaagent.bootstrap.internal.CommonConfig; import io.opentelemetry.javaagent.bootstrap.internal.CommonConfig;
@ -36,7 +36,7 @@ public final class AkkaHttpServerSingletons {
.setKnownMethods(CommonConfig.get().getKnownHttpRequestMethods()) .setKnownMethods(CommonConfig.get().getKnownHttpRequestMethods())
.build()) .build())
.addOperationMetrics(HttpServerMetrics.get()) .addOperationMetrics(HttpServerMetrics.get())
.addContextCustomizer(HttpRouteHolder.create(httpAttributesGetter)) .addContextCustomizer(HttpServerRoute.create(httpAttributesGetter))
.buildServerInstrumenter(AkkaHttpServerHeaders.INSTANCE); .buildServerInstrumenter(AkkaHttpServerHeaders.INSTANCE);
} }

View File

@ -14,8 +14,8 @@ import io.opentelemetry.api.trace.Span;
import io.opentelemetry.api.trace.StatusCode; import io.opentelemetry.api.trace.StatusCode;
import io.opentelemetry.context.Context; import io.opentelemetry.context.Context;
import io.opentelemetry.instrumentation.api.instrumenter.ErrorCauseExtractor; import io.opentelemetry.instrumentation.api.instrumenter.ErrorCauseExtractor;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteHolder; import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRoute;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteSource; import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRouteSource;
class ServerDecorator extends SimpleDecoratingHttpService { class ServerDecorator extends SimpleDecoratingHttpService {
@ -34,8 +34,8 @@ class ServerDecorator extends SimpleDecoratingHttpService {
Context otelContext = Context.current(); Context otelContext = Context.current();
HttpRouteHolder.updateHttpRoute( HttpServerRoute.update(
otelContext, HttpRouteSource.SERVLET, (context, name) -> name, matchedRoute); otelContext, HttpServerRouteSource.SERVER, (context, name) -> name, matchedRoute);
try { try {
return unwrap().serve(ctx, req); 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.HttpClientAttributesExtractorBuilder;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpClientExperimentalMetrics; import io.opentelemetry.instrumentation.api.instrumenter.http.HttpClientExperimentalMetrics;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpClientMetrics; 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.HttpServerAttributesExtractor;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerAttributesExtractorBuilder; import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerAttributesExtractorBuilder;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerMetrics; 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.HttpSpanNameExtractor;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanStatusExtractor; import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanStatusExtractor;
import io.opentelemetry.instrumentation.armeria.v1_3.internal.ArmeriaHttpClientAttributesGetter; import io.opentelemetry.instrumentation.armeria.v1_3.internal.ArmeriaHttpClientAttributesGetter;
@ -214,7 +214,7 @@ public final class ArmeriaTelemetryBuilder {
HttpSpanStatusExtractor.create(serverAttributesGetter))) HttpSpanStatusExtractor.create(serverAttributesGetter)))
.addAttributesExtractor(httpServerAttributesExtractorBuilder.build()) .addAttributesExtractor(httpServerAttributesExtractorBuilder.build())
.addOperationMetrics(HttpServerMetrics.get()) .addOperationMetrics(HttpServerMetrics.get())
.addContextCustomizer(HttpRouteHolder.create(serverAttributesGetter)); .addContextCustomizer(HttpServerRoute.create(serverAttributesGetter));
if (peerService != null) { if (peerService != null) {
clientInstrumenterBuilder.addAttributesExtractor( clientInstrumenterBuilder.addAttributesExtractor(

View File

@ -25,8 +25,8 @@ package io.opentelemetry.javaagent.instrumentation.apachecamel.decorators;
import io.opentelemetry.api.common.AttributesBuilder; import io.opentelemetry.api.common.AttributesBuilder;
import io.opentelemetry.context.Context; 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.HttpRouteSource; import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRouteSource;
import io.opentelemetry.javaagent.instrumentation.apachecamel.CamelDirection; import io.opentelemetry.javaagent.instrumentation.apachecamel.CamelDirection;
import io.opentelemetry.semconv.trace.attributes.SemanticAttributes; import io.opentelemetry.semconv.trace.attributes.SemanticAttributes;
import java.net.MalformedURLException; import java.net.MalformedURLException;
@ -122,9 +122,9 @@ class HttpSpanDecorator extends BaseSpanDecorator {
if (!shouldAppendHttpRoute(camelDirection)) { if (!shouldAppendHttpRoute(camelDirection)) {
return; return;
} }
HttpRouteHolder.updateHttpRoute( HttpServerRoute.update(
context, context,
HttpRouteSource.CONTROLLER, HttpServerRouteSource.CONTROLLER,
(c, exchange, endpoint) -> getPath(exchange, endpoint), (c, exchange, endpoint) -> getPath(exchange, endpoint),
camelExchange, camelExchange,
camelEndpoint); 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.Instrumenter;
import io.opentelemetry.instrumentation.api.instrumenter.code.CodeAttributesExtractor; import io.opentelemetry.instrumentation.api.instrumenter.code.CodeAttributesExtractor;
import io.opentelemetry.instrumentation.api.instrumenter.code.CodeSpanNameExtractor; import io.opentelemetry.instrumentation.api.instrumenter.code.CodeSpanNameExtractor;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteHolder; import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRoute;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteSource; import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRouteSource;
public final class FinatraSingletons { public final class FinatraSingletons {
@ -34,8 +34,8 @@ public final class FinatraSingletons {
} }
public static void updateServerSpanName(Context context, RouteInfo routeInfo) { public static void updateServerSpanName(Context context, RouteInfo routeInfo) {
HttpRouteHolder.updateHttpRoute( HttpServerRoute.update(
context, HttpRouteSource.CONTROLLER, (c, route) -> route.path(), routeInfo); context, HttpServerRouteSource.CONTROLLER, (c, route) -> route.path(), routeInfo);
} }
private FinatraSingletons() {} private FinatraSingletons() {}

View File

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

View File

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

View File

@ -7,9 +7,9 @@ package io.opentelemetry.javaagent.instrumentation.grizzly;
import io.opentelemetry.api.GlobalOpenTelemetry; import io.opentelemetry.api.GlobalOpenTelemetry;
import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter; 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.HttpServerAttributesExtractor;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerMetrics; 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.HttpSpanNameExtractor;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanStatusExtractor; import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanStatusExtractor;
import io.opentelemetry.javaagent.bootstrap.internal.CommonConfig; import io.opentelemetry.javaagent.bootstrap.internal.CommonConfig;
@ -45,7 +45,7 @@ public final class GrizzlySingletons {
.init(context)) .init(context))
.addContextCustomizer( .addContextCustomizer(
(context, httpRequestPacket, startAttributes) -> GrizzlyErrorHolder.init(context)) (context, httpRequestPacket, startAttributes) -> GrizzlyErrorHolder.init(context))
.addContextCustomizer(HttpRouteHolder.create(httpAttributesGetter)) .addContextCustomizer(HttpServerRoute.create(httpAttributesGetter))
.buildServerInstrumenter(HttpRequestHeadersGetter.INSTANCE); .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.Context;
import io.opentelemetry.context.Scope; import io.opentelemetry.context.Scope;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteHolder; import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRoute;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteSource; import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRouteSource;
import io.opentelemetry.javaagent.bootstrap.CallDepth; import io.opentelemetry.javaagent.bootstrap.CallDepth;
import io.opentelemetry.javaagent.bootstrap.Java8BytecodeBridge; import io.opentelemetry.javaagent.bootstrap.Java8BytecodeBridge;
import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation; import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation;
@ -83,9 +83,9 @@ public class JaxrsAnnotationsInstrumentation implements TypeInstrumentation {
Context parentContext = Java8BytecodeBridge.currentContext(); Context parentContext = Java8BytecodeBridge.currentContext();
handlerData = new HandlerData(target.getClass(), method); handlerData = new HandlerData(target.getClass(), method);
HttpRouteHolder.updateHttpRoute( HttpServerRoute.update(
parentContext, parentContext,
HttpRouteSource.CONTROLLER, HttpServerRouteSource.CONTROLLER,
JaxrsServerSpanNaming.SERVER_SPAN_NAME, JaxrsServerSpanNaming.SERVER_SPAN_NAME,
handlerData); handlerData);

View File

@ -5,13 +5,13 @@
package io.opentelemetry.javaagent.instrumentation.jaxrs.v1_0; 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.jaxrs.JaxrsContextPath;
import io.opentelemetry.javaagent.bootstrap.servlet.ServletContextPath; import io.opentelemetry.javaagent.bootstrap.servlet.ServletContextPath;
public class JaxrsServerSpanNaming { public class JaxrsServerSpanNaming {
public static final HttpRouteGetter<HandlerData> SERVER_SPAN_NAME = public static final HttpServerRouteGetter<HandlerData> SERVER_SPAN_NAME =
(context, handlerData) -> { (context, handlerData) -> {
String pathBasedSpanName = handlerData.getServerSpanName(); String pathBasedSpanName = handlerData.getServerSpanName();
// If path based name is empty skip prepending context path so that path based name would // 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.Context;
import io.opentelemetry.context.Scope; import io.opentelemetry.context.Scope;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteHolder; import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRoute;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteSource; import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRouteSource;
import io.opentelemetry.javaagent.bootstrap.Java8BytecodeBridge; import io.opentelemetry.javaagent.bootstrap.Java8BytecodeBridge;
import io.opentelemetry.javaagent.instrumentation.jaxrs.JaxrsConstants; import io.opentelemetry.javaagent.instrumentation.jaxrs.JaxrsConstants;
import io.opentelemetry.javaagent.instrumentation.jaxrs.JaxrsServerSpanNaming; import io.opentelemetry.javaagent.instrumentation.jaxrs.JaxrsServerSpanNaming;
@ -64,9 +64,9 @@ public class DefaultRequestContextInstrumentation extends AbstractRequestContext
Context parentContext = Java8BytecodeBridge.currentContext(); Context parentContext = Java8BytecodeBridge.currentContext();
handlerData = new Jaxrs2HandlerData(filterClass, method); handlerData = new Jaxrs2HandlerData(filterClass, method);
HttpRouteHolder.updateHttpRoute( HttpServerRoute.update(
parentContext, parentContext,
HttpRouteSource.CONTROLLER, HttpServerRouteSource.CONTROLLER,
JaxrsServerSpanNaming.SERVER_SPAN_NAME, JaxrsServerSpanNaming.SERVER_SPAN_NAME,
handlerData); handlerData);

View File

@ -18,8 +18,8 @@ import static net.bytebuddy.matcher.ElementMatchers.not;
import io.opentelemetry.context.Context; import io.opentelemetry.context.Context;
import io.opentelemetry.context.Scope; import io.opentelemetry.context.Scope;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteHolder; import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRoute;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteSource; import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRouteSource;
import io.opentelemetry.instrumentation.api.util.VirtualField; import io.opentelemetry.instrumentation.api.util.VirtualField;
import io.opentelemetry.javaagent.bootstrap.CallDepth; import io.opentelemetry.javaagent.bootstrap.CallDepth;
import io.opentelemetry.javaagent.bootstrap.Java8BytecodeBridge; import io.opentelemetry.javaagent.bootstrap.Java8BytecodeBridge;
@ -105,9 +105,9 @@ public class JaxrsAnnotationsInstrumentation implements TypeInstrumentation {
Context parentContext = Java8BytecodeBridge.currentContext(); Context parentContext = Java8BytecodeBridge.currentContext();
handlerData = new Jaxrs2HandlerData(target.getClass(), method); handlerData = new Jaxrs2HandlerData(target.getClass(), method);
HttpRouteHolder.updateHttpRoute( HttpServerRoute.update(
parentContext, parentContext,
HttpRouteSource.CONTROLLER, HttpServerRouteSource.CONTROLLER,
JaxrsServerSpanNaming.SERVER_SPAN_NAME, JaxrsServerSpanNaming.SERVER_SPAN_NAME,
handlerData); 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 static io.opentelemetry.javaagent.instrumentation.jaxrs.JaxrsPathUtil.normalizePath;
import io.opentelemetry.context.Context; import io.opentelemetry.context.Context;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteGetter; import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRoute;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteHolder; import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRouteGetter;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteSource; import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRouteSource;
import io.opentelemetry.javaagent.bootstrap.jaxrs.JaxrsContextPath; import io.opentelemetry.javaagent.bootstrap.jaxrs.JaxrsContextPath;
import io.opentelemetry.javaagent.bootstrap.servlet.ServletContextPath; import io.opentelemetry.javaagent.bootstrap.servlet.ServletContextPath;
import org.apache.cxf.jaxrs.model.ClassResourceInfo; 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.jaxrs.model.URITemplate;
import org.apache.cxf.message.Exchange; 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(); public static final CxfSpanName INSTANCE = new CxfSpanName();
@ -26,7 +26,7 @@ public final class CxfSpanName implements HttpRouteGetter<String> {
Context context = Context.current(); Context context = Context.current();
String jaxrsName = calculateJaxrsName(context, exchange); 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); 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 static io.opentelemetry.javaagent.instrumentation.jaxrs.JaxrsPathUtil.normalizePath;
import io.opentelemetry.context.Context; import io.opentelemetry.context.Context;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteGetter; import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRoute;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteHolder; import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRouteGetter;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteSource; import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRouteSource;
import io.opentelemetry.javaagent.bootstrap.jaxrs.JaxrsContextPath; import io.opentelemetry.javaagent.bootstrap.jaxrs.JaxrsContextPath;
import io.opentelemetry.javaagent.bootstrap.servlet.ServletContextPath; import io.opentelemetry.javaagent.bootstrap.servlet.ServletContextPath;
import javax.annotation.Nullable; 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.ContainerRequest;
import org.glassfish.jersey.server.ExtendedUriInfo; 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 static final JerseySpanName INSTANCE = new JerseySpanName();
public void updateServerSpanName(Request request) { public void updateServerSpanName(Request request) {
Context context = Context.current(); Context context = Context.current();
HttpRouteHolder.updateHttpRoute(context, HttpRouteSource.NESTED_CONTROLLER, this, request); HttpServerRoute.update(context, HttpServerRouteSource.NESTED_CONTROLLER, this, request);
} }
@Override @Override

View File

@ -5,22 +5,21 @@
package io.opentelemetry.javaagent.instrumentation.jaxrs.v2_0; 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.context.Context;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteGetter; import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRoute;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteHolder; 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.jaxrs.JaxrsContextPath;
import io.opentelemetry.javaagent.bootstrap.servlet.ServletContextPath; import io.opentelemetry.javaagent.bootstrap.servlet.ServletContextPath;
import javax.annotation.Nullable; 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 static final ResteasySpanName INSTANCE = new ResteasySpanName();
public void updateServerSpanName(Context context, String name) { public void updateServerSpanName(Context context, String name) {
if (name != null) { 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.Context;
import io.opentelemetry.context.Scope; import io.opentelemetry.context.Scope;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteHolder; import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRoute;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteSource; import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRouteSource;
import io.opentelemetry.javaagent.bootstrap.Java8BytecodeBridge; import io.opentelemetry.javaagent.bootstrap.Java8BytecodeBridge;
import io.opentelemetry.javaagent.instrumentation.jaxrs.JaxrsConstants; import io.opentelemetry.javaagent.instrumentation.jaxrs.JaxrsConstants;
import io.opentelemetry.javaagent.instrumentation.jaxrs.JaxrsServerSpanNaming; import io.opentelemetry.javaagent.instrumentation.jaxrs.JaxrsServerSpanNaming;
@ -64,9 +64,9 @@ public class DefaultRequestContextInstrumentation extends AbstractRequestContext
Context parentContext = Java8BytecodeBridge.currentContext(); Context parentContext = Java8BytecodeBridge.currentContext();
handlerData = new Jaxrs3HandlerData(filterClass, method); handlerData = new Jaxrs3HandlerData(filterClass, method);
HttpRouteHolder.updateHttpRoute( HttpServerRoute.update(
parentContext, parentContext,
HttpRouteSource.CONTROLLER, HttpServerRouteSource.CONTROLLER,
JaxrsServerSpanNaming.SERVER_SPAN_NAME, JaxrsServerSpanNaming.SERVER_SPAN_NAME,
handlerData); handlerData);

View File

@ -18,8 +18,8 @@ import static net.bytebuddy.matcher.ElementMatchers.not;
import io.opentelemetry.context.Context; import io.opentelemetry.context.Context;
import io.opentelemetry.context.Scope; import io.opentelemetry.context.Scope;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteHolder; import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRoute;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteSource; import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRouteSource;
import io.opentelemetry.instrumentation.api.util.VirtualField; import io.opentelemetry.instrumentation.api.util.VirtualField;
import io.opentelemetry.javaagent.bootstrap.CallDepth; import io.opentelemetry.javaagent.bootstrap.CallDepth;
import io.opentelemetry.javaagent.bootstrap.Java8BytecodeBridge; import io.opentelemetry.javaagent.bootstrap.Java8BytecodeBridge;
@ -105,9 +105,9 @@ public class JaxrsAnnotationsInstrumentation implements TypeInstrumentation {
Context parentContext = Java8BytecodeBridge.currentContext(); Context parentContext = Java8BytecodeBridge.currentContext();
handlerData = new Jaxrs3HandlerData(target.getClass(), method); handlerData = new Jaxrs3HandlerData(target.getClass(), method);
HttpRouteHolder.updateHttpRoute( HttpServerRoute.update(
parentContext, parentContext,
HttpRouteSource.CONTROLLER, HttpServerRouteSource.CONTROLLER,
JaxrsServerSpanNaming.SERVER_SPAN_NAME, JaxrsServerSpanNaming.SERVER_SPAN_NAME,
handlerData); 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 static io.opentelemetry.javaagent.instrumentation.jaxrs.JaxrsPathUtil.normalizePath;
import io.opentelemetry.context.Context; import io.opentelemetry.context.Context;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteGetter; import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRoute;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteHolder; import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRouteGetter;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteSource; import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRouteSource;
import io.opentelemetry.javaagent.bootstrap.jaxrs.JaxrsContextPath; import io.opentelemetry.javaagent.bootstrap.jaxrs.JaxrsContextPath;
import io.opentelemetry.javaagent.bootstrap.servlet.ServletContextPath; import io.opentelemetry.javaagent.bootstrap.servlet.ServletContextPath;
import jakarta.ws.rs.core.Request; 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.ContainerRequest;
import org.glassfish.jersey.server.ExtendedUriInfo; 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 static final JerseySpanName INSTANCE = new JerseySpanName();
public void updateServerSpanName(Request request) { public void updateServerSpanName(Request request) {
Context context = Context.current(); Context context = Context.current();
HttpRouteHolder.updateHttpRoute(context, HttpRouteSource.NESTED_CONTROLLER, this, request); HttpServerRoute.update(context, HttpServerRouteSource.NESTED_CONTROLLER, this, request);
} }
@Override @Override

View File

@ -5,22 +5,21 @@
package io.opentelemetry.javaagent.instrumentation.jaxrs.v3_0; 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.context.Context;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteGetter; import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRoute;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteHolder; 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.jaxrs.JaxrsContextPath;
import io.opentelemetry.javaagent.bootstrap.servlet.ServletContextPath; import io.opentelemetry.javaagent.bootstrap.servlet.ServletContextPath;
import javax.annotation.Nullable; 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 static final ResteasySpanName INSTANCE = new ResteasySpanName();
public void updateServerSpanName(Context context, String name) { public void updateServerSpanName(Context context, String name) {
if (name != null) { 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; 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.jaxrs.JaxrsContextPath;
import io.opentelemetry.javaagent.bootstrap.servlet.ServletContextPath; import io.opentelemetry.javaagent.bootstrap.servlet.ServletContextPath;
public class JaxrsServerSpanNaming { public class JaxrsServerSpanNaming {
public static final HttpRouteGetter<HandlerData> SERVER_SPAN_NAME = public static final HttpServerRouteGetter<HandlerData> SERVER_SPAN_NAME =
(context, handlerData) -> { (context, handlerData) -> {
String pathBasedSpanName = handlerData.getServerSpanName(); String pathBasedSpanName = handlerData.getServerSpanName();
// If path based name is empty skip prepending context path so that path based name would // 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.context.Context;
import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter; import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter;
import io.opentelemetry.instrumentation.api.instrumenter.LocalRootSpan; 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.instrumentation.api.instrumenter.http.HttpRouteSource; import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRouteSource;
import io.opentelemetry.javaagent.bootstrap.Java8BytecodeBridge; import io.opentelemetry.javaagent.bootstrap.Java8BytecodeBridge;
public final class RequestContextHelper { public final class RequestContextHelper {
@ -21,9 +21,9 @@ public final class RequestContextHelper {
Span serverSpan = LocalRootSpan.fromContextOrNull(parentContext); Span serverSpan = LocalRootSpan.fromContextOrNull(parentContext);
Span currentSpan = Java8BytecodeBridge.spanFromContext(parentContext); Span currentSpan = Java8BytecodeBridge.spanFromContext(parentContext);
HttpRouteHolder.updateHttpRoute( HttpServerRoute.update(
parentContext, parentContext,
HttpRouteSource.CONTROLLER, HttpServerRouteSource.CONTROLLER,
JaxrsServerSpanNaming.SERVER_SPAN_NAME, JaxrsServerSpanNaming.SERVER_SPAN_NAME,
handlerData); 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.Instrumenter
import io.opentelemetry.instrumentation.api.instrumenter.SpanKindExtractor import io.opentelemetry.instrumentation.api.instrumenter.SpanKindExtractor
import io.opentelemetry.instrumentation.api.instrumenter.SpanStatusExtractor 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.HttpServerAttributesExtractor
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerMetrics 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.HttpSpanNameExtractor
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanStatusExtractor import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanStatusExtractor
import io.opentelemetry.instrumentation.api.internal.InstrumenterUtil import io.opentelemetry.instrumentation.api.internal.InstrumenterUtil
@ -121,7 +121,7 @@ class KtorServerTracing private constructor(
setSpanStatusExtractor(configuration.statusExtractor(HttpSpanStatusExtractor.create(httpAttributesGetter))) setSpanStatusExtractor(configuration.statusExtractor(HttpSpanStatusExtractor.create(httpAttributesGetter)))
addAttributesExtractor(configuration.httpAttributesExtractorBuilder.build()) addAttributesExtractor(configuration.httpAttributesExtractorBuilder.build())
addOperationMetrics(HttpServerMetrics.get()) addOperationMetrics(HttpServerMetrics.get())
addContextCustomizer(HttpRouteHolder.create(httpAttributesGetter)) addContextCustomizer(HttpServerRoute.create(httpAttributesGetter))
} }
val instrumenter = InstrumenterUtil.buildUpstreamInstrumenter( val instrumenter = InstrumenterUtil.buildUpstreamInstrumenter(
@ -175,7 +175,7 @@ class KtorServerTracing private constructor(
pipeline.environment.monitor.subscribe(Routing.RoutingCallStarted) { call -> pipeline.environment.monitor.subscribe(Routing.RoutingCallStarted) { call ->
val context = call.attributes.getOrNull(contextKey) val context = call.attributes.getOrNull(contextKey)
if (context != null) { 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.Instrumenter
import io.opentelemetry.instrumentation.api.instrumenter.SpanKindExtractor import io.opentelemetry.instrumentation.api.instrumenter.SpanKindExtractor
import io.opentelemetry.instrumentation.api.instrumenter.SpanStatusExtractor 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.HttpServerAttributesExtractor
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerMetrics 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.HttpSpanNameExtractor
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanStatusExtractor import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanStatusExtractor
import io.opentelemetry.instrumentation.api.internal.InstrumenterUtil import io.opentelemetry.instrumentation.api.internal.InstrumenterUtil
@ -121,7 +121,7 @@ class KtorServerTracing private constructor(
setSpanStatusExtractor(configuration.statusExtractor(HttpSpanStatusExtractor.create(httpAttributesGetter))) setSpanStatusExtractor(configuration.statusExtractor(HttpSpanStatusExtractor.create(httpAttributesGetter)))
addAttributesExtractor(configuration.httpAttributesExtractorBuilder.build()) addAttributesExtractor(configuration.httpAttributesExtractorBuilder.build())
addOperationMetrics(HttpServerMetrics.get()) addOperationMetrics(HttpServerMetrics.get())
addContextCustomizer(HttpRouteHolder.create(httpAttributesGetter)) addContextCustomizer(HttpServerRoute.create(httpAttributesGetter))
} }
val instrumenter = InstrumenterUtil.buildUpstreamInstrumenter( val instrumenter = InstrumenterUtil.buildUpstreamInstrumenter(
@ -173,7 +173,7 @@ class KtorServerTracing private constructor(
} }
pipeline.environment.monitor.subscribe(Routing.RoutingCallStarted) { call -> 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 return feature

View File

@ -7,9 +7,9 @@ package io.opentelemetry.javaagent.instrumentation.liberty.dispatcher;
import io.opentelemetry.api.GlobalOpenTelemetry; import io.opentelemetry.api.GlobalOpenTelemetry;
import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter; 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.HttpServerAttributesExtractor;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerMetrics; 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.HttpSpanNameExtractor;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanStatusExtractor; import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanStatusExtractor;
import io.opentelemetry.javaagent.bootstrap.internal.CommonConfig; import io.opentelemetry.javaagent.bootstrap.internal.CommonConfig;
@ -35,7 +35,7 @@ public final class LibertyDispatcherSingletons {
.setCapturedResponseHeaders(CommonConfig.get().getServerResponseHeaders()) .setCapturedResponseHeaders(CommonConfig.get().getServerResponseHeaders())
.setKnownMethods(CommonConfig.get().getKnownHttpRequestMethods()) .setKnownMethods(CommonConfig.get().getKnownHttpRequestMethods())
.build()) .build())
.addContextCustomizer(HttpRouteHolder.create(httpAttributesGetter)) .addContextCustomizer(HttpServerRoute.create(httpAttributesGetter))
.addOperationMetrics(HttpServerMetrics.get()) .addOperationMetrics(HttpServerMetrics.get())
.buildServerInstrumenter(LibertyDispatcherRequestGetter.INSTANCE); .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.api.GlobalOpenTelemetry;
import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter; 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.HttpServerAttributesExtractor;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerMetrics; 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.HttpSpanNameExtractor;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanStatusExtractor; import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanStatusExtractor;
import io.opentelemetry.instrumentation.netty.common.internal.NettyErrorHolder; import io.opentelemetry.instrumentation.netty.common.internal.NettyErrorHolder;
@ -40,7 +40,7 @@ final class NettyServerSingletons {
.addOperationMetrics(HttpServerMetrics.get()) .addOperationMetrics(HttpServerMetrics.get())
.addContextCustomizer( .addContextCustomizer(
(context, requestAndChannel, startAttributes) -> NettyErrorHolder.init(context)) (context, requestAndChannel, startAttributes) -> NettyErrorHolder.init(context))
.addContextCustomizer(HttpRouteHolder.create(httpServerAttributesGetter)) .addContextCustomizer(HttpServerRoute.create(httpServerAttributesGetter))
.buildServerInstrumenter(NettyHeadersGetter.INSTANCE); .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.netty.handler.codec.http.HttpResponse;
import io.opentelemetry.api.OpenTelemetry; import io.opentelemetry.api.OpenTelemetry;
import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter; 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.HttpServerAttributesExtractor;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerAttributesExtractorBuilder; import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerAttributesExtractorBuilder;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerMetrics; 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.HttpSpanNameExtractor;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanStatusExtractor; import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanStatusExtractor;
import io.opentelemetry.instrumentation.netty.common.internal.NettyErrorHolder; import io.opentelemetry.instrumentation.netty.common.internal.NettyErrorHolder;
@ -42,7 +42,7 @@ public final class NettyServerInstrumenterFactory {
.addAttributesExtractor(extractorBuilder.build()) .addAttributesExtractor(extractorBuilder.build())
.addOperationMetrics(HttpServerMetrics.get()) .addOperationMetrics(HttpServerMetrics.get())
.addContextCustomizer((context, request, attributes) -> NettyErrorHolder.init(context)) .addContextCustomizer((context, request, attributes) -> NettyErrorHolder.init(context))
.addContextCustomizer(HttpRouteHolder.create(httpAttributesGetter)) .addContextCustomizer(HttpServerRoute.create(httpAttributesGetter))
.buildServerInstrumenter(HttpRequestHeadersGetter.INSTANCE); .buildServerInstrumenter(HttpRequestHeadersGetter.INSTANCE);
} }

View File

@ -11,7 +11,7 @@ import io.opentelemetry.api.GlobalOpenTelemetry;
import io.opentelemetry.context.Context; import io.opentelemetry.context.Context;
import io.opentelemetry.context.Scope; import io.opentelemetry.context.Scope;
import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter; 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.api.instrumenter.net.PeerServiceAttributesExtractor;
import io.opentelemetry.instrumentation.okhttp.v3_0.internal.ConnectionErrorSpanInterceptor; import io.opentelemetry.instrumentation.okhttp.v3_0.internal.ConnectionErrorSpanInterceptor;
import io.opentelemetry.instrumentation.okhttp.v3_0.internal.OkHttpAttributesGetter; import io.opentelemetry.instrumentation.okhttp.v3_0.internal.OkHttpAttributesGetter;
@ -40,7 +40,7 @@ public final class OkHttp3Singletons {
public static final Interceptor CONTEXT_INTERCEPTOR = public static final Interceptor CONTEXT_INTERCEPTOR =
chain -> { chain -> {
try (Scope ignored = HttpClientResend.initialize(Context.current()).makeCurrent()) { try (Scope ignored = HttpClientResendCount.initialize(Context.current()).makeCurrent()) {
return chain.proceed(chain.request()); 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.Context;
import io.opentelemetry.context.Scope; 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 java.io.IOException;
import okhttp3.Interceptor; import okhttp3.Interceptor;
import okhttp3.Request; import okhttp3.Request;
@ -23,7 +23,7 @@ final class ContextInterceptor implements Interceptor {
parentContext = Context.current(); parentContext = Context.current();
} }
// include the resend counter // include the resend counter
Context context = HttpClientResend.initialize(parentContext); Context context = HttpClientResendCount.initialize(parentContext);
try (Scope ignored = context.makeCurrent()) { try (Scope ignored = context.makeCurrent()) {
return chain.proceed(request); 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.context.Context;
import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter; 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 io.opentelemetry.instrumentation.api.internal.InstrumenterUtil;
import java.io.IOException; import java.io.IOException;
import java.time.Instant; import java.time.Instant;
@ -42,7 +42,7 @@ public final class ConnectionErrorSpanInterceptor implements Interceptor {
throw t; throw t;
} finally { } finally {
// only create a span when there wasn't any HTTP request // 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)) { if (instrumenter.shouldStart(parentContext, request)) {
InstrumenterUtil.startAndEnd( InstrumenterUtil.startAndEnd(
instrumenter, parentContext, request, response, error, startTime, Instant.now()); 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.api.trace.SpanKind;
import io.opentelemetry.context.Context; import io.opentelemetry.context.Context;
import io.opentelemetry.instrumentation.api.instrumenter.LocalRootSpan; 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.instrumentation.api.instrumenter.http.HttpRouteSource; import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRouteSource;
import io.opentelemetry.instrumentation.api.internal.SpanKey; import io.opentelemetry.instrumentation.api.internal.SpanKey;
import io.opentelemetry.instrumentation.testing.junit.AgentInstrumentationExtension; import io.opentelemetry.instrumentation.testing.junit.AgentInstrumentationExtension;
import io.opentelemetry.instrumentation.testing.junit.InstrumentationExtension; import io.opentelemetry.instrumentation.testing.junit.InstrumentationExtension;
@ -80,8 +80,8 @@ class ContextBridgeTest {
AgentSpanTesting.runWithHttpServerSpan( AgentSpanTesting.runWithHttpServerSpan(
"server", "server",
() -> () ->
HttpRouteHolder.updateHttpRoute( HttpServerRoute.update(
Context.current(), HttpRouteSource.SERVLET, "/test/controller/:id")); Context.current(), HttpServerRouteSource.SERVER, "/test/controller/:id"));
testing.waitAndAssertTraces( testing.waitAndAssertTraces(
trace -> trace ->
@ -100,8 +100,8 @@ class ContextBridgeTest {
AgentSpanTesting.runWithHttpServerSpan( AgentSpanTesting.runWithHttpServerSpan(
"server", "server",
() -> () ->
HttpRouteHolder.updateHttpRoute( HttpServerRoute.update(
Context.current(), HttpRouteSource.CONTROLLER, "/test/controller/:id")); Context.current(), HttpServerRouteSource.CONTROLLER, "/test/controller/:id"));
testing.waitAndAssertTraces( testing.waitAndAssertTraces(
trace -> trace ->

View File

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

View File

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

View File

@ -5,7 +5,6 @@
package io.opentelemetry.javaagent.instrumentation.quarkus.resteasy.reactive; package io.opentelemetry.javaagent.instrumentation.quarkus.resteasy.reactive;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteSource;
import org.jboss.resteasy.reactive.server.core.ResteasyReactiveRequestContext; import org.jboss.resteasy.reactive.server.core.ResteasyReactiveRequestContext;
public final class OtelRequestContext { public final class OtelRequestContext {
@ -15,8 +14,7 @@ public final class OtelRequestContext {
public static OtelRequestContext start(ResteasyReactiveRequestContext requestContext) { public static OtelRequestContext start(ResteasyReactiveRequestContext requestContext) {
OtelRequestContext context = new OtelRequestContext(); OtelRequestContext context = new OtelRequestContext();
contextThreadLocal.set(context); contextThreadLocal.set(context);
ResteasyReactiveSpanName.INSTANCE.updateServerSpanName( ResteasyReactiveSpanName.INSTANCE.updateServerSpanName(requestContext);
requestContext, HttpRouteSource.NESTED_CONTROLLER);
return context; return context;
} }
@ -31,8 +29,7 @@ public final class OtelRequestContext {
context.firstInvoke = false; context.firstInvoke = false;
return; return;
} }
ResteasyReactiveSpanName.INSTANCE.updateServerSpanName( ResteasyReactiveSpanName.INSTANCE.updateServerSpanName(requestContext);
requestContext, HttpRouteSource.NESTED_CONTROLLER);
} }
public void close() { 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 static io.opentelemetry.javaagent.instrumentation.jaxrs.JaxrsPathUtil.normalizePath;
import io.opentelemetry.context.Context; 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.HttpRouteSource; import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRouteSource;
import io.opentelemetry.instrumentation.api.util.VirtualField; import io.opentelemetry.instrumentation.api.util.VirtualField;
import org.jboss.resteasy.reactive.server.core.ResteasyReactiveRequestContext; import org.jboss.resteasy.reactive.server.core.ResteasyReactiveRequestContext;
import org.jboss.resteasy.reactive.server.mapping.RuntimeResource; import org.jboss.resteasy.reactive.server.mapping.RuntimeResource;
@ -22,10 +22,10 @@ final class ResteasyReactiveSpanName {
public static final ResteasyReactiveSpanName INSTANCE = new ResteasyReactiveSpanName(); public static final ResteasyReactiveSpanName INSTANCE = new ResteasyReactiveSpanName();
void updateServerSpanName(ResteasyReactiveRequestContext requestContext, HttpRouteSource source) { void updateServerSpanName(ResteasyReactiveRequestContext requestContext) {
Context context = Context.current(); Context context = Context.current();
String jaxRsName = calculateJaxRsName(requestContext); String jaxRsName = calculateJaxRsName(requestContext);
HttpRouteHolder.updateHttpRoute(context, source, jaxRsName); HttpServerRoute.update(context, HttpServerRouteSource.NESTED_CONTROLLER, jaxRsName);
pathField.set(requestContext, 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.api.trace.StatusCode;
import io.opentelemetry.instrumentation.api.instrumenter.ErrorCauseExtractor; import io.opentelemetry.instrumentation.api.instrumenter.ErrorCauseExtractor;
import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter; import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteHolder; import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRoute;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteSource; import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRouteSource;
import ratpack.handling.Context; import ratpack.handling.Context;
public final class RatpackSingletons { 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 // update the netty server span name; FILTER is probably the best match for ratpack Handlers
HttpRouteHolder.updateHttpRoute( HttpServerRoute.update(
otelContext, HttpRouteSource.FILTER, (context, name) -> name, matchedRoute); otelContext, HttpServerRouteSource.SERVER_FILTER, (context, name) -> name, matchedRoute);
return matchedRoute; return matchedRoute;
} }

View File

@ -5,11 +5,11 @@
package io.opentelemetry.instrumentation.ratpack.v1_7; 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.context.Scope;
import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter; 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.error.ServerErrorHandler;
import ratpack.handling.Context; import ratpack.handling.Context;
import ratpack.handling.Handler; import ratpack.handling.Handler;
@ -39,7 +39,7 @@ public final class OpenTelemetryServerHandler implements Handler {
context.onClose( context.onClose(
outcome -> { outcome -> {
// Route not available in beginning of request so handle it manually here. // Route not available in beginning of request so handle it manually here.
HttpRouteHolder.updateHttpRoute( HttpServerRoute.update(
otelCtx, CONTROLLER, OpenTelemetryServerHandler::getRoute, context); otelCtx, CONTROLLER, OpenTelemetryServerHandler::getRoute, context);
Throwable error = 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.Instrumenter;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpClientAttributesExtractor; import io.opentelemetry.instrumentation.api.instrumenter.http.HttpClientAttributesExtractor;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpClientAttributesExtractorBuilder; 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.HttpServerAttributesExtractor;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerAttributesExtractorBuilder; import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerAttributesExtractorBuilder;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerMetrics; 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.HttpSpanNameExtractor;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanStatusExtractor; import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanStatusExtractor;
import java.util.ArrayList; import java.util.ArrayList;
@ -142,7 +142,7 @@ public final class RatpackTelemetryBuilder {
.addAttributesExtractor(httpServerAttributesExtractorBuilder.build()) .addAttributesExtractor(httpServerAttributesExtractorBuilder.build())
.addAttributesExtractors(additionalExtractors) .addAttributesExtractors(additionalExtractors)
.addOperationMetrics(HttpServerMetrics.get()) .addOperationMetrics(HttpServerMetrics.get())
.addContextCustomizer(HttpRouteHolder.create(httpAttributes)) .addContextCustomizer(HttpServerRoute.create(httpAttributes))
.buildServerInstrumenter(RatpackGetter.INSTANCE); .buildServerInstrumenter(RatpackGetter.INSTANCE);
return new RatpackTelemetry(instrumenter, httpClientInstrumenter()); 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 static io.opentelemetry.javaagent.instrumentation.reactornetty.v1_0.ReactorContextKeys.CONTEXTS_HOLDER_KEY;
import io.opentelemetry.context.Context; 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 io.opentelemetry.instrumentation.netty.v4_1.NettyClientTelemetry;
import java.util.function.BiConsumer; import java.util.function.BiConsumer;
import java.util.function.Function; import java.util.function.Function;
@ -118,7 +118,7 @@ public final class HttpResponseReceiverInstrumenter {
public void accept(HttpClientRequest request, Throwable error) { public void accept(HttpClientRequest request, Throwable error) {
instrumentationContexts.endClientSpan(null, 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 // request is an instance of FailedHttpClientRequest, which does not implement a correct
// resourceUrl() method -- we have to work around that // resourceUrl() method -- we have to work around that
request = FailedRequestWithUrlMaker.create(config, request); 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 static io.opentelemetry.javaagent.instrumentation.reactornetty.v1_0.ReactorNettySingletons.instrumenter;
import io.opentelemetry.context.Context; 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.InstrumenterUtil;
import io.opentelemetry.instrumentation.api.internal.Timer; import io.opentelemetry.instrumentation.api.internal.Timer;
import java.util.Queue; import java.util.Queue;
@ -27,7 +27,7 @@ final class InstrumentationContexts {
private final Queue<RequestAndContext> clientContexts = new LinkedBlockingQueue<>(); private final Queue<RequestAndContext> clientContexts = new LinkedBlockingQueue<>();
void initialize(Context parentContext) { void initialize(Context parentContext) {
this.parentContext = HttpClientResend.initialize(parentContext); this.parentContext = HttpClientResendCount.initialize(parentContext);
timer = Timer.start(); 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.api.GlobalOpenTelemetry;
import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter; 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.instrumentation.restlet.v1_1.RestletTelemetry;
import io.opentelemetry.javaagent.bootstrap.internal.CommonConfig; import io.opentelemetry.javaagent.bootstrap.internal.CommonConfig;
import io.opentelemetry.javaagent.bootstrap.servlet.ServletContextPath; import io.opentelemetry.javaagent.bootstrap.servlet.ServletContextPath;
@ -28,7 +28,7 @@ public final class RestletSingletons {
return INSTRUMENTER; return INSTRUMENTER;
} }
public static HttpRouteGetter<String> serverSpanName() { public static HttpServerRouteGetter<String> serverSpanName() {
return ServletContextPath::prepend; return ServletContextPath::prepend;
} }

View File

@ -5,14 +5,14 @@
package io.opentelemetry.javaagent.instrumentation.restlet.v1_1; 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.bootstrap.Java8BytecodeBridge.currentContext;
import static io.opentelemetry.javaagent.instrumentation.restlet.v1_1.RestletSingletons.serverSpanName; import static io.opentelemetry.javaagent.instrumentation.restlet.v1_1.RestletSingletons.serverSpanName;
import static net.bytebuddy.matcher.ElementMatchers.isMethod; import static net.bytebuddy.matcher.ElementMatchers.isMethod;
import static net.bytebuddy.matcher.ElementMatchers.named; import static net.bytebuddy.matcher.ElementMatchers.named;
import static net.bytebuddy.matcher.ElementMatchers.takesArgument; 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.TypeInstrumentation;
import io.opentelemetry.javaagent.extension.instrumentation.TypeTransformer; import io.opentelemetry.javaagent.extension.instrumentation.TypeTransformer;
import net.bytebuddy.asm.Advice; 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) { public static void getRouteInfo(@Advice.This Route route, @Advice.Argument(0) Request request) {
String pattern = route.getTemplate().getPattern(); 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; 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.bootstrap.Java8BytecodeBridge.currentContext;
import static io.opentelemetry.javaagent.instrumentation.restlet.v1_1.RestletSingletons.instrumenter; import static io.opentelemetry.javaagent.instrumentation.restlet.v1_1.RestletSingletons.instrumenter;
import static io.opentelemetry.javaagent.instrumentation.restlet.v1_1.RestletSingletons.serverSpanName; 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.Context;
import io.opentelemetry.context.Scope; 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.bootstrap.http.HttpServerResponseCustomizerHolder;
import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation; import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation;
import io.opentelemetry.javaagent.extension.instrumentation.TypeTransformer; import io.opentelemetry.javaagent.extension.instrumentation.TypeTransformer;
@ -77,7 +77,7 @@ public class ServerInstrumentation implements TypeInstrumentation {
scope.close(); scope.close();
if (Status.CLIENT_ERROR_NOT_FOUND.equals(response.getStatus())) { if (Status.CLIENT_ERROR_NOT_FOUND.equals(response.getStatus())) {
HttpRouteHolder.updateHttpRoute(context, CONTROLLER, serverSpanName(), "/*"); HttpServerRoute.update(context, CONTROLLER, serverSpanName(), "/*");
} }
HttpServerResponseCustomizerHolder.getCustomizer() HttpServerResponseCustomizerHolder.getCustomizer()

View File

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

View File

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

View File

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

View File

@ -5,7 +5,7 @@
package io.opentelemetry.javaagent.instrumentation.restlet.v2_0; 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.bootstrap.Java8BytecodeBridge.currentContext;
import static io.opentelemetry.javaagent.instrumentation.restlet.v2_0.RestletSingletons.serverSpanName; import static io.opentelemetry.javaagent.instrumentation.restlet.v2_0.RestletSingletons.serverSpanName;
import static net.bytebuddy.matcher.ElementMatchers.isMethod; 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.namedOneOf;
import static net.bytebuddy.matcher.ElementMatchers.takesArgument; 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.TypeInstrumentation;
import io.opentelemetry.javaagent.extension.instrumentation.TypeTransformer; import io.opentelemetry.javaagent.extension.instrumentation.TypeTransformer;
import net.bytebuddy.asm.Advice; import net.bytebuddy.asm.Advice;
@ -46,7 +46,7 @@ public class RouteInstrumentation implements TypeInstrumentation {
@Advice.This TemplateRoute route, @Advice.Argument(0) Request request) { @Advice.This TemplateRoute route, @Advice.Argument(0) Request request) {
String pattern = route.getTemplate().getPattern(); 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; 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.bootstrap.Java8BytecodeBridge.currentContext;
import static io.opentelemetry.javaagent.instrumentation.restlet.v2_0.RestletSingletons.instrumenter; import static io.opentelemetry.javaagent.instrumentation.restlet.v2_0.RestletSingletons.instrumenter;
import static io.opentelemetry.javaagent.instrumentation.restlet.v2_0.RestletSingletons.serverSpanName; 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.Context;
import io.opentelemetry.context.Scope; 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.bootstrap.http.HttpServerResponseCustomizerHolder;
import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation; import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation;
import io.opentelemetry.javaagent.extension.instrumentation.TypeTransformer; import io.opentelemetry.javaagent.extension.instrumentation.TypeTransformer;
@ -77,7 +77,7 @@ public class ServerInstrumentation implements TypeInstrumentation {
scope.close(); scope.close();
if (Status.CLIENT_ERROR_NOT_FOUND.equals(response.getStatus())) { if (Status.CLIENT_ERROR_NOT_FOUND.equals(response.getStatus())) {
HttpRouteHolder.updateHttpRoute(context, CONTROLLER, serverSpanName(), "/*"); HttpServerRoute.update(context, CONTROLLER, serverSpanName(), "/*");
} }
HttpServerResponseCustomizerHolder.getCustomizer() HttpServerResponseCustomizerHolder.getCustomizer()

View File

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

View File

@ -8,8 +8,8 @@ package io.opentelemetry.instrumentation.restlet.v2_0.internal;
import io.opentelemetry.api.OpenTelemetry; import io.opentelemetry.api.OpenTelemetry;
import io.opentelemetry.instrumentation.api.instrumenter.AttributesExtractor; import io.opentelemetry.instrumentation.api.instrumenter.AttributesExtractor;
import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter; 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.HttpServerMetrics;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRoute;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanNameExtractor; import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanNameExtractor;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanStatusExtractor; import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanStatusExtractor;
import java.util.List; import java.util.List;
@ -37,7 +37,7 @@ public final class RestletInstrumenterFactory {
.addAttributesExtractor(httpServerAttributesExtractor) .addAttributesExtractor(httpServerAttributesExtractor)
.addAttributesExtractors(additionalExtractors) .addAttributesExtractors(additionalExtractors)
.addOperationMetrics(HttpServerMetrics.get()) .addOperationMetrics(HttpServerMetrics.get())
.addContextCustomizer(HttpRouteHolder.create(httpAttributesGetter)) .addContextCustomizer(HttpServerRoute.create(httpAttributesGetter))
.buildServerInstrumenter(new RestletHeadersGetter()); .buildServerInstrumenter(new RestletHeadersGetter());
} }

View File

@ -5,15 +5,15 @@
package io.opentelemetry.javaagent.instrumentation.servlet; package io.opentelemetry.javaagent.instrumentation.servlet;
import static io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteSource.FILTER; import static io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRouteSource.SERVER;
import static io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteSource.SERVLET; import static io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRouteSource.SERVER_FILTER;
import io.opentelemetry.api.trace.Span; import io.opentelemetry.api.trace.Span;
import io.opentelemetry.api.trace.SpanContext; import io.opentelemetry.api.trace.SpanContext;
import io.opentelemetry.context.Context; import io.opentelemetry.context.Context;
import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter; import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter;
import io.opentelemetry.instrumentation.api.instrumenter.LocalRootSpan; 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.AppServerBridge;
import io.opentelemetry.javaagent.bootstrap.servlet.MappingResolver; import io.opentelemetry.javaagent.bootstrap.servlet.MappingResolver;
import io.opentelemetry.javaagent.bootstrap.servlet.ServletContextPath; 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 context, REQUEST request, MappingResolver mappingResolver, boolean servlet) {
Context result = addServletContextPath(context, request); Context result = addServletContextPath(context, request);
if (mappingResolver != null) { if (mappingResolver != null) {
HttpRouteHolder.updateHttpRoute( HttpServerRoute.update(
result, servlet ? SERVLET : FILTER, spanNameProvider, mappingResolver, request); result, servlet ? SERVER : SERVER_FILTER, spanNameProvider, mappingResolver, request);
} }
return result; 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.Instrumenter;
import io.opentelemetry.instrumentation.api.instrumenter.InstrumenterBuilder; import io.opentelemetry.instrumentation.api.instrumenter.InstrumenterBuilder;
import io.opentelemetry.instrumentation.api.instrumenter.SpanNameExtractor; 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.HttpServerAttributesExtractor;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerAttributesGetter; import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerAttributesGetter;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerMetrics; 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.HttpSpanNameExtractor;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanStatusExtractor; import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanStatusExtractor;
import io.opentelemetry.javaagent.bootstrap.internal.CommonConfig; import io.opentelemetry.javaagent.bootstrap.internal.CommonConfig;
@ -65,7 +65,7 @@ public final class ServletInstrumenterBuilder<REQUEST, RESPONSE> {
.build()) .build())
.addAttributesExtractor(additionalAttributesExtractor) .addAttributesExtractor(additionalAttributesExtractor)
.addOperationMetrics(HttpServerMetrics.get()) .addOperationMetrics(HttpServerMetrics.get())
.addContextCustomizer(HttpRouteHolder.create(httpAttributesGetter)); .addContextCustomizer(HttpServerRoute.create(httpAttributesGetter));
if (ServletRequestParametersExtractor.enabled()) { if (ServletRequestParametersExtractor.enabled()) {
AttributesExtractor<ServletRequestContext<REQUEST>, ServletResponseContext<RESPONSE>> AttributesExtractor<ServletRequestContext<REQUEST>, ServletResponseContext<RESPONSE>>
requestParametersExtractor = new ServletRequestParametersExtractor<>(accessor); requestParametersExtractor = new ServletRequestParametersExtractor<>(accessor);

View File

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

View File

@ -6,8 +6,8 @@
package io.opentelemetry.javaagent.instrumentation.sparkjava; package io.opentelemetry.javaagent.instrumentation.sparkjava;
import io.opentelemetry.context.Context; 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.HttpRouteSource; import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRouteSource;
import javax.annotation.Nullable; import javax.annotation.Nullable;
import spark.routematch.RouteMatch; import spark.routematch.RouteMatch;
@ -16,8 +16,8 @@ public final class SparkRouteUpdater {
public static void updateHttpRoute(@Nullable RouteMatch routeMatch) { public static void updateHttpRoute(@Nullable RouteMatch routeMatch) {
if (routeMatch != null) { if (routeMatch != null) {
Context context = Context.current(); Context context = Context.current();
HttpRouteHolder.updateHttpRoute( HttpServerRoute.update(
context, HttpRouteSource.CONTROLLER, (c, r) -> r.getMatchUri(), routeMatch); 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.Context;
import io.opentelemetry.context.Scope; import io.opentelemetry.context.Scope;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteHolder; import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRoute;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteSource; import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRouteSource;
import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation; import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation;
import io.opentelemetry.javaagent.extension.instrumentation.TypeTransformer; import io.opentelemetry.javaagent.extension.instrumentation.TypeTransformer;
import net.bytebuddy.asm.Advice; import net.bytebuddy.asm.Advice;
@ -69,8 +69,8 @@ public class HandlerAdapterInstrumentation implements TypeInstrumentation {
// using the last portion of the nested path. // using the last portion of the nested path.
// HttpRouteSource.NESTED_CONTROLLER has useFirst false, and it will make http.route updated // 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. // twice: 1st using the last portion of the nested path, 2nd time using the full nested path.
HttpRouteHolder.updateHttpRoute( HttpServerRoute.update(
parentContext, HttpRouteSource.NESTED_CONTROLLER, httpRouteGetter(), exchange); parentContext, HttpServerRouteSource.NESTED_CONTROLLER, httpRouteGetter(), exchange);
if (handler == null) { if (handler == null) {
return; return;

View File

@ -6,8 +6,8 @@
package io.opentelemetry.javaagent.instrumentation.spring.webflux.v5_0.server; package io.opentelemetry.javaagent.instrumentation.spring.webflux.v5_0.server;
import io.opentelemetry.context.Context; 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.HttpRouteSource; import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRouteSource;
import java.util.function.Consumer; import java.util.function.Consumer;
import java.util.regex.Pattern; import java.util.regex.Pattern;
import javax.annotation.Nullable; import javax.annotation.Nullable;
@ -29,7 +29,7 @@ public class RouteOnSuccess implements Consumer<HandlerFunction<?>> {
@Override @Override
public void accept(HandlerFunction<?> handler) { 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) { 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.api.GlobalOpenTelemetry;
import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter; import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter;
import io.opentelemetry.instrumentation.api.instrumenter.InstrumenterBuilder; 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.bootstrap.internal.ExperimentalConfig;
import io.opentelemetry.javaagent.instrumentation.spring.webflux.v5_0.SpringWebfluxConfig; import io.opentelemetry.javaagent.instrumentation.spring.webflux.v5_0.SpringWebfluxConfig;
import org.springframework.web.reactive.HandlerMapping; import org.springframework.web.reactive.HandlerMapping;
@ -39,7 +39,7 @@ public final class WebfluxSingletons {
return INSTRUMENTER; return INSTRUMENTER;
} }
public static HttpRouteGetter<ServerWebExchange> httpRouteGetter() { public static HttpServerRouteGetter<ServerWebExchange> httpRouteGetter() {
return (context, exchange) -> { return (context, exchange) -> {
Object bestPatternObj = exchange.getAttribute(HandlerMapping.BEST_MATCHING_PATTERN_ATTRIBUTE); Object bestPatternObj = exchange.getAttribute(HandlerMapping.BEST_MATCHING_PATTERN_ATTRIBUTE);
if (bestPatternObj == null) { 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.Instrumenter;
import io.opentelemetry.instrumentation.api.instrumenter.SpanNameExtractor; import io.opentelemetry.instrumentation.api.instrumenter.SpanNameExtractor;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpClientAttributesExtractorBuilder; 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.HttpServerAttributesExtractor;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerAttributesExtractorBuilder; import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerAttributesExtractorBuilder;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerMetrics; 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.HttpSpanNameExtractor;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanStatusExtractor; import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanStatusExtractor;
import io.opentelemetry.instrumentation.spring.webflux.v5_3.internal.ClientInstrumenterFactory; import io.opentelemetry.instrumentation.spring.webflux.v5_3.internal.ClientInstrumenterFactory;
@ -197,7 +197,7 @@ public final class SpringWebfluxTelemetryBuilder {
.setSpanStatusExtractor(HttpSpanStatusExtractor.create(serverAttributesGetter)) .setSpanStatusExtractor(HttpSpanStatusExtractor.create(serverAttributesGetter))
.addAttributesExtractor(httpServerAttributesExtractorBuilder.build()) .addAttributesExtractor(httpServerAttributesExtractorBuilder.build())
.addAttributesExtractors(serverAdditionalExtractors) .addAttributesExtractors(serverAdditionalExtractors)
.addContextCustomizer(HttpRouteHolder.create(serverAttributesGetter)) .addContextCustomizer(HttpServerRoute.create(serverAttributesGetter))
.addOperationMetrics(HttpServerMetrics.get()) .addOperationMetrics(HttpServerMetrics.get())
.buildServerInstrumenter(WebfluxTextMapGetter.INSTANCE); .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.Context;
import io.opentelemetry.context.Scope; import io.opentelemetry.context.Scope;
import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter; import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteHolder; import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRoute;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteSource; import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRouteSource;
import org.reactivestreams.Subscription; import org.reactivestreams.Subscription;
import org.springframework.core.Ordered; import org.springframework.core.Ordered;
import org.springframework.http.server.reactive.ServerHttpResponse; import org.springframework.http.server.reactive.ServerHttpResponse;
@ -131,10 +131,11 @@ final class TelemetryProducingWebFilter implements WebFilter, Ordered {
private void end(Context currentContext, Throwable t) { private void end(Context currentContext, Throwable t) {
// Update HTTP route now, because during instrumenter.start() // Update HTTP route now, because during instrumenter.start()
// the HTTP route isn't available from the exchange attributes, but is afterwards // the HTTP route isn't available from the exchange attributes, but is afterwards
HttpRouteHolder.updateHttpRoute( HttpServerRoute.update(
currentContext, currentContext,
HttpRouteSource.CONTROLLER, HttpServerRouteSource.CONTROLLER,
WebfluxServerHttpAttributesGetter.INSTANCE.getHttpRoute(exchange)); (context, exchange) -> WebfluxServerHttpAttributesGetter.INSTANCE.getHttpRoute(exchange),
exchange);
instrumenter.end(currentContext, exchange, exchange, t); instrumenter.end(currentContext, exchange, exchange, t);
} }
} }

View File

@ -5,7 +5,7 @@
package io.opentelemetry.javaagent.instrumentation.spring.webmvc.v3_1; 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.hasClassesNamed;
import static io.opentelemetry.javaagent.extension.matcher.AgentElementMatchers.implementsInterface; import static io.opentelemetry.javaagent.extension.matcher.AgentElementMatchers.implementsInterface;
import static io.opentelemetry.javaagent.instrumentation.spring.webmvc.v3_1.SpringWebMvcSingletons.handlerInstrumenter; 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.Context;
import io.opentelemetry.context.Scope; 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.bootstrap.Java8BytecodeBridge;
import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation; import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation;
import io.opentelemetry.javaagent.extension.instrumentation.TypeTransformer; 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 // Name the parent span based on the matching pattern
HttpRouteHolder.updateHttpRoute( HttpServerRoute.update(
parentContext, CONTROLLER, SpringWebMvcServerSpanNaming.SERVER_SPAN_NAME, request); parentContext, CONTROLLER, SpringWebMvcServerSpanNaming.SERVER_SPAN_NAME, request);
if (!handlerInstrumenter().shouldStart(parentContext, handler)) { if (!handlerInstrumenter().shouldStart(parentContext, handler)) {

View File

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

View File

@ -5,11 +5,11 @@
package org.springframework.web.servlet.v3_1; 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.context.Context;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteGetter; import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRoute;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteHolder; import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRouteGetter;
import io.opentelemetry.javaagent.instrumentation.spring.webmvc.v3_1.SpringWebMvcServerSpanNaming; import io.opentelemetry.javaagent.instrumentation.spring.webmvc.v3_1.SpringWebMvcServerSpanNaming;
import java.io.IOException; import java.io.IOException;
import java.lang.invoke.MethodHandle; 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 usesPathPatternsMh = getUsesPathPatternsMh();
private static final MethodHandle parseAndCacheMh = parseAndCacheMh(); private static final MethodHandle parseAndCacheMh = parseAndCacheMh();
private final HttpRouteGetter<HttpServletRequest> serverSpanName = private final HttpServerRouteGetter<HttpServletRequest> serverSpanName =
(context, request) -> { (context, request) -> {
Object previousValue = null; Object previousValue = null;
if (this.parseRequestPath && PATH_ATTRIBUTE != null) { if (this.parseRequestPath && PATH_ATTRIBUTE != null) {
@ -84,8 +84,7 @@ public class OpenTelemetryHandlerMappingFilter implements Filter, Ordered {
} finally { } finally {
if (handlerMappings != null) { if (handlerMappings != null) {
Context context = Context.current(); Context context = Context.current();
HttpRouteHolder.updateHttpRoute( HttpServerRoute.update(context, CONTROLLER, serverSpanName, (HttpServletRequest) request);
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.AttributesExtractor;
import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter; import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter;
import io.opentelemetry.instrumentation.api.instrumenter.SpanNameExtractor; 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.HttpServerAttributesExtractor;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerAttributesExtractorBuilder; import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerAttributesExtractorBuilder;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerMetrics; 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.HttpSpanNameExtractor;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanStatusExtractor; import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanStatusExtractor;
import java.util.ArrayList; import java.util.ArrayList;
@ -131,7 +131,7 @@ public final class SpringWebMvcTelemetryBuilder {
.addAttributesExtractor(httpAttributesExtractorBuilder.build()) .addAttributesExtractor(httpAttributesExtractorBuilder.build())
.addAttributesExtractors(additionalExtractors) .addAttributesExtractors(additionalExtractors)
.addOperationMetrics(HttpServerMetrics.get()) .addOperationMetrics(HttpServerMetrics.get())
.addContextCustomizer(HttpRouteHolder.create(httpAttributesGetter)) .addContextCustomizer(HttpServerRoute.create(httpAttributesGetter))
.buildServerInstrumenter(JavaxHttpServletRequestGetter.INSTANCE); .buildServerInstrumenter(JavaxHttpServletRequestGetter.INSTANCE);
return new SpringWebMvcTelemetry(instrumenter); return new SpringWebMvcTelemetry(instrumenter);

View File

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

View File

@ -5,7 +5,7 @@
package io.opentelemetry.javaagent.instrumentation.spring.webmvc.v6_0; 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.hasClassesNamed;
import static io.opentelemetry.javaagent.extension.matcher.AgentElementMatchers.implementsInterface; import static io.opentelemetry.javaagent.extension.matcher.AgentElementMatchers.implementsInterface;
import static io.opentelemetry.javaagent.instrumentation.spring.webmvc.v6_0.SpringWebMvcSingletons.handlerInstrumenter; 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.Context;
import io.opentelemetry.context.Scope; 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.bootstrap.Java8BytecodeBridge;
import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation; import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation;
import io.opentelemetry.javaagent.extension.instrumentation.TypeTransformer; 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 // Name the parent span based on the matching pattern
HttpRouteHolder.updateHttpRoute( HttpServerRoute.update(
parentContext, CONTROLLER, SpringWebMvcServerSpanNaming.SERVER_SPAN_NAME, request); parentContext, CONTROLLER, SpringWebMvcServerSpanNaming.SERVER_SPAN_NAME, request);
if (!handlerInstrumenter().shouldStart(parentContext, handler)) { if (!handlerInstrumenter().shouldStart(parentContext, handler)) {

View File

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

View File

@ -5,11 +5,11 @@
package org.springframework.web.servlet.v6_0; 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.context.Context;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteGetter; import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRoute;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteHolder; import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRouteGetter;
import io.opentelemetry.javaagent.instrumentation.spring.webmvc.v6_0.SpringWebMvcServerSpanNaming; import io.opentelemetry.javaagent.instrumentation.spring.webmvc.v6_0.SpringWebMvcServerSpanNaming;
import jakarta.servlet.Filter; import jakarta.servlet.Filter;
import jakarta.servlet.FilterChain; import jakarta.servlet.FilterChain;
@ -33,7 +33,7 @@ import org.springframework.web.util.ServletRequestPathUtils;
public class OpenTelemetryHandlerMappingFilter implements Filter, Ordered { public class OpenTelemetryHandlerMappingFilter implements Filter, Ordered {
private final HttpRouteGetter<HttpServletRequest> serverSpanName = private final HttpServerRouteGetter<HttpServletRequest> serverSpanName =
(context, request) -> { (context, request) -> {
RequestPath previousValue = null; RequestPath previousValue = null;
if (this.parseRequestPath) { if (this.parseRequestPath) {
@ -77,8 +77,7 @@ public class OpenTelemetryHandlerMappingFilter implements Filter, Ordered {
} finally { } finally {
if (handlerMappings != null) { if (handlerMappings != null) {
Context context = Context.current(); Context context = Context.current();
HttpRouteHolder.updateHttpRoute( HttpServerRoute.update(context, CONTROLLER, serverSpanName, (HttpServletRequest) request);
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.AttributesExtractor;
import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter; import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter;
import io.opentelemetry.instrumentation.api.instrumenter.SpanNameExtractor; 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.HttpServerAttributesExtractor;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerAttributesExtractorBuilder; import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerAttributesExtractorBuilder;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerMetrics; 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.HttpSpanNameExtractor;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanStatusExtractor; import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanStatusExtractor;
import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletRequest;
@ -131,7 +131,7 @@ public final class SpringWebMvcTelemetryBuilder {
.addAttributesExtractor(httpAttributesExtractorBuilder.build()) .addAttributesExtractor(httpAttributesExtractorBuilder.build())
.addAttributesExtractors(additionalExtractors) .addAttributesExtractors(additionalExtractors)
.addOperationMetrics(HttpServerMetrics.get()) .addOperationMetrics(HttpServerMetrics.get())
.addContextCustomizer(HttpRouteHolder.create(httpAttributesGetter)) .addContextCustomizer(HttpServerRoute.create(httpAttributesGetter))
.buildServerInstrumenter(JakartaHttpServletRequestGetter.INSTANCE); .buildServerInstrumenter(JakartaHttpServletRequestGetter.INSTANCE);
return new SpringWebMvcTelemetry(instrumenter); return new SpringWebMvcTelemetry(instrumenter);

View File

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

View File

@ -5,7 +5,7 @@
package io.opentelemetry.javaagent.instrumentation.struts2; 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.hasClassesNamed;
import static io.opentelemetry.javaagent.extension.matcher.AgentElementMatchers.implementsInterface; import static io.opentelemetry.javaagent.extension.matcher.AgentElementMatchers.implementsInterface;
import static io.opentelemetry.javaagent.instrumentation.struts2.StrutsSingletons.instrumenter; 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 com.opensymphony.xwork2.ActionInvocation;
import io.opentelemetry.context.Context; import io.opentelemetry.context.Context;
import io.opentelemetry.context.Scope; 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.bootstrap.Java8BytecodeBridge;
import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation; import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation;
import io.opentelemetry.javaagent.extension.instrumentation.TypeTransformer; import io.opentelemetry.javaagent.extension.instrumentation.TypeTransformer;
@ -53,7 +53,7 @@ public class ActionInvocationInstrumentation implements TypeInstrumentation {
@Advice.Local("otelScope") Scope scope) { @Advice.Local("otelScope") Scope scope) {
Context parentContext = Java8BytecodeBridge.currentContext(); Context parentContext = Java8BytecodeBridge.currentContext();
HttpRouteHolder.updateHttpRoute( HttpServerRoute.update(
parentContext, parentContext,
CONTROLLER, CONTROLLER,
StrutsServerSpanNaming.SERVER_SPAN_NAME, StrutsServerSpanNaming.SERVER_SPAN_NAME,

View File

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

View File

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

View File

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

View File

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

View File

@ -7,9 +7,9 @@ package io.opentelemetry.javaagent.instrumentation.undertow;
import io.opentelemetry.api.GlobalOpenTelemetry; import io.opentelemetry.api.GlobalOpenTelemetry;
import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter; 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.HttpServerAttributesExtractor;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerMetrics; 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.HttpSpanNameExtractor;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanStatusExtractor; import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanStatusExtractor;
import io.opentelemetry.javaagent.bootstrap.internal.CommonConfig; import io.opentelemetry.javaagent.bootstrap.internal.CommonConfig;
@ -37,7 +37,7 @@ public final class UndertowSingletons {
.setCapturedResponseHeaders(CommonConfig.get().getServerResponseHeaders()) .setCapturedResponseHeaders(CommonConfig.get().getServerResponseHeaders())
.setKnownMethods(CommonConfig.get().getKnownHttpRequestMethods()) .setKnownMethods(CommonConfig.get().getKnownHttpRequestMethods())
.build()) .build())
.addContextCustomizer(HttpRouteHolder.create(httpAttributesGetter)) .addContextCustomizer(HttpServerRoute.create(httpAttributesGetter))
.addContextCustomizer( .addContextCustomizer(
(context, request, attributes) -> { (context, request, attributes) -> {
// span is ended when counter reaches 0, we start from 2 which accounts for the // 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 com.vaadin.flow.router.Location;
import io.opentelemetry.context.Context; import io.opentelemetry.context.Context;
import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter; import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteHolder; import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRoute;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteSource; import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRouteSource;
import io.opentelemetry.javaagent.bootstrap.servlet.ServletContextPath; import io.opentelemetry.javaagent.bootstrap.servlet.ServletContextPath;
import javax.annotation.Nullable; import javax.annotation.Nullable;
@ -42,10 +42,10 @@ public class VaadinHelper {
Context context, VaadinServiceRequest request, Throwable throwable) { Context context, VaadinServiceRequest request, Throwable throwable) {
serviceInstrumenter.end(context, request, null, throwable); serviceInstrumenter.end(context, request, null, throwable);
HttpRouteHolder.updateHttpRoute( HttpServerRoute.update(
context, context,
HttpRouteSource.CONTROLLER, HttpServerRouteSource.CONTROLLER,
(c, req) -> getSpanNameForVaadinServiceContext(c, req), VaadinHelper::getSpanNameForVaadinServiceContext,
request); request);
} }
@ -107,9 +107,9 @@ public class VaadinHelper {
public void updateServerSpanName(Location location) { public void updateServerSpanName(Location location) {
Context context = Context.current(); Context context = Context.current();
HttpRouteHolder.updateHttpRoute( HttpServerRoute.update(
context, context,
HttpRouteSource.NESTED_CONTROLLER, HttpServerRouteSource.NESTED_CONTROLLER,
(c, loc) -> ServletContextPath.prepend(c, getSpanNameForLocation(loc)), (c, loc) -> ServletContextPath.prepend(c, getSpanNameForLocation(loc)),
location); location);
} }

View File

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

View File

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

View File

@ -5,14 +5,14 @@
package io.opentelemetry.javaagent.instrumentation.wicket; 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 io.opentelemetry.javaagent.bootstrap.servlet.ServletContextPath;
import org.apache.wicket.core.request.handler.IPageClassRequestHandler; import org.apache.wicket.core.request.handler.IPageClassRequestHandler;
import org.apache.wicket.request.cycle.RequestCycle; import org.apache.wicket.request.cycle.RequestCycle;
public final class WicketServerSpanNaming { public final class WicketServerSpanNaming {
public static final HttpRouteGetter<IPageClassRequestHandler> SERVER_SPAN_NAME = public static final HttpServerRouteGetter<IPageClassRequestHandler> SERVER_SPAN_NAME =
(context, handler) -> { (context, handler) -> {
// using class name as page name // using class name as page name
String pageName = handler.getPageClass().getName(); 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.AttributesExtractor;
import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter; import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter;
import io.opentelemetry.instrumentation.api.instrumenter.SpanKindExtractor; 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.HttpServerAttributesExtractor;
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerAttributesGetter; 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.instrumenter.http.HttpSpanNameExtractor;
import io.opentelemetry.instrumentation.api.internal.SpanKey; import io.opentelemetry.instrumentation.api.internal.SpanKey;
import io.opentelemetry.instrumentation.api.internal.SpanKeyProvider; import io.opentelemetry.instrumentation.api.internal.SpanKeyProvider;
@ -51,7 +51,7 @@ final class TestInstrumenters {
// cover both semconv and span-kind strategies // cover both semconv and span-kind strategies
.addAttributesExtractor(HttpServerAttributesExtractor.create(HttpServerGetter.INSTANCE)) .addAttributesExtractor(HttpServerAttributesExtractor.create(HttpServerGetter.INSTANCE))
.addAttributesExtractor(new SpanKeyAttributesExtractor(SpanKey.KIND_SERVER)) .addAttributesExtractor(new SpanKeyAttributesExtractor(SpanKey.KIND_SERVER))
.addContextCustomizer(HttpRouteHolder.create(HttpServerGetter.INSTANCE)) .addContextCustomizer(HttpServerRoute.create(HttpServerGetter.INSTANCE))
.buildInstrumenter(SpanKindExtractor.alwaysServer()); .buildInstrumenter(SpanKindExtractor.alwaysServer());
} }