Refactor and rename `HttpClientResend` and `HttpRouteHolder` (#9280)
Co-authored-by: Trask Stalnaker <trask.stalnaker@gmail.com>
This commit is contained in:
parent
2ebf4134f9
commit
d7a34f90ba
|
@ -35,7 +35,7 @@ public final class HttpClientAttributesExtractorBuilder<REQUEST, RESPONSE> {
|
|||
List<String> capturedRequestHeaders = emptyList();
|
||||
List<String> capturedResponseHeaders = emptyList();
|
||||
Set<String> knownMethods = HttpConstants.KNOWN_METHODS;
|
||||
ToIntFunction<Context> resendCountIncrementer = HttpClientResend::getAndIncrement;
|
||||
ToIntFunction<Context> resendCountIncrementer = HttpClientResendCount::getAndIncrement;
|
||||
|
||||
HttpClientAttributesExtractorBuilder(
|
||||
HttpClientAttributesGetter<REQUEST, RESPONSE> httpAttributesGetter,
|
||||
|
|
|
@ -11,12 +11,12 @@ import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter;
|
|||
import java.util.concurrent.atomic.AtomicIntegerFieldUpdater;
|
||||
|
||||
/** A helper that keeps track of the count of the HTTP request resend attempts. */
|
||||
public final class HttpClientResend {
|
||||
public final class HttpClientResendCount {
|
||||
|
||||
private static final ContextKey<HttpClientResend> KEY =
|
||||
private static final ContextKey<HttpClientResendCount> KEY =
|
||||
ContextKey.named("opentelemetry-http-client-resend-key");
|
||||
private static final AtomicIntegerFieldUpdater<HttpClientResend> resendsUpdater =
|
||||
AtomicIntegerFieldUpdater.newUpdater(HttpClientResend.class, "resends");
|
||||
private static final AtomicIntegerFieldUpdater<HttpClientResendCount> resendsUpdater =
|
||||
AtomicIntegerFieldUpdater.newUpdater(HttpClientResendCount.class, "resends");
|
||||
|
||||
/**
|
||||
* Initializes the HTTP request resend counter.
|
||||
|
@ -29,16 +29,20 @@ public final class HttpClientResend {
|
|||
if (context.get(KEY) != null) {
|
||||
return context;
|
||||
}
|
||||
return context.with(KEY, new HttpClientResend());
|
||||
return context.with(KEY, new HttpClientResendCount());
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the count of the already made attempts to send an HTTP request; 0 if this is the first
|
||||
* send attempt.
|
||||
*/
|
||||
public static int get(Context context) {
|
||||
HttpClientResend resend = context.get(KEY);
|
||||
HttpClientResendCount resend = context.get(KEY);
|
||||
return resend == null ? 0 : resend.resends;
|
||||
}
|
||||
|
||||
static int getAndIncrement(Context context) {
|
||||
HttpClientResend resend = context.get(KEY);
|
||||
HttpClientResendCount resend = context.get(KEY);
|
||||
if (resend == null) {
|
||||
return 0;
|
||||
}
|
||||
|
@ -48,5 +52,5 @@ public final class HttpClientResend {
|
|||
@SuppressWarnings("unused") // it actually is used by the resendsUpdater
|
||||
private volatile int resends = 0;
|
||||
|
||||
private HttpClientResend() {}
|
||||
private HttpClientResendCount() {}
|
||||
}
|
|
@ -5,17 +5,12 @@
|
|||
|
||||
package io.opentelemetry.instrumentation.api.instrumenter.http;
|
||||
|
||||
import io.opentelemetry.context.Context;
|
||||
import javax.annotation.Nullable;
|
||||
|
||||
/** An interface for getting the {@code http.route} attribute. */
|
||||
/**
|
||||
* An interface for getting the {@code http.route} attribute.
|
||||
*
|
||||
* @deprecated This class is deprecated and will be removed in the 2.0 release. Use {@link
|
||||
* HttpServerRouteBiGetter} instead.
|
||||
*/
|
||||
@Deprecated
|
||||
@FunctionalInterface
|
||||
public interface HttpRouteBiGetter<T, U> {
|
||||
|
||||
/**
|
||||
* Returns the {@code http.route} attribute extracted from {@code context}, {@code arg1} and
|
||||
* {@code arg2}; or {@code null} if it was not found.
|
||||
*/
|
||||
@Nullable
|
||||
String get(Context context, T arg1, U arg2);
|
||||
}
|
||||
public interface HttpRouteBiGetter<T, U> extends HttpServerRouteBiGetter<T, U> {}
|
||||
|
|
|
@ -5,17 +5,12 @@
|
|||
|
||||
package io.opentelemetry.instrumentation.api.instrumenter.http;
|
||||
|
||||
import io.opentelemetry.context.Context;
|
||||
import javax.annotation.Nullable;
|
||||
|
||||
/** An interface for getting the {@code http.route} attribute. */
|
||||
/**
|
||||
* An interface for getting the {@code http.route} attribute.
|
||||
*
|
||||
* @deprecated This class is deprecated and will be removed in the 2.0 release. Use {@link
|
||||
* HttpServerRouteGetter} instead.
|
||||
*/
|
||||
@Deprecated
|
||||
@FunctionalInterface
|
||||
public interface HttpRouteGetter<T> {
|
||||
|
||||
/**
|
||||
* Returns the {@code http.route} attribute extracted from {@code context} and {@code arg}; or
|
||||
* {@code null} if it was not found.
|
||||
*/
|
||||
@Nullable
|
||||
String get(Context context, T arg);
|
||||
}
|
||||
public interface HttpRouteGetter<T> extends HttpServerRouteGetter<T> {}
|
||||
|
|
|
@ -5,13 +5,9 @@
|
|||
|
||||
package io.opentelemetry.instrumentation.api.instrumenter.http;
|
||||
|
||||
import io.opentelemetry.api.trace.Span;
|
||||
import io.opentelemetry.context.Context;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.ContextCustomizer;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.LocalRootSpan;
|
||||
import io.opentelemetry.instrumentation.api.internal.HttpRouteState;
|
||||
import io.opentelemetry.semconv.trace.attributes.SemanticAttributes;
|
||||
import javax.annotation.Nullable;
|
||||
|
||||
/**
|
||||
|
@ -22,7 +18,11 @@ import javax.annotation.Nullable;
|
|||
* later, after the instrumented operation starts. This class provides several static methods that
|
||||
* allow the instrumentation author to provide the matching HTTP route to the instrumentation when
|
||||
* it is discovered.
|
||||
*
|
||||
* @deprecated This class is deprecated and will be removed in the 2.0 release. Use {@link
|
||||
* HttpServerRoute} instead.
|
||||
*/
|
||||
@Deprecated
|
||||
public final class HttpRouteHolder {
|
||||
|
||||
/**
|
||||
|
@ -31,13 +31,7 @@ public final class HttpRouteHolder {
|
|||
*/
|
||||
public static <REQUEST> ContextCustomizer<REQUEST> create(
|
||||
HttpServerAttributesGetter<REQUEST, ?> getter) {
|
||||
return (context, request, startAttributes) -> {
|
||||
if (HttpRouteState.fromContextOrNull(context) != null) {
|
||||
return context;
|
||||
}
|
||||
String method = getter.getHttpRequestMethod(request);
|
||||
return context.with(HttpRouteState.create(method, null, 0));
|
||||
};
|
||||
return HttpServerRoute.create(getter);
|
||||
}
|
||||
|
||||
private HttpRouteHolder() {}
|
||||
|
@ -57,7 +51,7 @@ public final class HttpRouteHolder {
|
|||
*/
|
||||
public static void updateHttpRoute(
|
||||
Context context, HttpRouteSource source, @Nullable String httpRoute) {
|
||||
updateHttpRoute(context, source, ConstantAdapter.INSTANCE, httpRoute);
|
||||
HttpServerRoute.update(context, source.toHttpServerRouteSource(), httpRoute);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -75,7 +69,7 @@ public final class HttpRouteHolder {
|
|||
*/
|
||||
public static <T> void updateHttpRoute(
|
||||
Context context, HttpRouteSource source, HttpRouteGetter<T> httpRouteGetter, T arg1) {
|
||||
updateHttpRoute(context, source, OneArgAdapter.getInstance(), arg1, httpRouteGetter);
|
||||
HttpServerRoute.update(context, source.toHttpServerRouteSource(), httpRouteGetter, arg1);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -97,92 +91,6 @@ public final class HttpRouteHolder {
|
|||
HttpRouteBiGetter<T, U> httpRouteGetter,
|
||||
T arg1,
|
||||
U arg2) {
|
||||
Span serverSpan = LocalRootSpan.fromContextOrNull(context);
|
||||
// even if the server span is not sampled, we have to continue - we need to compute the
|
||||
// http.route properly so that it can be captured by the server metrics
|
||||
if (serverSpan == null) {
|
||||
return;
|
||||
}
|
||||
HttpRouteState httpRouteState = HttpRouteState.fromContextOrNull(context);
|
||||
if (httpRouteState == null) {
|
||||
// TODO: remove this branch?
|
||||
String httpRoute = httpRouteGetter.get(context, arg1, arg2);
|
||||
if (httpRoute != null && !httpRoute.isEmpty()) {
|
||||
// update just the attribute - without http.method we can't compute a proper span name here
|
||||
serverSpan.setAttribute(SemanticAttributes.HTTP_ROUTE, httpRoute);
|
||||
}
|
||||
return;
|
||||
}
|
||||
// special case for servlet filters, even when we have a route from previous filter see whether
|
||||
// the new route is better and if so use it instead
|
||||
boolean onlyIfBetterRoute =
|
||||
!source.useFirst && source.order == httpRouteState.getUpdatedBySourceOrder();
|
||||
if (source.order > httpRouteState.getUpdatedBySourceOrder() || onlyIfBetterRoute) {
|
||||
String route = httpRouteGetter.get(context, arg1, arg2);
|
||||
if (route != null
|
||||
&& !route.isEmpty()
|
||||
&& (!onlyIfBetterRoute || isBetterRoute(httpRouteState, route))) {
|
||||
|
||||
// update just the span name - the attribute will be picked up by the
|
||||
// HttpServerAttributesExtractor at the end of request processing
|
||||
updateSpanName(serverSpan, httpRouteState, route);
|
||||
|
||||
httpRouteState.update(context, source.order, route);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// This is used when setting route from a servlet filter to pick the most descriptive (longest)
|
||||
// route.
|
||||
private static boolean isBetterRoute(HttpRouteState httpRouteState, String name) {
|
||||
String route = httpRouteState.getRoute();
|
||||
int routeLength = route == null ? 0 : route.length();
|
||||
return name.length() > routeLength;
|
||||
}
|
||||
|
||||
private static void updateSpanName(Span serverSpan, HttpRouteState httpRouteState, String route) {
|
||||
String method = httpRouteState.getMethod();
|
||||
// method should never really be null - but in case it for some reason is, we'll rely on the
|
||||
// span name extractor behavior
|
||||
if (method != null) {
|
||||
serverSpan.updateName(method + " " + route);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the {@code http.route} attribute value that's stored in the {@code context}, or null if
|
||||
* it was not set before.
|
||||
*/
|
||||
@Nullable
|
||||
static String getRoute(Context context) {
|
||||
HttpRouteState httpRouteState = HttpRouteState.fromContextOrNull(context);
|
||||
return httpRouteState == null ? null : httpRouteState.getRoute();
|
||||
}
|
||||
|
||||
private static final class OneArgAdapter<T> implements HttpRouteBiGetter<T, HttpRouteGetter<T>> {
|
||||
|
||||
private static final OneArgAdapter<Object> INSTANCE = new OneArgAdapter<>();
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
static <T> OneArgAdapter<T> getInstance() {
|
||||
return (OneArgAdapter<T>) INSTANCE;
|
||||
}
|
||||
|
||||
@Override
|
||||
@Nullable
|
||||
public String get(Context context, T arg, HttpRouteGetter<T> httpRouteGetter) {
|
||||
return httpRouteGetter.get(context, arg);
|
||||
}
|
||||
}
|
||||
|
||||
private static final class ConstantAdapter implements HttpRouteGetter<String> {
|
||||
|
||||
private static final ConstantAdapter INSTANCE = new ConstantAdapter();
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
public String get(Context context, String route) {
|
||||
return route;
|
||||
}
|
||||
HttpServerRoute.update(context, source.toHttpServerRouteSource(), httpRouteGetter, arg1, arg2);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -5,7 +5,13 @@
|
|||
|
||||
package io.opentelemetry.instrumentation.api.instrumenter.http;
|
||||
|
||||
/** Represents the source that provided the {@code http.route} attribute. */
|
||||
/**
|
||||
* Represents the source that provided the {@code http.route} attribute.
|
||||
*
|
||||
* @deprecated This class is deprecated and will be removed in the 2.0 release. Use {@link
|
||||
* HttpServerRouteSource} instead.
|
||||
*/
|
||||
@Deprecated
|
||||
public enum HttpRouteSource {
|
||||
// for servlet filters we try to find the best name which isn't necessarily from the first
|
||||
// filter that is called
|
||||
|
@ -27,4 +33,18 @@ public enum HttpRouteSource {
|
|||
this.order = order;
|
||||
this.useFirst = useFirst;
|
||||
}
|
||||
|
||||
HttpServerRouteSource toHttpServerRouteSource() {
|
||||
switch (this) {
|
||||
case FILTER:
|
||||
return HttpServerRouteSource.SERVER_FILTER;
|
||||
case SERVLET:
|
||||
return HttpServerRouteSource.SERVER;
|
||||
case CONTROLLER:
|
||||
return HttpServerRouteSource.CONTROLLER;
|
||||
case NESTED_CONTROLLER:
|
||||
return HttpServerRouteSource.NESTED_CONTROLLER;
|
||||
}
|
||||
throw new IllegalStateException("Unsupported value " + this);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -37,7 +37,7 @@ public final class HttpServerAttributesExtractorBuilder<REQUEST, RESPONSE> {
|
|||
List<String> capturedRequestHeaders = emptyList();
|
||||
List<String> capturedResponseHeaders = emptyList();
|
||||
Set<String> knownMethods = HttpConstants.KNOWN_METHODS;
|
||||
Function<Context, String> httpRouteGetter = HttpRouteHolder::getRoute;
|
||||
Function<Context, String> httpRouteGetter = HttpServerRoute::get;
|
||||
|
||||
HttpServerAttributesExtractorBuilder(
|
||||
HttpServerAttributesGetter<REQUEST, RESPONSE> httpAttributesGetter,
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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);
|
||||
}
|
|
@ -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);
|
||||
}
|
|
@ -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;
|
||||
}
|
||||
}
|
|
@ -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);
|
||||
}
|
||||
}
|
|
@ -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);
|
||||
}
|
||||
}
|
|
@ -22,7 +22,7 @@ import org.mockito.Mock;
|
|||
import org.mockito.junit.jupiter.MockitoExtension;
|
||||
|
||||
@ExtendWith(MockitoExtension.class)
|
||||
class HttpRouteHolderTest {
|
||||
class HttpServerRouteTest {
|
||||
|
||||
@RegisterExtension static final OpenTelemetryExtension testing = OpenTelemetryExtension.create();
|
||||
|
||||
|
@ -33,7 +33,7 @@ class HttpRouteHolderTest {
|
|||
void setUp() {
|
||||
instrumenter =
|
||||
Instrumenter.<String, Void>builder(testing.getOpenTelemetry(), "test", s -> s)
|
||||
.addContextCustomizer(HttpRouteHolder.create(getter))
|
||||
.addContextCustomizer(HttpServerRoute.create(getter))
|
||||
.buildInstrumenter();
|
||||
}
|
||||
|
||||
|
@ -44,13 +44,13 @@ class HttpRouteHolderTest {
|
|||
parentSpan.end();
|
||||
|
||||
Context context = instrumenter.start(Context.root().with(parentSpan), "test");
|
||||
assertNull(HttpRouteHolder.getRoute(context));
|
||||
assertNull(HttpServerRoute.get(context));
|
||||
|
||||
HttpRouteHolder.updateHttpRoute(context, HttpRouteSource.SERVLET, "/get/:id");
|
||||
HttpServerRoute.update(context, HttpServerRouteSource.SERVER, "/get/:id");
|
||||
|
||||
instrumenter.end(context, "test", null, null);
|
||||
|
||||
assertNull(HttpRouteHolder.getRoute(context));
|
||||
assertNull(HttpServerRoute.get(context));
|
||||
assertThat(testing.getSpans())
|
||||
.satisfiesExactly(
|
||||
span -> assertThat(span).hasName("parent"), span -> assertThat(span).hasName("test"));
|
||||
|
@ -61,13 +61,13 @@ class HttpRouteHolderTest {
|
|||
when(getter.getHttpRequestMethod("test")).thenReturn("GET");
|
||||
|
||||
Context context = instrumenter.start(Context.root(), "test");
|
||||
assertNull(HttpRouteHolder.getRoute(context));
|
||||
assertNull(HttpServerRoute.get(context));
|
||||
|
||||
HttpRouteHolder.updateHttpRoute(context, HttpRouteSource.SERVLET, "/get/:id");
|
||||
HttpServerRoute.update(context, HttpServerRouteSource.SERVER, "/get/:id");
|
||||
|
||||
instrumenter.end(context, "test", null, null);
|
||||
|
||||
assertEquals("/get/:id", HttpRouteHolder.getRoute(context));
|
||||
assertEquals("/get/:id", HttpServerRoute.get(context));
|
||||
assertThat(testing.getSpans())
|
||||
.satisfiesExactly(span -> assertThat(span).hasName("GET /get/:id"));
|
||||
}
|
||||
|
@ -77,14 +77,14 @@ class HttpRouteHolderTest {
|
|||
when(getter.getHttpRequestMethod("test")).thenReturn("GET");
|
||||
|
||||
Context context = instrumenter.start(Context.root(), "test");
|
||||
assertNull(HttpRouteHolder.getRoute(context));
|
||||
assertNull(HttpServerRoute.get(context));
|
||||
|
||||
HttpRouteHolder.updateHttpRoute(context, HttpRouteSource.SERVLET, "/route1");
|
||||
HttpRouteHolder.updateHttpRoute(context, HttpRouteSource.SERVLET, "/route2");
|
||||
HttpServerRoute.update(context, HttpServerRouteSource.SERVER, "/route1");
|
||||
HttpServerRoute.update(context, HttpServerRouteSource.SERVER, "/route2");
|
||||
|
||||
instrumenter.end(context, "test", null, null);
|
||||
|
||||
assertEquals("/route1", HttpRouteHolder.getRoute(context));
|
||||
assertEquals("/route1", HttpServerRoute.get(context));
|
||||
assertThat(testing.getSpans())
|
||||
.satisfiesExactly(span -> assertThat(span).hasName("GET /route1"));
|
||||
}
|
||||
|
@ -94,14 +94,14 @@ class HttpRouteHolderTest {
|
|||
when(getter.getHttpRequestMethod("test")).thenReturn("GET");
|
||||
|
||||
Context context = instrumenter.start(Context.root(), "test");
|
||||
assertNull(HttpRouteHolder.getRoute(context));
|
||||
assertNull(HttpServerRoute.get(context));
|
||||
|
||||
HttpRouteHolder.updateHttpRoute(context, HttpRouteSource.CONTROLLER, "/route1");
|
||||
HttpRouteHolder.updateHttpRoute(context, HttpRouteSource.SERVLET, "/route2");
|
||||
HttpServerRoute.update(context, HttpServerRouteSource.CONTROLLER, "/route1");
|
||||
HttpServerRoute.update(context, HttpServerRouteSource.SERVER, "/route2");
|
||||
|
||||
instrumenter.end(context, "test", null, null);
|
||||
|
||||
assertEquals("/route1", HttpRouteHolder.getRoute(context));
|
||||
assertEquals("/route1", HttpServerRoute.get(context));
|
||||
assertThat(testing.getSpans())
|
||||
.satisfiesExactly(span -> assertThat(span).hasName("GET /route1"));
|
||||
}
|
||||
|
@ -111,14 +111,14 @@ class HttpRouteHolderTest {
|
|||
when(getter.getHttpRequestMethod("test")).thenReturn("GET");
|
||||
|
||||
Context context = instrumenter.start(Context.root(), "test");
|
||||
assertNull(HttpRouteHolder.getRoute(context));
|
||||
assertNull(HttpServerRoute.get(context));
|
||||
|
||||
HttpRouteHolder.updateHttpRoute(context, HttpRouteSource.SERVLET, "/route1");
|
||||
HttpRouteHolder.updateHttpRoute(context, HttpRouteSource.CONTROLLER, "/route2");
|
||||
HttpServerRoute.update(context, HttpServerRouteSource.SERVER, "/route1");
|
||||
HttpServerRoute.update(context, HttpServerRouteSource.CONTROLLER, "/route2");
|
||||
|
||||
instrumenter.end(context, "test", null, null);
|
||||
|
||||
assertEquals("/route2", HttpRouteHolder.getRoute(context));
|
||||
assertEquals("/route2", HttpServerRoute.get(context));
|
||||
assertThat(testing.getSpans())
|
||||
.satisfiesExactly(span -> assertThat(span).hasName("GET /route2"));
|
||||
}
|
||||
|
@ -128,14 +128,14 @@ class HttpRouteHolderTest {
|
|||
when(getter.getHttpRequestMethod("test")).thenReturn("GET");
|
||||
|
||||
Context context = instrumenter.start(Context.root(), "test");
|
||||
assertNull(HttpRouteHolder.getRoute(context));
|
||||
assertNull(HttpServerRoute.get(context));
|
||||
|
||||
HttpRouteHolder.updateHttpRoute(context, HttpRouteSource.FILTER, "/a/route");
|
||||
HttpRouteHolder.updateHttpRoute(context, HttpRouteSource.FILTER, "/a/much/better/route");
|
||||
HttpServerRoute.update(context, HttpServerRouteSource.SERVER_FILTER, "/a/route");
|
||||
HttpServerRoute.update(context, HttpServerRouteSource.SERVER_FILTER, "/a/much/better/route");
|
||||
|
||||
instrumenter.end(context, "test", null, null);
|
||||
|
||||
assertEquals("/a/much/better/route", HttpRouteHolder.getRoute(context));
|
||||
assertEquals("/a/much/better/route", HttpServerRoute.get(context));
|
||||
assertThat(testing.getSpans())
|
||||
.satisfiesExactly(span -> assertThat(span).hasName("GET /a/much/better/route"));
|
||||
}
|
||||
|
@ -145,14 +145,14 @@ class HttpRouteHolderTest {
|
|||
when(getter.getHttpRequestMethod("test")).thenReturn("GET");
|
||||
|
||||
Context context = instrumenter.start(Context.root(), "test");
|
||||
assertNull(HttpRouteHolder.getRoute(context));
|
||||
assertNull(HttpServerRoute.get(context));
|
||||
|
||||
HttpRouteHolder.updateHttpRoute(context, HttpRouteSource.FILTER, "/a/pretty/good/route");
|
||||
HttpRouteHolder.updateHttpRoute(context, HttpRouteSource.FILTER, "/a");
|
||||
HttpServerRoute.update(context, HttpServerRouteSource.SERVER_FILTER, "/a/pretty/good/route");
|
||||
HttpServerRoute.update(context, HttpServerRouteSource.SERVER_FILTER, "/a");
|
||||
|
||||
instrumenter.end(context, "test", null, null);
|
||||
|
||||
assertEquals("/a/pretty/good/route", HttpRouteHolder.getRoute(context));
|
||||
assertEquals("/a/pretty/good/route", HttpServerRoute.get(context));
|
||||
assertThat(testing.getSpans())
|
||||
.satisfiesExactly(span -> assertThat(span).hasName("GET /a/pretty/good/route"));
|
||||
}
|
||||
|
@ -162,13 +162,13 @@ class HttpRouteHolderTest {
|
|||
when(getter.getHttpRequestMethod("test")).thenReturn(null);
|
||||
|
||||
Context context = instrumenter.start(Context.root(), "test");
|
||||
assertNull(HttpRouteHolder.getRoute(context));
|
||||
assertNull(HttpServerRoute.get(context));
|
||||
|
||||
HttpRouteHolder.updateHttpRoute(context, HttpRouteSource.SERVLET, "/get/:id");
|
||||
HttpServerRoute.update(context, HttpServerRouteSource.SERVER, "/get/:id");
|
||||
|
||||
instrumenter.end(context, "test", null, null);
|
||||
|
||||
assertEquals("/get/:id", HttpRouteHolder.getRoute(context));
|
||||
assertEquals("/get/:id", HttpServerRoute.get(context));
|
||||
assertThat(testing.getSpans()).satisfiesExactly(span -> assertThat(span).hasName("test"));
|
||||
}
|
||||
}
|
|
@ -9,9 +9,9 @@ import akka.http.scaladsl.model.HttpRequest;
|
|||
import akka.http.scaladsl.model.HttpResponse;
|
||||
import io.opentelemetry.api.GlobalOpenTelemetry;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteHolder;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerAttributesExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerMetrics;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRoute;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanNameExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanStatusExtractor;
|
||||
import io.opentelemetry.javaagent.bootstrap.internal.CommonConfig;
|
||||
|
@ -36,7 +36,7 @@ public final class AkkaHttpServerSingletons {
|
|||
.setKnownMethods(CommonConfig.get().getKnownHttpRequestMethods())
|
||||
.build())
|
||||
.addOperationMetrics(HttpServerMetrics.get())
|
||||
.addContextCustomizer(HttpRouteHolder.create(httpAttributesGetter))
|
||||
.addContextCustomizer(HttpServerRoute.create(httpAttributesGetter))
|
||||
.buildServerInstrumenter(AkkaHttpServerHeaders.INSTANCE);
|
||||
}
|
||||
|
||||
|
|
|
@ -14,8 +14,8 @@ import io.opentelemetry.api.trace.Span;
|
|||
import io.opentelemetry.api.trace.StatusCode;
|
||||
import io.opentelemetry.context.Context;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.ErrorCauseExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteHolder;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteSource;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRoute;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRouteSource;
|
||||
|
||||
class ServerDecorator extends SimpleDecoratingHttpService {
|
||||
|
||||
|
@ -34,8 +34,8 @@ class ServerDecorator extends SimpleDecoratingHttpService {
|
|||
|
||||
Context otelContext = Context.current();
|
||||
|
||||
HttpRouteHolder.updateHttpRoute(
|
||||
otelContext, HttpRouteSource.SERVLET, (context, name) -> name, matchedRoute);
|
||||
HttpServerRoute.update(
|
||||
otelContext, HttpServerRouteSource.SERVER, (context, name) -> name, matchedRoute);
|
||||
|
||||
try {
|
||||
return unwrap().serve(ctx, req);
|
||||
|
|
|
@ -19,10 +19,10 @@ import io.opentelemetry.instrumentation.api.instrumenter.http.HttpClientAttribut
|
|||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpClientAttributesExtractorBuilder;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpClientExperimentalMetrics;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpClientMetrics;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteHolder;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerAttributesExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerAttributesExtractorBuilder;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerMetrics;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRoute;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanNameExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanStatusExtractor;
|
||||
import io.opentelemetry.instrumentation.armeria.v1_3.internal.ArmeriaHttpClientAttributesGetter;
|
||||
|
@ -214,7 +214,7 @@ public final class ArmeriaTelemetryBuilder {
|
|||
HttpSpanStatusExtractor.create(serverAttributesGetter)))
|
||||
.addAttributesExtractor(httpServerAttributesExtractorBuilder.build())
|
||||
.addOperationMetrics(HttpServerMetrics.get())
|
||||
.addContextCustomizer(HttpRouteHolder.create(serverAttributesGetter));
|
||||
.addContextCustomizer(HttpServerRoute.create(serverAttributesGetter));
|
||||
|
||||
if (peerService != null) {
|
||||
clientInstrumenterBuilder.addAttributesExtractor(
|
||||
|
|
|
@ -25,8 +25,8 @@ package io.opentelemetry.javaagent.instrumentation.apachecamel.decorators;
|
|||
|
||||
import io.opentelemetry.api.common.AttributesBuilder;
|
||||
import io.opentelemetry.context.Context;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteHolder;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteSource;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRoute;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRouteSource;
|
||||
import io.opentelemetry.javaagent.instrumentation.apachecamel.CamelDirection;
|
||||
import io.opentelemetry.semconv.trace.attributes.SemanticAttributes;
|
||||
import java.net.MalformedURLException;
|
||||
|
@ -122,9 +122,9 @@ class HttpSpanDecorator extends BaseSpanDecorator {
|
|||
if (!shouldAppendHttpRoute(camelDirection)) {
|
||||
return;
|
||||
}
|
||||
HttpRouteHolder.updateHttpRoute(
|
||||
HttpServerRoute.update(
|
||||
context,
|
||||
HttpRouteSource.CONTROLLER,
|
||||
HttpServerRouteSource.CONTROLLER,
|
||||
(c, exchange, endpoint) -> getPath(exchange, endpoint),
|
||||
camelExchange,
|
||||
camelEndpoint);
|
||||
|
|
|
@ -11,8 +11,8 @@ import io.opentelemetry.context.Context;
|
|||
import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.code.CodeAttributesExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.code.CodeSpanNameExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteHolder;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteSource;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRoute;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRouteSource;
|
||||
|
||||
public final class FinatraSingletons {
|
||||
|
||||
|
@ -34,8 +34,8 @@ public final class FinatraSingletons {
|
|||
}
|
||||
|
||||
public static void updateServerSpanName(Context context, RouteInfo routeInfo) {
|
||||
HttpRouteHolder.updateHttpRoute(
|
||||
context, HttpRouteSource.CONTROLLER, (c, route) -> route.path(), routeInfo);
|
||||
HttpServerRoute.update(
|
||||
context, HttpServerRouteSource.CONTROLLER, (c, route) -> route.path(), routeInfo);
|
||||
}
|
||||
|
||||
private FinatraSingletons() {}
|
||||
|
|
|
@ -5,13 +5,13 @@
|
|||
|
||||
package io.opentelemetry.javaagent.instrumentation.grails;
|
||||
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteGetter;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRouteGetter;
|
||||
import io.opentelemetry.javaagent.bootstrap.servlet.ServletContextPath;
|
||||
import org.grails.web.mapping.mvc.GrailsControllerUrlMappingInfo;
|
||||
|
||||
public class GrailsServerSpanNaming {
|
||||
|
||||
public static final HttpRouteGetter<GrailsControllerUrlMappingInfo> SERVER_SPAN_NAME =
|
||||
public static final HttpServerRouteGetter<GrailsControllerUrlMappingInfo> SERVER_SPAN_NAME =
|
||||
(context, info) -> {
|
||||
String action =
|
||||
info.getActionName() != null
|
||||
|
|
|
@ -5,7 +5,6 @@
|
|||
|
||||
package io.opentelemetry.javaagent.instrumentation.grails;
|
||||
|
||||
import static io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteSource.CONTROLLER;
|
||||
import static net.bytebuddy.matcher.ElementMatchers.isMethod;
|
||||
import static net.bytebuddy.matcher.ElementMatchers.isPublic;
|
||||
import static net.bytebuddy.matcher.ElementMatchers.named;
|
||||
|
@ -13,7 +12,8 @@ import static net.bytebuddy.matcher.ElementMatchers.takesArgument;
|
|||
import static net.bytebuddy.matcher.ElementMatchers.takesArguments;
|
||||
|
||||
import io.opentelemetry.context.Context;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteHolder;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRoute;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRouteSource;
|
||||
import io.opentelemetry.javaagent.bootstrap.Java8BytecodeBridge;
|
||||
import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation;
|
||||
import io.opentelemetry.javaagent.extension.instrumentation.TypeTransformer;
|
||||
|
@ -48,9 +48,9 @@ public class UrlMappingsInfoHandlerAdapterInstrumentation implements TypeInstrum
|
|||
if (handler instanceof GrailsControllerUrlMappingInfo) {
|
||||
Context parentContext = Java8BytecodeBridge.currentContext();
|
||||
|
||||
HttpRouteHolder.updateHttpRoute(
|
||||
HttpServerRoute.update(
|
||||
parentContext,
|
||||
CONTROLLER,
|
||||
HttpServerRouteSource.CONTROLLER,
|
||||
GrailsServerSpanNaming.SERVER_SPAN_NAME,
|
||||
(GrailsControllerUrlMappingInfo) handler);
|
||||
}
|
||||
|
|
|
@ -7,9 +7,9 @@ package io.opentelemetry.javaagent.instrumentation.grizzly;
|
|||
|
||||
import io.opentelemetry.api.GlobalOpenTelemetry;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteHolder;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerAttributesExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerMetrics;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRoute;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanNameExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanStatusExtractor;
|
||||
import io.opentelemetry.javaagent.bootstrap.internal.CommonConfig;
|
||||
|
@ -45,7 +45,7 @@ public final class GrizzlySingletons {
|
|||
.init(context))
|
||||
.addContextCustomizer(
|
||||
(context, httpRequestPacket, startAttributes) -> GrizzlyErrorHolder.init(context))
|
||||
.addContextCustomizer(HttpRouteHolder.create(httpAttributesGetter))
|
||||
.addContextCustomizer(HttpServerRoute.create(httpAttributesGetter))
|
||||
.buildServerInstrumenter(HttpRequestHeadersGetter.INSTANCE);
|
||||
}
|
||||
|
||||
|
|
|
@ -19,8 +19,8 @@ import static net.bytebuddy.matcher.ElementMatchers.not;
|
|||
|
||||
import io.opentelemetry.context.Context;
|
||||
import io.opentelemetry.context.Scope;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteHolder;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteSource;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRoute;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRouteSource;
|
||||
import io.opentelemetry.javaagent.bootstrap.CallDepth;
|
||||
import io.opentelemetry.javaagent.bootstrap.Java8BytecodeBridge;
|
||||
import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation;
|
||||
|
@ -83,9 +83,9 @@ public class JaxrsAnnotationsInstrumentation implements TypeInstrumentation {
|
|||
Context parentContext = Java8BytecodeBridge.currentContext();
|
||||
handlerData = new HandlerData(target.getClass(), method);
|
||||
|
||||
HttpRouteHolder.updateHttpRoute(
|
||||
HttpServerRoute.update(
|
||||
parentContext,
|
||||
HttpRouteSource.CONTROLLER,
|
||||
HttpServerRouteSource.CONTROLLER,
|
||||
JaxrsServerSpanNaming.SERVER_SPAN_NAME,
|
||||
handlerData);
|
||||
|
||||
|
|
|
@ -5,13 +5,13 @@
|
|||
|
||||
package io.opentelemetry.javaagent.instrumentation.jaxrs.v1_0;
|
||||
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteGetter;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRouteGetter;
|
||||
import io.opentelemetry.javaagent.bootstrap.jaxrs.JaxrsContextPath;
|
||||
import io.opentelemetry.javaagent.bootstrap.servlet.ServletContextPath;
|
||||
|
||||
public class JaxrsServerSpanNaming {
|
||||
|
||||
public static final HttpRouteGetter<HandlerData> SERVER_SPAN_NAME =
|
||||
public static final HttpServerRouteGetter<HandlerData> SERVER_SPAN_NAME =
|
||||
(context, handlerData) -> {
|
||||
String pathBasedSpanName = handlerData.getServerSpanName();
|
||||
// If path based name is empty skip prepending context path so that path based name would
|
||||
|
|
|
@ -9,8 +9,8 @@ import static io.opentelemetry.javaagent.instrumentation.jaxrs.v2_0.JaxrsAnnotat
|
|||
|
||||
import io.opentelemetry.context.Context;
|
||||
import io.opentelemetry.context.Scope;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteHolder;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteSource;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRoute;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRouteSource;
|
||||
import io.opentelemetry.javaagent.bootstrap.Java8BytecodeBridge;
|
||||
import io.opentelemetry.javaagent.instrumentation.jaxrs.JaxrsConstants;
|
||||
import io.opentelemetry.javaagent.instrumentation.jaxrs.JaxrsServerSpanNaming;
|
||||
|
@ -64,9 +64,9 @@ public class DefaultRequestContextInstrumentation extends AbstractRequestContext
|
|||
Context parentContext = Java8BytecodeBridge.currentContext();
|
||||
handlerData = new Jaxrs2HandlerData(filterClass, method);
|
||||
|
||||
HttpRouteHolder.updateHttpRoute(
|
||||
HttpServerRoute.update(
|
||||
parentContext,
|
||||
HttpRouteSource.CONTROLLER,
|
||||
HttpServerRouteSource.CONTROLLER,
|
||||
JaxrsServerSpanNaming.SERVER_SPAN_NAME,
|
||||
handlerData);
|
||||
|
||||
|
|
|
@ -18,8 +18,8 @@ import static net.bytebuddy.matcher.ElementMatchers.not;
|
|||
|
||||
import io.opentelemetry.context.Context;
|
||||
import io.opentelemetry.context.Scope;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteHolder;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteSource;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRoute;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRouteSource;
|
||||
import io.opentelemetry.instrumentation.api.util.VirtualField;
|
||||
import io.opentelemetry.javaagent.bootstrap.CallDepth;
|
||||
import io.opentelemetry.javaagent.bootstrap.Java8BytecodeBridge;
|
||||
|
@ -105,9 +105,9 @@ public class JaxrsAnnotationsInstrumentation implements TypeInstrumentation {
|
|||
Context parentContext = Java8BytecodeBridge.currentContext();
|
||||
handlerData = new Jaxrs2HandlerData(target.getClass(), method);
|
||||
|
||||
HttpRouteHolder.updateHttpRoute(
|
||||
HttpServerRoute.update(
|
||||
parentContext,
|
||||
HttpRouteSource.CONTROLLER,
|
||||
HttpServerRouteSource.CONTROLLER,
|
||||
JaxrsServerSpanNaming.SERVER_SPAN_NAME,
|
||||
handlerData);
|
||||
|
||||
|
|
|
@ -8,9 +8,9 @@ package io.opentelemetry.javaagent.instrumentation.jaxrs.v2_0;
|
|||
import static io.opentelemetry.javaagent.instrumentation.jaxrs.JaxrsPathUtil.normalizePath;
|
||||
|
||||
import io.opentelemetry.context.Context;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteGetter;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteHolder;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteSource;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRoute;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRouteGetter;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRouteSource;
|
||||
import io.opentelemetry.javaagent.bootstrap.jaxrs.JaxrsContextPath;
|
||||
import io.opentelemetry.javaagent.bootstrap.servlet.ServletContextPath;
|
||||
import org.apache.cxf.jaxrs.model.ClassResourceInfo;
|
||||
|
@ -18,7 +18,7 @@ import org.apache.cxf.jaxrs.model.OperationResourceInfo;
|
|||
import org.apache.cxf.jaxrs.model.URITemplate;
|
||||
import org.apache.cxf.message.Exchange;
|
||||
|
||||
public final class CxfSpanName implements HttpRouteGetter<String> {
|
||||
public final class CxfSpanName implements HttpServerRouteGetter<String> {
|
||||
|
||||
public static final CxfSpanName INSTANCE = new CxfSpanName();
|
||||
|
||||
|
@ -26,7 +26,7 @@ public final class CxfSpanName implements HttpRouteGetter<String> {
|
|||
Context context = Context.current();
|
||||
String jaxrsName = calculateJaxrsName(context, exchange);
|
||||
|
||||
HttpRouteHolder.updateHttpRoute(context, HttpRouteSource.NESTED_CONTROLLER, this, jaxrsName);
|
||||
HttpServerRoute.update(context, HttpServerRouteSource.NESTED_CONTROLLER, this, jaxrsName);
|
||||
|
||||
return JaxrsContextPath.init(context, jaxrsName);
|
||||
}
|
||||
|
|
|
@ -8,9 +8,9 @@ package io.opentelemetry.javaagent.instrumentation.jaxrs.v2_0;
|
|||
import static io.opentelemetry.javaagent.instrumentation.jaxrs.JaxrsPathUtil.normalizePath;
|
||||
|
||||
import io.opentelemetry.context.Context;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteGetter;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteHolder;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteSource;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRoute;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRouteGetter;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRouteSource;
|
||||
import io.opentelemetry.javaagent.bootstrap.jaxrs.JaxrsContextPath;
|
||||
import io.opentelemetry.javaagent.bootstrap.servlet.ServletContextPath;
|
||||
import javax.annotation.Nullable;
|
||||
|
@ -19,13 +19,13 @@ import javax.ws.rs.core.UriInfo;
|
|||
import org.glassfish.jersey.server.ContainerRequest;
|
||||
import org.glassfish.jersey.server.ExtendedUriInfo;
|
||||
|
||||
public class JerseySpanName implements HttpRouteGetter<Request> {
|
||||
public class JerseySpanName implements HttpServerRouteGetter<Request> {
|
||||
|
||||
public static final JerseySpanName INSTANCE = new JerseySpanName();
|
||||
|
||||
public void updateServerSpanName(Request request) {
|
||||
Context context = Context.current();
|
||||
HttpRouteHolder.updateHttpRoute(context, HttpRouteSource.NESTED_CONTROLLER, this, request);
|
||||
HttpServerRoute.update(context, HttpServerRouteSource.NESTED_CONTROLLER, this, request);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -5,22 +5,21 @@
|
|||
|
||||
package io.opentelemetry.javaagent.instrumentation.jaxrs.v2_0;
|
||||
|
||||
import static io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteSource.NESTED_CONTROLLER;
|
||||
|
||||
import io.opentelemetry.context.Context;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteGetter;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteHolder;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRoute;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRouteGetter;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRouteSource;
|
||||
import io.opentelemetry.javaagent.bootstrap.jaxrs.JaxrsContextPath;
|
||||
import io.opentelemetry.javaagent.bootstrap.servlet.ServletContextPath;
|
||||
import javax.annotation.Nullable;
|
||||
|
||||
public final class ResteasySpanName implements HttpRouteGetter<String> {
|
||||
public final class ResteasySpanName implements HttpServerRouteGetter<String> {
|
||||
|
||||
public static final ResteasySpanName INSTANCE = new ResteasySpanName();
|
||||
|
||||
public void updateServerSpanName(Context context, String name) {
|
||||
if (name != null) {
|
||||
HttpRouteHolder.updateHttpRoute(context, NESTED_CONTROLLER, this, name);
|
||||
HttpServerRoute.update(context, HttpServerRouteSource.NESTED_CONTROLLER, this, name);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -9,8 +9,8 @@ import static io.opentelemetry.javaagent.instrumentation.jaxrs.v3_0.JaxrsAnnotat
|
|||
|
||||
import io.opentelemetry.context.Context;
|
||||
import io.opentelemetry.context.Scope;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteHolder;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteSource;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRoute;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRouteSource;
|
||||
import io.opentelemetry.javaagent.bootstrap.Java8BytecodeBridge;
|
||||
import io.opentelemetry.javaagent.instrumentation.jaxrs.JaxrsConstants;
|
||||
import io.opentelemetry.javaagent.instrumentation.jaxrs.JaxrsServerSpanNaming;
|
||||
|
@ -64,9 +64,9 @@ public class DefaultRequestContextInstrumentation extends AbstractRequestContext
|
|||
Context parentContext = Java8BytecodeBridge.currentContext();
|
||||
handlerData = new Jaxrs3HandlerData(filterClass, method);
|
||||
|
||||
HttpRouteHolder.updateHttpRoute(
|
||||
HttpServerRoute.update(
|
||||
parentContext,
|
||||
HttpRouteSource.CONTROLLER,
|
||||
HttpServerRouteSource.CONTROLLER,
|
||||
JaxrsServerSpanNaming.SERVER_SPAN_NAME,
|
||||
handlerData);
|
||||
|
||||
|
|
|
@ -18,8 +18,8 @@ import static net.bytebuddy.matcher.ElementMatchers.not;
|
|||
|
||||
import io.opentelemetry.context.Context;
|
||||
import io.opentelemetry.context.Scope;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteHolder;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteSource;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRoute;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRouteSource;
|
||||
import io.opentelemetry.instrumentation.api.util.VirtualField;
|
||||
import io.opentelemetry.javaagent.bootstrap.CallDepth;
|
||||
import io.opentelemetry.javaagent.bootstrap.Java8BytecodeBridge;
|
||||
|
@ -105,9 +105,9 @@ public class JaxrsAnnotationsInstrumentation implements TypeInstrumentation {
|
|||
Context parentContext = Java8BytecodeBridge.currentContext();
|
||||
handlerData = new Jaxrs3HandlerData(target.getClass(), method);
|
||||
|
||||
HttpRouteHolder.updateHttpRoute(
|
||||
HttpServerRoute.update(
|
||||
parentContext,
|
||||
HttpRouteSource.CONTROLLER,
|
||||
HttpServerRouteSource.CONTROLLER,
|
||||
JaxrsServerSpanNaming.SERVER_SPAN_NAME,
|
||||
handlerData);
|
||||
|
||||
|
|
|
@ -8,9 +8,9 @@ package io.opentelemetry.javaagent.instrumentation.jaxrs.v3_0;
|
|||
import static io.opentelemetry.javaagent.instrumentation.jaxrs.JaxrsPathUtil.normalizePath;
|
||||
|
||||
import io.opentelemetry.context.Context;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteGetter;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteHolder;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteSource;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRoute;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRouteGetter;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRouteSource;
|
||||
import io.opentelemetry.javaagent.bootstrap.jaxrs.JaxrsContextPath;
|
||||
import io.opentelemetry.javaagent.bootstrap.servlet.ServletContextPath;
|
||||
import jakarta.ws.rs.core.Request;
|
||||
|
@ -19,13 +19,13 @@ import javax.annotation.Nullable;
|
|||
import org.glassfish.jersey.server.ContainerRequest;
|
||||
import org.glassfish.jersey.server.ExtendedUriInfo;
|
||||
|
||||
public class JerseySpanName implements HttpRouteGetter<Request> {
|
||||
public class JerseySpanName implements HttpServerRouteGetter<Request> {
|
||||
|
||||
public static final JerseySpanName INSTANCE = new JerseySpanName();
|
||||
|
||||
public void updateServerSpanName(Request request) {
|
||||
Context context = Context.current();
|
||||
HttpRouteHolder.updateHttpRoute(context, HttpRouteSource.NESTED_CONTROLLER, this, request);
|
||||
HttpServerRoute.update(context, HttpServerRouteSource.NESTED_CONTROLLER, this, request);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -5,22 +5,21 @@
|
|||
|
||||
package io.opentelemetry.javaagent.instrumentation.jaxrs.v3_0;
|
||||
|
||||
import static io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteSource.NESTED_CONTROLLER;
|
||||
|
||||
import io.opentelemetry.context.Context;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteGetter;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteHolder;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRoute;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRouteGetter;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRouteSource;
|
||||
import io.opentelemetry.javaagent.bootstrap.jaxrs.JaxrsContextPath;
|
||||
import io.opentelemetry.javaagent.bootstrap.servlet.ServletContextPath;
|
||||
import javax.annotation.Nullable;
|
||||
|
||||
public final class ResteasySpanName implements HttpRouteGetter<String> {
|
||||
public final class ResteasySpanName implements HttpServerRouteGetter<String> {
|
||||
|
||||
public static final ResteasySpanName INSTANCE = new ResteasySpanName();
|
||||
|
||||
public void updateServerSpanName(Context context, String name) {
|
||||
if (name != null) {
|
||||
HttpRouteHolder.updateHttpRoute(context, NESTED_CONTROLLER, this, name);
|
||||
HttpServerRoute.update(context, HttpServerRouteSource.NESTED_CONTROLLER, this, name);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -5,13 +5,13 @@
|
|||
|
||||
package io.opentelemetry.javaagent.instrumentation.jaxrs;
|
||||
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteGetter;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRouteGetter;
|
||||
import io.opentelemetry.javaagent.bootstrap.jaxrs.JaxrsContextPath;
|
||||
import io.opentelemetry.javaagent.bootstrap.servlet.ServletContextPath;
|
||||
|
||||
public class JaxrsServerSpanNaming {
|
||||
|
||||
public static final HttpRouteGetter<HandlerData> SERVER_SPAN_NAME =
|
||||
public static final HttpServerRouteGetter<HandlerData> SERVER_SPAN_NAME =
|
||||
(context, handlerData) -> {
|
||||
String pathBasedSpanName = handlerData.getServerSpanName();
|
||||
// If path based name is empty skip prepending context path so that path based name would
|
||||
|
|
|
@ -9,8 +9,8 @@ import io.opentelemetry.api.trace.Span;
|
|||
import io.opentelemetry.context.Context;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.LocalRootSpan;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteHolder;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteSource;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRoute;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRouteSource;
|
||||
import io.opentelemetry.javaagent.bootstrap.Java8BytecodeBridge;
|
||||
|
||||
public final class RequestContextHelper {
|
||||
|
@ -21,9 +21,9 @@ public final class RequestContextHelper {
|
|||
Span serverSpan = LocalRootSpan.fromContextOrNull(parentContext);
|
||||
Span currentSpan = Java8BytecodeBridge.spanFromContext(parentContext);
|
||||
|
||||
HttpRouteHolder.updateHttpRoute(
|
||||
HttpServerRoute.update(
|
||||
parentContext,
|
||||
HttpRouteSource.CONTROLLER,
|
||||
HttpServerRouteSource.CONTROLLER,
|
||||
JaxrsServerSpanNaming.SERVER_SPAN_NAME,
|
||||
handlerData);
|
||||
|
||||
|
|
|
@ -18,10 +18,10 @@ import io.opentelemetry.instrumentation.api.instrumenter.AttributesExtractor
|
|||
import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.SpanKindExtractor
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.SpanStatusExtractor
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteHolder
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteSource
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerAttributesExtractor
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerMetrics
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRoute
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRouteSource
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanNameExtractor
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanStatusExtractor
|
||||
import io.opentelemetry.instrumentation.api.internal.InstrumenterUtil
|
||||
|
@ -121,7 +121,7 @@ class KtorServerTracing private constructor(
|
|||
setSpanStatusExtractor(configuration.statusExtractor(HttpSpanStatusExtractor.create(httpAttributesGetter)))
|
||||
addAttributesExtractor(configuration.httpAttributesExtractorBuilder.build())
|
||||
addOperationMetrics(HttpServerMetrics.get())
|
||||
addContextCustomizer(HttpRouteHolder.create(httpAttributesGetter))
|
||||
addContextCustomizer(HttpServerRoute.create(httpAttributesGetter))
|
||||
}
|
||||
|
||||
val instrumenter = InstrumenterUtil.buildUpstreamInstrumenter(
|
||||
|
@ -175,7 +175,7 @@ class KtorServerTracing private constructor(
|
|||
pipeline.environment.monitor.subscribe(Routing.RoutingCallStarted) { call ->
|
||||
val context = call.attributes.getOrNull(contextKey)
|
||||
if (context != null) {
|
||||
HttpRouteHolder.updateHttpRoute(context, HttpRouteSource.SERVLET, { _, arg -> arg.route.parent.toString() }, call)
|
||||
HttpServerRoute.update(context, HttpServerRouteSource.SERVER, { _, arg -> arg.route.parent.toString() }, call)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -18,10 +18,10 @@ import io.opentelemetry.instrumentation.api.instrumenter.AttributesExtractor
|
|||
import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.SpanKindExtractor
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.SpanStatusExtractor
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteHolder
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteSource
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerAttributesExtractor
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerMetrics
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRoute
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRouteSource
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanNameExtractor
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanStatusExtractor
|
||||
import io.opentelemetry.instrumentation.api.internal.InstrumenterUtil
|
||||
|
@ -121,7 +121,7 @@ class KtorServerTracing private constructor(
|
|||
setSpanStatusExtractor(configuration.statusExtractor(HttpSpanStatusExtractor.create(httpAttributesGetter)))
|
||||
addAttributesExtractor(configuration.httpAttributesExtractorBuilder.build())
|
||||
addOperationMetrics(HttpServerMetrics.get())
|
||||
addContextCustomizer(HttpRouteHolder.create(httpAttributesGetter))
|
||||
addContextCustomizer(HttpServerRoute.create(httpAttributesGetter))
|
||||
}
|
||||
|
||||
val instrumenter = InstrumenterUtil.buildUpstreamInstrumenter(
|
||||
|
@ -173,7 +173,7 @@ class KtorServerTracing private constructor(
|
|||
}
|
||||
|
||||
pipeline.environment.monitor.subscribe(Routing.RoutingCallStarted) { call ->
|
||||
HttpRouteHolder.updateHttpRoute(Context.current(), HttpRouteSource.SERVLET, { _, arg -> arg.route.parent.toString() }, call)
|
||||
HttpServerRoute.update(Context.current(), HttpServerRouteSource.SERVER, { _, arg -> arg.route.parent.toString() }, call)
|
||||
}
|
||||
|
||||
return feature
|
||||
|
|
|
@ -7,9 +7,9 @@ package io.opentelemetry.javaagent.instrumentation.liberty.dispatcher;
|
|||
|
||||
import io.opentelemetry.api.GlobalOpenTelemetry;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteHolder;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerAttributesExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerMetrics;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRoute;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanNameExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanStatusExtractor;
|
||||
import io.opentelemetry.javaagent.bootstrap.internal.CommonConfig;
|
||||
|
@ -35,7 +35,7 @@ public final class LibertyDispatcherSingletons {
|
|||
.setCapturedResponseHeaders(CommonConfig.get().getServerResponseHeaders())
|
||||
.setKnownMethods(CommonConfig.get().getKnownHttpRequestMethods())
|
||||
.build())
|
||||
.addContextCustomizer(HttpRouteHolder.create(httpAttributesGetter))
|
||||
.addContextCustomizer(HttpServerRoute.create(httpAttributesGetter))
|
||||
.addOperationMetrics(HttpServerMetrics.get())
|
||||
.buildServerInstrumenter(LibertyDispatcherRequestGetter.INSTANCE);
|
||||
}
|
||||
|
|
|
@ -7,9 +7,9 @@ package io.opentelemetry.javaagent.instrumentation.netty.v3_8.server;
|
|||
|
||||
import io.opentelemetry.api.GlobalOpenTelemetry;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteHolder;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerAttributesExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerMetrics;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRoute;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanNameExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanStatusExtractor;
|
||||
import io.opentelemetry.instrumentation.netty.common.internal.NettyErrorHolder;
|
||||
|
@ -40,7 +40,7 @@ final class NettyServerSingletons {
|
|||
.addOperationMetrics(HttpServerMetrics.get())
|
||||
.addContextCustomizer(
|
||||
(context, requestAndChannel, startAttributes) -> NettyErrorHolder.init(context))
|
||||
.addContextCustomizer(HttpRouteHolder.create(httpServerAttributesGetter))
|
||||
.addContextCustomizer(HttpServerRoute.create(httpServerAttributesGetter))
|
||||
.buildServerInstrumenter(NettyHeadersGetter.INSTANCE);
|
||||
}
|
||||
|
||||
|
|
|
@ -8,10 +8,10 @@ package io.opentelemetry.instrumentation.netty.v4.common.internal.server;
|
|||
import io.netty.handler.codec.http.HttpResponse;
|
||||
import io.opentelemetry.api.OpenTelemetry;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteHolder;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerAttributesExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerAttributesExtractorBuilder;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerMetrics;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRoute;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanNameExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanStatusExtractor;
|
||||
import io.opentelemetry.instrumentation.netty.common.internal.NettyErrorHolder;
|
||||
|
@ -42,7 +42,7 @@ public final class NettyServerInstrumenterFactory {
|
|||
.addAttributesExtractor(extractorBuilder.build())
|
||||
.addOperationMetrics(HttpServerMetrics.get())
|
||||
.addContextCustomizer((context, request, attributes) -> NettyErrorHolder.init(context))
|
||||
.addContextCustomizer(HttpRouteHolder.create(httpAttributesGetter))
|
||||
.addContextCustomizer(HttpServerRoute.create(httpAttributesGetter))
|
||||
.buildServerInstrumenter(HttpRequestHeadersGetter.INSTANCE);
|
||||
}
|
||||
|
||||
|
|
|
@ -11,7 +11,7 @@ import io.opentelemetry.api.GlobalOpenTelemetry;
|
|||
import io.opentelemetry.context.Context;
|
||||
import io.opentelemetry.context.Scope;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpClientResend;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpClientResendCount;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.net.PeerServiceAttributesExtractor;
|
||||
import io.opentelemetry.instrumentation.okhttp.v3_0.internal.ConnectionErrorSpanInterceptor;
|
||||
import io.opentelemetry.instrumentation.okhttp.v3_0.internal.OkHttpAttributesGetter;
|
||||
|
@ -40,7 +40,7 @@ public final class OkHttp3Singletons {
|
|||
|
||||
public static final Interceptor CONTEXT_INTERCEPTOR =
|
||||
chain -> {
|
||||
try (Scope ignored = HttpClientResend.initialize(Context.current()).makeCurrent()) {
|
||||
try (Scope ignored = HttpClientResendCount.initialize(Context.current()).makeCurrent()) {
|
||||
return chain.proceed(chain.request());
|
||||
}
|
||||
};
|
||||
|
|
|
@ -7,7 +7,7 @@ package io.opentelemetry.instrumentation.okhttp.v3_0;
|
|||
|
||||
import io.opentelemetry.context.Context;
|
||||
import io.opentelemetry.context.Scope;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpClientResend;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpClientResendCount;
|
||||
import java.io.IOException;
|
||||
import okhttp3.Interceptor;
|
||||
import okhttp3.Request;
|
||||
|
@ -23,7 +23,7 @@ final class ContextInterceptor implements Interceptor {
|
|||
parentContext = Context.current();
|
||||
}
|
||||
// include the resend counter
|
||||
Context context = HttpClientResend.initialize(parentContext);
|
||||
Context context = HttpClientResendCount.initialize(parentContext);
|
||||
try (Scope ignored = context.makeCurrent()) {
|
||||
return chain.proceed(request);
|
||||
}
|
||||
|
|
|
@ -7,7 +7,7 @@ package io.opentelemetry.instrumentation.okhttp.v3_0.internal;
|
|||
|
||||
import io.opentelemetry.context.Context;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpClientResend;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpClientResendCount;
|
||||
import io.opentelemetry.instrumentation.api.internal.InstrumenterUtil;
|
||||
import java.io.IOException;
|
||||
import java.time.Instant;
|
||||
|
@ -42,7 +42,7 @@ public final class ConnectionErrorSpanInterceptor implements Interceptor {
|
|||
throw t;
|
||||
} finally {
|
||||
// only create a span when there wasn't any HTTP request
|
||||
if (HttpClientResend.get(parentContext) == 0) {
|
||||
if (HttpClientResendCount.get(parentContext) == 0) {
|
||||
if (instrumenter.shouldStart(parentContext, request)) {
|
||||
InstrumenterUtil.startAndEnd(
|
||||
instrumenter, parentContext, request, response, error, startTime, Instant.now());
|
||||
|
|
|
@ -12,8 +12,8 @@ import io.opentelemetry.api.trace.Span;
|
|||
import io.opentelemetry.api.trace.SpanKind;
|
||||
import io.opentelemetry.context.Context;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.LocalRootSpan;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteHolder;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteSource;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRoute;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRouteSource;
|
||||
import io.opentelemetry.instrumentation.api.internal.SpanKey;
|
||||
import io.opentelemetry.instrumentation.testing.junit.AgentInstrumentationExtension;
|
||||
import io.opentelemetry.instrumentation.testing.junit.InstrumentationExtension;
|
||||
|
@ -80,8 +80,8 @@ class ContextBridgeTest {
|
|||
AgentSpanTesting.runWithHttpServerSpan(
|
||||
"server",
|
||||
() ->
|
||||
HttpRouteHolder.updateHttpRoute(
|
||||
Context.current(), HttpRouteSource.SERVLET, "/test/controller/:id"));
|
||||
HttpServerRoute.update(
|
||||
Context.current(), HttpServerRouteSource.SERVER, "/test/controller/:id"));
|
||||
|
||||
testing.waitAndAssertTraces(
|
||||
trace ->
|
||||
|
@ -100,8 +100,8 @@ class ContextBridgeTest {
|
|||
AgentSpanTesting.runWithHttpServerSpan(
|
||||
"server",
|
||||
() ->
|
||||
HttpRouteHolder.updateHttpRoute(
|
||||
Context.current(), HttpRouteSource.CONTROLLER, "/test/controller/:id"));
|
||||
HttpServerRoute.update(
|
||||
Context.current(), HttpServerRouteSource.CONTROLLER, "/test/controller/:id"));
|
||||
|
||||
testing.waitAndAssertTraces(
|
||||
trace ->
|
||||
|
|
|
@ -11,9 +11,9 @@ import io.opentelemetry.context.Context;
|
|||
import io.opentelemetry.context.ContextKey;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.SpanKindExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteHolder;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteSource;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerAttributesExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRoute;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRouteSource;
|
||||
import io.opentelemetry.instrumentation.api.internal.SpanKey;
|
||||
|
||||
public final class AgentSpanTestingInstrumenter {
|
||||
|
@ -31,14 +31,14 @@ public final class AgentSpanTestingInstrumenter {
|
|||
Instrumenter.<String, Void>builder(GlobalOpenTelemetry.get(), "test", request -> request)
|
||||
.addAttributesExtractor(
|
||||
HttpServerAttributesExtractor.create(MockHttpServerAttributesGetter.INSTANCE))
|
||||
.addContextCustomizer(HttpRouteHolder.create(MockHttpServerAttributesGetter.INSTANCE))
|
||||
.addContextCustomizer(HttpServerRoute.create(MockHttpServerAttributesGetter.INSTANCE))
|
||||
.addContextCustomizer(
|
||||
(context, request, startAttributes) -> context.with(REQUEST_CONTEXT_KEY, request))
|
||||
.buildInstrumenter(SpanKindExtractor.alwaysServer());
|
||||
|
||||
public static Context startHttpServerSpan(String name) {
|
||||
Context context = HTTP_SERVER_INSTRUMENTER.start(Context.current(), name);
|
||||
HttpRouteHolder.updateHttpRoute(context, HttpRouteSource.SERVLET, "/test/server/*");
|
||||
HttpServerRoute.update(context, HttpServerRouteSource.SERVER, "/test/server/*");
|
||||
return context;
|
||||
}
|
||||
|
||||
|
|
|
@ -9,8 +9,8 @@ import io.opentelemetry.api.GlobalOpenTelemetry;
|
|||
import io.opentelemetry.api.trace.Span;
|
||||
import io.opentelemetry.context.Context;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteHolder;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteSource;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRoute;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRouteSource;
|
||||
import play.api.mvc.Request;
|
||||
import scala.Option;
|
||||
|
||||
|
@ -33,7 +33,7 @@ public final class Play24Singletons {
|
|||
}
|
||||
|
||||
Span.fromContext(context).updateName(route);
|
||||
HttpRouteHolder.updateHttpRoute(context, HttpRouteSource.CONTROLLER, route);
|
||||
HttpServerRoute.update(context, HttpServerRouteSource.CONTROLLER, route);
|
||||
}
|
||||
|
||||
private static String getRoute(Request<?> request) {
|
||||
|
|
|
@ -9,8 +9,8 @@ import io.opentelemetry.api.GlobalOpenTelemetry;
|
|||
import io.opentelemetry.api.trace.Span;
|
||||
import io.opentelemetry.context.Context;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteHolder;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteSource;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRoute;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRouteSource;
|
||||
import java.lang.reflect.InvocationTargetException;
|
||||
import java.lang.reflect.Method;
|
||||
import javax.annotation.Nullable;
|
||||
|
@ -60,7 +60,7 @@ public final class Play26Singletons {
|
|||
}
|
||||
|
||||
Span.fromContext(context).updateName(route);
|
||||
HttpRouteHolder.updateHttpRoute(context, HttpRouteSource.CONTROLLER, route);
|
||||
HttpServerRoute.update(context, HttpServerRouteSource.CONTROLLER, route);
|
||||
}
|
||||
|
||||
private static String getRoute(Request<?> request) {
|
||||
|
|
|
@ -5,7 +5,6 @@
|
|||
|
||||
package io.opentelemetry.javaagent.instrumentation.quarkus.resteasy.reactive;
|
||||
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteSource;
|
||||
import org.jboss.resteasy.reactive.server.core.ResteasyReactiveRequestContext;
|
||||
|
||||
public final class OtelRequestContext {
|
||||
|
@ -15,8 +14,7 @@ public final class OtelRequestContext {
|
|||
public static OtelRequestContext start(ResteasyReactiveRequestContext requestContext) {
|
||||
OtelRequestContext context = new OtelRequestContext();
|
||||
contextThreadLocal.set(context);
|
||||
ResteasyReactiveSpanName.INSTANCE.updateServerSpanName(
|
||||
requestContext, HttpRouteSource.NESTED_CONTROLLER);
|
||||
ResteasyReactiveSpanName.INSTANCE.updateServerSpanName(requestContext);
|
||||
return context;
|
||||
}
|
||||
|
||||
|
@ -31,8 +29,7 @@ public final class OtelRequestContext {
|
|||
context.firstInvoke = false;
|
||||
return;
|
||||
}
|
||||
ResteasyReactiveSpanName.INSTANCE.updateServerSpanName(
|
||||
requestContext, HttpRouteSource.NESTED_CONTROLLER);
|
||||
ResteasyReactiveSpanName.INSTANCE.updateServerSpanName(requestContext);
|
||||
}
|
||||
|
||||
public void close() {
|
||||
|
|
|
@ -8,8 +8,8 @@ package io.opentelemetry.javaagent.instrumentation.quarkus.resteasy.reactive;
|
|||
import static io.opentelemetry.javaagent.instrumentation.jaxrs.JaxrsPathUtil.normalizePath;
|
||||
|
||||
import io.opentelemetry.context.Context;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteHolder;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteSource;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRoute;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRouteSource;
|
||||
import io.opentelemetry.instrumentation.api.util.VirtualField;
|
||||
import org.jboss.resteasy.reactive.server.core.ResteasyReactiveRequestContext;
|
||||
import org.jboss.resteasy.reactive.server.mapping.RuntimeResource;
|
||||
|
@ -22,10 +22,10 @@ final class ResteasyReactiveSpanName {
|
|||
|
||||
public static final ResteasyReactiveSpanName INSTANCE = new ResteasyReactiveSpanName();
|
||||
|
||||
void updateServerSpanName(ResteasyReactiveRequestContext requestContext, HttpRouteSource source) {
|
||||
void updateServerSpanName(ResteasyReactiveRequestContext requestContext) {
|
||||
Context context = Context.current();
|
||||
String jaxRsName = calculateJaxRsName(requestContext);
|
||||
HttpRouteHolder.updateHttpRoute(context, source, jaxRsName);
|
||||
HttpServerRoute.update(context, HttpServerRouteSource.NESTED_CONTROLLER, jaxRsName);
|
||||
pathField.set(requestContext, jaxRsName);
|
||||
}
|
||||
|
||||
|
|
|
@ -10,8 +10,8 @@ import io.opentelemetry.api.trace.Span;
|
|||
import io.opentelemetry.api.trace.StatusCode;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.ErrorCauseExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteHolder;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteSource;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRoute;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRouteSource;
|
||||
import ratpack.handling.Context;
|
||||
|
||||
public final class RatpackSingletons {
|
||||
|
@ -41,8 +41,8 @@ public final class RatpackSingletons {
|
|||
}
|
||||
|
||||
// update the netty server span name; FILTER is probably the best match for ratpack Handlers
|
||||
HttpRouteHolder.updateHttpRoute(
|
||||
otelContext, HttpRouteSource.FILTER, (context, name) -> name, matchedRoute);
|
||||
HttpServerRoute.update(
|
||||
otelContext, HttpServerRouteSource.SERVER_FILTER, (context, name) -> name, matchedRoute);
|
||||
return matchedRoute;
|
||||
}
|
||||
|
||||
|
|
|
@ -5,11 +5,11 @@
|
|||
|
||||
package io.opentelemetry.instrumentation.ratpack.v1_7;
|
||||
|
||||
import static io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteSource.CONTROLLER;
|
||||
import static io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRouteSource.CONTROLLER;
|
||||
|
||||
import io.opentelemetry.context.Scope;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteHolder;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRoute;
|
||||
import ratpack.error.ServerErrorHandler;
|
||||
import ratpack.handling.Context;
|
||||
import ratpack.handling.Handler;
|
||||
|
@ -39,7 +39,7 @@ public final class OpenTelemetryServerHandler implements Handler {
|
|||
context.onClose(
|
||||
outcome -> {
|
||||
// Route not available in beginning of request so handle it manually here.
|
||||
HttpRouteHolder.updateHttpRoute(
|
||||
HttpServerRoute.update(
|
||||
otelCtx, CONTROLLER, OpenTelemetryServerHandler::getRoute, context);
|
||||
|
||||
Throwable error =
|
||||
|
|
|
@ -11,10 +11,10 @@ import io.opentelemetry.instrumentation.api.instrumenter.AttributesExtractor;
|
|||
import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpClientAttributesExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpClientAttributesExtractorBuilder;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteHolder;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerAttributesExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerAttributesExtractorBuilder;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerMetrics;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRoute;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanNameExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanStatusExtractor;
|
||||
import java.util.ArrayList;
|
||||
|
@ -142,7 +142,7 @@ public final class RatpackTelemetryBuilder {
|
|||
.addAttributesExtractor(httpServerAttributesExtractorBuilder.build())
|
||||
.addAttributesExtractors(additionalExtractors)
|
||||
.addOperationMetrics(HttpServerMetrics.get())
|
||||
.addContextCustomizer(HttpRouteHolder.create(httpAttributes))
|
||||
.addContextCustomizer(HttpServerRoute.create(httpAttributes))
|
||||
.buildServerInstrumenter(RatpackGetter.INSTANCE);
|
||||
|
||||
return new RatpackTelemetry(instrumenter, httpClientInstrumenter());
|
||||
|
|
|
@ -8,7 +8,7 @@ package io.opentelemetry.javaagent.instrumentation.reactornetty.v1_0;
|
|||
import static io.opentelemetry.javaagent.instrumentation.reactornetty.v1_0.ReactorContextKeys.CONTEXTS_HOLDER_KEY;
|
||||
|
||||
import io.opentelemetry.context.Context;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpClientResend;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpClientResendCount;
|
||||
import io.opentelemetry.instrumentation.netty.v4_1.NettyClientTelemetry;
|
||||
import java.util.function.BiConsumer;
|
||||
import java.util.function.Function;
|
||||
|
@ -118,7 +118,7 @@ public final class HttpResponseReceiverInstrumenter {
|
|||
public void accept(HttpClientRequest request, Throwable error) {
|
||||
instrumentationContexts.endClientSpan(null, error);
|
||||
|
||||
if (HttpClientResend.get(instrumentationContexts.getParentContext()) == 0) {
|
||||
if (HttpClientResendCount.get(instrumentationContexts.getParentContext()) == 0) {
|
||||
// request is an instance of FailedHttpClientRequest, which does not implement a correct
|
||||
// resourceUrl() method -- we have to work around that
|
||||
request = FailedRequestWithUrlMaker.create(config, request);
|
||||
|
|
|
@ -8,7 +8,7 @@ package io.opentelemetry.javaagent.instrumentation.reactornetty.v1_0;
|
|||
import static io.opentelemetry.javaagent.instrumentation.reactornetty.v1_0.ReactorNettySingletons.instrumenter;
|
||||
|
||||
import io.opentelemetry.context.Context;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpClientResend;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpClientResendCount;
|
||||
import io.opentelemetry.instrumentation.api.internal.InstrumenterUtil;
|
||||
import io.opentelemetry.instrumentation.api.internal.Timer;
|
||||
import java.util.Queue;
|
||||
|
@ -27,7 +27,7 @@ final class InstrumentationContexts {
|
|||
private final Queue<RequestAndContext> clientContexts = new LinkedBlockingQueue<>();
|
||||
|
||||
void initialize(Context parentContext) {
|
||||
this.parentContext = HttpClientResend.initialize(parentContext);
|
||||
this.parentContext = HttpClientResendCount.initialize(parentContext);
|
||||
timer = Timer.start();
|
||||
}
|
||||
|
||||
|
|
|
@ -7,7 +7,7 @@ package io.opentelemetry.javaagent.instrumentation.restlet.v1_1;
|
|||
|
||||
import io.opentelemetry.api.GlobalOpenTelemetry;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteGetter;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRouteGetter;
|
||||
import io.opentelemetry.instrumentation.restlet.v1_1.RestletTelemetry;
|
||||
import io.opentelemetry.javaagent.bootstrap.internal.CommonConfig;
|
||||
import io.opentelemetry.javaagent.bootstrap.servlet.ServletContextPath;
|
||||
|
@ -28,7 +28,7 @@ public final class RestletSingletons {
|
|||
return INSTRUMENTER;
|
||||
}
|
||||
|
||||
public static HttpRouteGetter<String> serverSpanName() {
|
||||
public static HttpServerRouteGetter<String> serverSpanName() {
|
||||
return ServletContextPath::prepend;
|
||||
}
|
||||
|
||||
|
|
|
@ -5,14 +5,14 @@
|
|||
|
||||
package io.opentelemetry.javaagent.instrumentation.restlet.v1_1;
|
||||
|
||||
import static io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteSource.CONTROLLER;
|
||||
import static io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRouteSource.CONTROLLER;
|
||||
import static io.opentelemetry.javaagent.bootstrap.Java8BytecodeBridge.currentContext;
|
||||
import static io.opentelemetry.javaagent.instrumentation.restlet.v1_1.RestletSingletons.serverSpanName;
|
||||
import static net.bytebuddy.matcher.ElementMatchers.isMethod;
|
||||
import static net.bytebuddy.matcher.ElementMatchers.named;
|
||||
import static net.bytebuddy.matcher.ElementMatchers.takesArgument;
|
||||
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteHolder;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRoute;
|
||||
import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation;
|
||||
import io.opentelemetry.javaagent.extension.instrumentation.TypeTransformer;
|
||||
import net.bytebuddy.asm.Advice;
|
||||
|
@ -44,7 +44,7 @@ public class RouteInstrumentation implements TypeInstrumentation {
|
|||
public static void getRouteInfo(@Advice.This Route route, @Advice.Argument(0) Request request) {
|
||||
String pattern = route.getTemplate().getPattern();
|
||||
|
||||
HttpRouteHolder.updateHttpRoute(currentContext(), CONTROLLER, serverSpanName(), pattern);
|
||||
HttpServerRoute.update(currentContext(), CONTROLLER, serverSpanName(), pattern);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
|
||||
package io.opentelemetry.javaagent.instrumentation.restlet.v1_1;
|
||||
|
||||
import static io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteSource.CONTROLLER;
|
||||
import static io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRouteSource.CONTROLLER;
|
||||
import static io.opentelemetry.javaagent.bootstrap.Java8BytecodeBridge.currentContext;
|
||||
import static io.opentelemetry.javaagent.instrumentation.restlet.v1_1.RestletSingletons.instrumenter;
|
||||
import static io.opentelemetry.javaagent.instrumentation.restlet.v1_1.RestletSingletons.serverSpanName;
|
||||
|
@ -15,7 +15,7 @@ import static net.bytebuddy.matcher.ElementMatchers.takesArgument;
|
|||
|
||||
import io.opentelemetry.context.Context;
|
||||
import io.opentelemetry.context.Scope;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteHolder;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRoute;
|
||||
import io.opentelemetry.javaagent.bootstrap.http.HttpServerResponseCustomizerHolder;
|
||||
import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation;
|
||||
import io.opentelemetry.javaagent.extension.instrumentation.TypeTransformer;
|
||||
|
@ -77,7 +77,7 @@ public class ServerInstrumentation implements TypeInstrumentation {
|
|||
scope.close();
|
||||
|
||||
if (Status.CLIENT_ERROR_NOT_FOUND.equals(response.getStatus())) {
|
||||
HttpRouteHolder.updateHttpRoute(context, CONTROLLER, serverSpanName(), "/*");
|
||||
HttpServerRoute.update(context, CONTROLLER, serverSpanName(), "/*");
|
||||
}
|
||||
|
||||
HttpServerResponseCustomizerHolder.getCustomizer()
|
||||
|
|
|
@ -9,10 +9,10 @@ import com.google.errorprone.annotations.CanIgnoreReturnValue;
|
|||
import io.opentelemetry.api.OpenTelemetry;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.AttributesExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteHolder;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerAttributesExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerAttributesExtractorBuilder;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerMetrics;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRoute;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanNameExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanStatusExtractor;
|
||||
import java.util.ArrayList;
|
||||
|
@ -105,7 +105,7 @@ public final class RestletTelemetryBuilder {
|
|||
.addAttributesExtractor(httpAttributesExtractorBuilder.build())
|
||||
.addAttributesExtractors(additionalExtractors)
|
||||
.addOperationMetrics(HttpServerMetrics.get())
|
||||
.addContextCustomizer(HttpRouteHolder.create(httpAttributesGetter))
|
||||
.addContextCustomizer(HttpServerRoute.create(httpAttributesGetter))
|
||||
.buildServerInstrumenter(RestletHeadersGetter.INSTANCE);
|
||||
|
||||
return new RestletTelemetry(instrumenter);
|
||||
|
|
|
@ -5,12 +5,12 @@
|
|||
|
||||
package io.opentelemetry.instrumentation.restlet.v1_1;
|
||||
|
||||
import static io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteSource.CONTROLLER;
|
||||
import static io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRouteSource.CONTROLLER;
|
||||
|
||||
import io.opentelemetry.context.Context;
|
||||
import io.opentelemetry.context.Scope;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteHolder;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRoute;
|
||||
import org.restlet.Filter;
|
||||
import org.restlet.data.Request;
|
||||
import org.restlet.data.Response;
|
||||
|
@ -38,7 +38,7 @@ final class TracingFilter extends Filter {
|
|||
scope = context.makeCurrent();
|
||||
}
|
||||
|
||||
HttpRouteHolder.updateHttpRoute(context, CONTROLLER, (ctx, s) -> s, path);
|
||||
HttpServerRoute.update(context, CONTROLLER, (ctx, s) -> s, path);
|
||||
|
||||
Throwable statusThrowable = null;
|
||||
try {
|
||||
|
|
|
@ -7,8 +7,8 @@ package io.opentelemetry.javaagent.instrumentation.restlet.v2_0;
|
|||
|
||||
import io.opentelemetry.api.GlobalOpenTelemetry;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteGetter;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerAttributesExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRouteGetter;
|
||||
import io.opentelemetry.instrumentation.restlet.v2_0.internal.RestletHttpAttributesGetter;
|
||||
import io.opentelemetry.instrumentation.restlet.v2_0.internal.RestletInstrumenterFactory;
|
||||
import io.opentelemetry.javaagent.bootstrap.internal.CommonConfig;
|
||||
|
@ -33,7 +33,7 @@ public final class RestletSingletons {
|
|||
return INSTRUMENTER;
|
||||
}
|
||||
|
||||
public static HttpRouteGetter<String> serverSpanName() {
|
||||
public static HttpServerRouteGetter<String> serverSpanName() {
|
||||
return ServletContextPath::prepend;
|
||||
}
|
||||
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
|
||||
package io.opentelemetry.javaagent.instrumentation.restlet.v2_0;
|
||||
|
||||
import static io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteSource.CONTROLLER;
|
||||
import static io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRouteSource.CONTROLLER;
|
||||
import static io.opentelemetry.javaagent.bootstrap.Java8BytecodeBridge.currentContext;
|
||||
import static io.opentelemetry.javaagent.instrumentation.restlet.v2_0.RestletSingletons.serverSpanName;
|
||||
import static net.bytebuddy.matcher.ElementMatchers.isMethod;
|
||||
|
@ -13,7 +13,7 @@ import static net.bytebuddy.matcher.ElementMatchers.named;
|
|||
import static net.bytebuddy.matcher.ElementMatchers.namedOneOf;
|
||||
import static net.bytebuddy.matcher.ElementMatchers.takesArgument;
|
||||
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteHolder;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRoute;
|
||||
import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation;
|
||||
import io.opentelemetry.javaagent.extension.instrumentation.TypeTransformer;
|
||||
import net.bytebuddy.asm.Advice;
|
||||
|
@ -46,7 +46,7 @@ public class RouteInstrumentation implements TypeInstrumentation {
|
|||
@Advice.This TemplateRoute route, @Advice.Argument(0) Request request) {
|
||||
String pattern = route.getTemplate().getPattern();
|
||||
|
||||
HttpRouteHolder.updateHttpRoute(currentContext(), CONTROLLER, serverSpanName(), pattern);
|
||||
HttpServerRoute.update(currentContext(), CONTROLLER, serverSpanName(), pattern);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
|
||||
package io.opentelemetry.javaagent.instrumentation.restlet.v2_0;
|
||||
|
||||
import static io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteSource.CONTROLLER;
|
||||
import static io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRouteSource.CONTROLLER;
|
||||
import static io.opentelemetry.javaagent.bootstrap.Java8BytecodeBridge.currentContext;
|
||||
import static io.opentelemetry.javaagent.instrumentation.restlet.v2_0.RestletSingletons.instrumenter;
|
||||
import static io.opentelemetry.javaagent.instrumentation.restlet.v2_0.RestletSingletons.serverSpanName;
|
||||
|
@ -15,7 +15,7 @@ import static net.bytebuddy.matcher.ElementMatchers.takesArgument;
|
|||
|
||||
import io.opentelemetry.context.Context;
|
||||
import io.opentelemetry.context.Scope;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteHolder;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRoute;
|
||||
import io.opentelemetry.javaagent.bootstrap.http.HttpServerResponseCustomizerHolder;
|
||||
import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation;
|
||||
import io.opentelemetry.javaagent.extension.instrumentation.TypeTransformer;
|
||||
|
@ -77,7 +77,7 @@ public class ServerInstrumentation implements TypeInstrumentation {
|
|||
scope.close();
|
||||
|
||||
if (Status.CLIENT_ERROR_NOT_FOUND.equals(response.getStatus())) {
|
||||
HttpRouteHolder.updateHttpRoute(context, CONTROLLER, serverSpanName(), "/*");
|
||||
HttpServerRoute.update(context, CONTROLLER, serverSpanName(), "/*");
|
||||
}
|
||||
|
||||
HttpServerResponseCustomizerHolder.getCustomizer()
|
||||
|
|
|
@ -5,12 +5,12 @@
|
|||
|
||||
package io.opentelemetry.instrumentation.restlet.v2_0;
|
||||
|
||||
import static io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteSource.CONTROLLER;
|
||||
import static io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRouteSource.CONTROLLER;
|
||||
|
||||
import io.opentelemetry.context.Context;
|
||||
import io.opentelemetry.context.Scope;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteHolder;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRoute;
|
||||
import org.restlet.Request;
|
||||
import org.restlet.Response;
|
||||
import org.restlet.resource.ResourceException;
|
||||
|
@ -39,7 +39,7 @@ final class TracingFilter extends Filter {
|
|||
scope = context.makeCurrent();
|
||||
}
|
||||
|
||||
HttpRouteHolder.updateHttpRoute(context, CONTROLLER, (ctx, s) -> s, path);
|
||||
HttpServerRoute.update(context, CONTROLLER, (ctx, s) -> s, path);
|
||||
|
||||
Throwable statusThrowable = null;
|
||||
try {
|
||||
|
|
|
@ -8,8 +8,8 @@ package io.opentelemetry.instrumentation.restlet.v2_0.internal;
|
|||
import io.opentelemetry.api.OpenTelemetry;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.AttributesExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteHolder;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerMetrics;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRoute;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanNameExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanStatusExtractor;
|
||||
import java.util.List;
|
||||
|
@ -37,7 +37,7 @@ public final class RestletInstrumenterFactory {
|
|||
.addAttributesExtractor(httpServerAttributesExtractor)
|
||||
.addAttributesExtractors(additionalExtractors)
|
||||
.addOperationMetrics(HttpServerMetrics.get())
|
||||
.addContextCustomizer(HttpRouteHolder.create(httpAttributesGetter))
|
||||
.addContextCustomizer(HttpServerRoute.create(httpAttributesGetter))
|
||||
.buildServerInstrumenter(new RestletHeadersGetter());
|
||||
}
|
||||
|
||||
|
|
|
@ -5,15 +5,15 @@
|
|||
|
||||
package io.opentelemetry.javaagent.instrumentation.servlet;
|
||||
|
||||
import static io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteSource.FILTER;
|
||||
import static io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteSource.SERVLET;
|
||||
import static io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRouteSource.SERVER;
|
||||
import static io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRouteSource.SERVER_FILTER;
|
||||
|
||||
import io.opentelemetry.api.trace.Span;
|
||||
import io.opentelemetry.api.trace.SpanContext;
|
||||
import io.opentelemetry.context.Context;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.LocalRootSpan;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteHolder;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRoute;
|
||||
import io.opentelemetry.javaagent.bootstrap.servlet.AppServerBridge;
|
||||
import io.opentelemetry.javaagent.bootstrap.servlet.MappingResolver;
|
||||
import io.opentelemetry.javaagent.bootstrap.servlet.ServletContextPath;
|
||||
|
@ -86,8 +86,8 @@ public abstract class BaseServletHelper<REQUEST, RESPONSE> {
|
|||
Context context, REQUEST request, MappingResolver mappingResolver, boolean servlet) {
|
||||
Context result = addServletContextPath(context, request);
|
||||
if (mappingResolver != null) {
|
||||
HttpRouteHolder.updateHttpRoute(
|
||||
result, servlet ? SERVLET : FILTER, spanNameProvider, mappingResolver, request);
|
||||
HttpServerRoute.update(
|
||||
result, servlet ? SERVER : SERVER_FILTER, spanNameProvider, mappingResolver, request);
|
||||
}
|
||||
|
||||
return result;
|
||||
|
|
|
@ -12,10 +12,10 @@ import io.opentelemetry.instrumentation.api.instrumenter.ContextCustomizer;
|
|||
import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.InstrumenterBuilder;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.SpanNameExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteHolder;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerAttributesExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerAttributesGetter;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerMetrics;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRoute;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanNameExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanStatusExtractor;
|
||||
import io.opentelemetry.javaagent.bootstrap.internal.CommonConfig;
|
||||
|
@ -65,7 +65,7 @@ public final class ServletInstrumenterBuilder<REQUEST, RESPONSE> {
|
|||
.build())
|
||||
.addAttributesExtractor(additionalAttributesExtractor)
|
||||
.addOperationMetrics(HttpServerMetrics.get())
|
||||
.addContextCustomizer(HttpRouteHolder.create(httpAttributesGetter));
|
||||
.addContextCustomizer(HttpServerRoute.create(httpAttributesGetter));
|
||||
if (ServletRequestParametersExtractor.enabled()) {
|
||||
AttributesExtractor<ServletRequestContext<REQUEST>, ServletResponseContext<RESPONSE>>
|
||||
requestParametersExtractor = new ServletRequestParametersExtractor<>(accessor);
|
||||
|
|
|
@ -6,14 +6,14 @@
|
|||
package io.opentelemetry.javaagent.instrumentation.servlet;
|
||||
|
||||
import io.opentelemetry.context.Context;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteBiGetter;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRouteBiGetter;
|
||||
import io.opentelemetry.javaagent.bootstrap.servlet.MappingResolver;
|
||||
import io.opentelemetry.javaagent.bootstrap.servlet.ServletContextPath;
|
||||
import javax.annotation.Nullable;
|
||||
|
||||
/** Helper class for constructing span name for given servlet/filter mapping and request. */
|
||||
public class ServletSpanNameProvider<REQUEST>
|
||||
implements HttpRouteBiGetter<MappingResolver, REQUEST> {
|
||||
implements HttpServerRouteBiGetter<MappingResolver, REQUEST> {
|
||||
private final ServletAccessor<REQUEST, ?> servletAccessor;
|
||||
|
||||
public ServletSpanNameProvider(ServletAccessor<REQUEST, ?> servletAccessor) {
|
||||
|
|
|
@ -6,8 +6,8 @@
|
|||
package io.opentelemetry.javaagent.instrumentation.sparkjava;
|
||||
|
||||
import io.opentelemetry.context.Context;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteHolder;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteSource;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRoute;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRouteSource;
|
||||
import javax.annotation.Nullable;
|
||||
import spark.routematch.RouteMatch;
|
||||
|
||||
|
@ -16,8 +16,8 @@ public final class SparkRouteUpdater {
|
|||
public static void updateHttpRoute(@Nullable RouteMatch routeMatch) {
|
||||
if (routeMatch != null) {
|
||||
Context context = Context.current();
|
||||
HttpRouteHolder.updateHttpRoute(
|
||||
context, HttpRouteSource.CONTROLLER, (c, r) -> r.getMatchUri(), routeMatch);
|
||||
HttpServerRoute.update(
|
||||
context, HttpServerRouteSource.CONTROLLER, (c, r) -> r.getMatchUri(), routeMatch);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -19,8 +19,8 @@ import static net.bytebuddy.matcher.ElementMatchers.takesArguments;
|
|||
|
||||
import io.opentelemetry.context.Context;
|
||||
import io.opentelemetry.context.Scope;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteHolder;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteSource;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRoute;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRouteSource;
|
||||
import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation;
|
||||
import io.opentelemetry.javaagent.extension.instrumentation.TypeTransformer;
|
||||
import net.bytebuddy.asm.Advice;
|
||||
|
@ -69,8 +69,8 @@ public class HandlerAdapterInstrumentation implements TypeInstrumentation {
|
|||
// using the last portion of the nested path.
|
||||
// HttpRouteSource.NESTED_CONTROLLER has useFirst false, and it will make http.route updated
|
||||
// twice: 1st using the last portion of the nested path, 2nd time using the full nested path.
|
||||
HttpRouteHolder.updateHttpRoute(
|
||||
parentContext, HttpRouteSource.NESTED_CONTROLLER, httpRouteGetter(), exchange);
|
||||
HttpServerRoute.update(
|
||||
parentContext, HttpServerRouteSource.NESTED_CONTROLLER, httpRouteGetter(), exchange);
|
||||
|
||||
if (handler == null) {
|
||||
return;
|
||||
|
|
|
@ -6,8 +6,8 @@
|
|||
package io.opentelemetry.javaagent.instrumentation.spring.webflux.v5_0.server;
|
||||
|
||||
import io.opentelemetry.context.Context;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteHolder;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteSource;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRoute;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRouteSource;
|
||||
import java.util.function.Consumer;
|
||||
import java.util.regex.Pattern;
|
||||
import javax.annotation.Nullable;
|
||||
|
@ -29,7 +29,7 @@ public class RouteOnSuccess implements Consumer<HandlerFunction<?>> {
|
|||
|
||||
@Override
|
||||
public void accept(HandlerFunction<?> handler) {
|
||||
HttpRouteHolder.updateHttpRoute(Context.current(), HttpRouteSource.CONTROLLER, route);
|
||||
HttpServerRoute.update(Context.current(), HttpServerRouteSource.CONTROLLER, route);
|
||||
}
|
||||
|
||||
private static String parsePredicateString(RouterFunction<?> routerFunction) {
|
||||
|
|
|
@ -8,7 +8,7 @@ package io.opentelemetry.javaagent.instrumentation.spring.webflux.v5_0.server;
|
|||
import io.opentelemetry.api.GlobalOpenTelemetry;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.InstrumenterBuilder;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteGetter;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRouteGetter;
|
||||
import io.opentelemetry.javaagent.bootstrap.internal.ExperimentalConfig;
|
||||
import io.opentelemetry.javaagent.instrumentation.spring.webflux.v5_0.SpringWebfluxConfig;
|
||||
import org.springframework.web.reactive.HandlerMapping;
|
||||
|
@ -39,7 +39,7 @@ public final class WebfluxSingletons {
|
|||
return INSTRUMENTER;
|
||||
}
|
||||
|
||||
public static HttpRouteGetter<ServerWebExchange> httpRouteGetter() {
|
||||
public static HttpServerRouteGetter<ServerWebExchange> httpRouteGetter() {
|
||||
return (context, exchange) -> {
|
||||
Object bestPatternObj = exchange.getAttribute(HandlerMapping.BEST_MATCHING_PATTERN_ATTRIBUTE);
|
||||
if (bestPatternObj == null) {
|
||||
|
|
|
@ -11,10 +11,10 @@ import io.opentelemetry.instrumentation.api.instrumenter.AttributesExtractor;
|
|||
import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.SpanNameExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpClientAttributesExtractorBuilder;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteHolder;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerAttributesExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerAttributesExtractorBuilder;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerMetrics;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRoute;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanNameExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanStatusExtractor;
|
||||
import io.opentelemetry.instrumentation.spring.webflux.v5_3.internal.ClientInstrumenterFactory;
|
||||
|
@ -197,7 +197,7 @@ public final class SpringWebfluxTelemetryBuilder {
|
|||
.setSpanStatusExtractor(HttpSpanStatusExtractor.create(serverAttributesGetter))
|
||||
.addAttributesExtractor(httpServerAttributesExtractorBuilder.build())
|
||||
.addAttributesExtractors(serverAdditionalExtractors)
|
||||
.addContextCustomizer(HttpRouteHolder.create(serverAttributesGetter))
|
||||
.addContextCustomizer(HttpServerRoute.create(serverAttributesGetter))
|
||||
.addOperationMetrics(HttpServerMetrics.get())
|
||||
.buildServerInstrumenter(WebfluxTextMapGetter.INSTANCE);
|
||||
|
||||
|
|
|
@ -8,8 +8,8 @@ package io.opentelemetry.instrumentation.spring.webflux.v5_3;
|
|||
import io.opentelemetry.context.Context;
|
||||
import io.opentelemetry.context.Scope;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteHolder;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteSource;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRoute;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRouteSource;
|
||||
import org.reactivestreams.Subscription;
|
||||
import org.springframework.core.Ordered;
|
||||
import org.springframework.http.server.reactive.ServerHttpResponse;
|
||||
|
@ -131,10 +131,11 @@ final class TelemetryProducingWebFilter implements WebFilter, Ordered {
|
|||
private void end(Context currentContext, Throwable t) {
|
||||
// Update HTTP route now, because during instrumenter.start()
|
||||
// the HTTP route isn't available from the exchange attributes, but is afterwards
|
||||
HttpRouteHolder.updateHttpRoute(
|
||||
HttpServerRoute.update(
|
||||
currentContext,
|
||||
HttpRouteSource.CONTROLLER,
|
||||
WebfluxServerHttpAttributesGetter.INSTANCE.getHttpRoute(exchange));
|
||||
HttpServerRouteSource.CONTROLLER,
|
||||
(context, exchange) -> WebfluxServerHttpAttributesGetter.INSTANCE.getHttpRoute(exchange),
|
||||
exchange);
|
||||
instrumenter.end(currentContext, exchange, exchange, t);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
|
||||
package io.opentelemetry.javaagent.instrumentation.spring.webmvc.v3_1;
|
||||
|
||||
import static io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteSource.CONTROLLER;
|
||||
import static io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRouteSource.CONTROLLER;
|
||||
import static io.opentelemetry.javaagent.extension.matcher.AgentElementMatchers.hasClassesNamed;
|
||||
import static io.opentelemetry.javaagent.extension.matcher.AgentElementMatchers.implementsInterface;
|
||||
import static io.opentelemetry.javaagent.instrumentation.spring.webmvc.v3_1.SpringWebMvcSingletons.handlerInstrumenter;
|
||||
|
@ -18,7 +18,7 @@ import static net.bytebuddy.matcher.ElementMatchers.takesArguments;
|
|||
|
||||
import io.opentelemetry.context.Context;
|
||||
import io.opentelemetry.context.Scope;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteHolder;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRoute;
|
||||
import io.opentelemetry.javaagent.bootstrap.Java8BytecodeBridge;
|
||||
import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation;
|
||||
import io.opentelemetry.javaagent.extension.instrumentation.TypeTransformer;
|
||||
|
@ -74,7 +74,7 @@ public class HandlerAdapterInstrumentation implements TypeInstrumentation {
|
|||
}
|
||||
|
||||
// Name the parent span based on the matching pattern
|
||||
HttpRouteHolder.updateHttpRoute(
|
||||
HttpServerRoute.update(
|
||||
parentContext, CONTROLLER, SpringWebMvcServerSpanNaming.SERVER_SPAN_NAME, request);
|
||||
|
||||
if (!handlerInstrumenter().shouldStart(parentContext, handler)) {
|
||||
|
|
|
@ -5,14 +5,14 @@
|
|||
|
||||
package io.opentelemetry.javaagent.instrumentation.spring.webmvc.v3_1;
|
||||
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteGetter;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRouteGetter;
|
||||
import io.opentelemetry.javaagent.bootstrap.servlet.ServletContextPath;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import org.springframework.web.servlet.HandlerMapping;
|
||||
|
||||
public class SpringWebMvcServerSpanNaming {
|
||||
|
||||
public static final HttpRouteGetter<HttpServletRequest> SERVER_SPAN_NAME =
|
||||
public static final HttpServerRouteGetter<HttpServletRequest> SERVER_SPAN_NAME =
|
||||
(context, request) -> {
|
||||
Object bestMatchingPattern =
|
||||
request.getAttribute(HandlerMapping.BEST_MATCHING_PATTERN_ATTRIBUTE);
|
||||
|
|
|
@ -5,11 +5,11 @@
|
|||
|
||||
package org.springframework.web.servlet.v3_1;
|
||||
|
||||
import static io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteSource.CONTROLLER;
|
||||
import static io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRouteSource.CONTROLLER;
|
||||
|
||||
import io.opentelemetry.context.Context;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteGetter;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteHolder;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRoute;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRouteGetter;
|
||||
import io.opentelemetry.javaagent.instrumentation.spring.webmvc.v3_1.SpringWebMvcServerSpanNaming;
|
||||
import java.io.IOException;
|
||||
import java.lang.invoke.MethodHandle;
|
||||
|
@ -37,7 +37,7 @@ public class OpenTelemetryHandlerMappingFilter implements Filter, Ordered {
|
|||
private static final MethodHandle usesPathPatternsMh = getUsesPathPatternsMh();
|
||||
private static final MethodHandle parseAndCacheMh = parseAndCacheMh();
|
||||
|
||||
private final HttpRouteGetter<HttpServletRequest> serverSpanName =
|
||||
private final HttpServerRouteGetter<HttpServletRequest> serverSpanName =
|
||||
(context, request) -> {
|
||||
Object previousValue = null;
|
||||
if (this.parseRequestPath && PATH_ATTRIBUTE != null) {
|
||||
|
@ -84,8 +84,7 @@ public class OpenTelemetryHandlerMappingFilter implements Filter, Ordered {
|
|||
} finally {
|
||||
if (handlerMappings != null) {
|
||||
Context context = Context.current();
|
||||
HttpRouteHolder.updateHttpRoute(
|
||||
context, CONTROLLER, serverSpanName, (HttpServletRequest) request);
|
||||
HttpServerRoute.update(context, CONTROLLER, serverSpanName, (HttpServletRequest) request);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -10,10 +10,10 @@ import io.opentelemetry.api.OpenTelemetry;
|
|||
import io.opentelemetry.instrumentation.api.instrumenter.AttributesExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.SpanNameExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteHolder;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerAttributesExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerAttributesExtractorBuilder;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerMetrics;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRoute;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanNameExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanStatusExtractor;
|
||||
import java.util.ArrayList;
|
||||
|
@ -131,7 +131,7 @@ public final class SpringWebMvcTelemetryBuilder {
|
|||
.addAttributesExtractor(httpAttributesExtractorBuilder.build())
|
||||
.addAttributesExtractors(additionalExtractors)
|
||||
.addOperationMetrics(HttpServerMetrics.get())
|
||||
.addContextCustomizer(HttpRouteHolder.create(httpAttributesGetter))
|
||||
.addContextCustomizer(HttpServerRoute.create(httpAttributesGetter))
|
||||
.buildServerInstrumenter(JavaxHttpServletRequestGetter.INSTANCE);
|
||||
|
||||
return new SpringWebMvcTelemetry(instrumenter);
|
||||
|
|
|
@ -5,13 +5,13 @@
|
|||
|
||||
package io.opentelemetry.instrumentation.spring.webmvc.v5_3;
|
||||
|
||||
import static io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteSource.CONTROLLER;
|
||||
import static io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRouteSource.CONTROLLER;
|
||||
import static java.util.Objects.requireNonNull;
|
||||
|
||||
import io.opentelemetry.context.Context;
|
||||
import io.opentelemetry.context.Scope;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteHolder;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRoute;
|
||||
import java.io.IOException;
|
||||
import javax.servlet.FilterChain;
|
||||
import javax.servlet.ServletException;
|
||||
|
@ -61,8 +61,7 @@ final class WebMvcTelemetryProducingFilter extends OncePerRequestFilter implemen
|
|||
throw t;
|
||||
} finally {
|
||||
if (httpRouteSupport.hasMappings()) {
|
||||
HttpRouteHolder.updateHttpRoute(
|
||||
context, CONTROLLER, httpRouteSupport::getHttpRoute, request);
|
||||
HttpServerRoute.update(context, CONTROLLER, httpRouteSupport::getHttpRoute, request);
|
||||
}
|
||||
instrumenter.end(context, request, response, error);
|
||||
}
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
|
||||
package io.opentelemetry.javaagent.instrumentation.spring.webmvc.v6_0;
|
||||
|
||||
import static io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteSource.CONTROLLER;
|
||||
import static io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRouteSource.CONTROLLER;
|
||||
import static io.opentelemetry.javaagent.extension.matcher.AgentElementMatchers.hasClassesNamed;
|
||||
import static io.opentelemetry.javaagent.extension.matcher.AgentElementMatchers.implementsInterface;
|
||||
import static io.opentelemetry.javaagent.instrumentation.spring.webmvc.v6_0.SpringWebMvcSingletons.handlerInstrumenter;
|
||||
|
@ -18,7 +18,7 @@ import static net.bytebuddy.matcher.ElementMatchers.takesArguments;
|
|||
|
||||
import io.opentelemetry.context.Context;
|
||||
import io.opentelemetry.context.Scope;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteHolder;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRoute;
|
||||
import io.opentelemetry.javaagent.bootstrap.Java8BytecodeBridge;
|
||||
import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation;
|
||||
import io.opentelemetry.javaagent.extension.instrumentation.TypeTransformer;
|
||||
|
@ -74,7 +74,7 @@ public class HandlerAdapterInstrumentation implements TypeInstrumentation {
|
|||
}
|
||||
|
||||
// Name the parent span based on the matching pattern
|
||||
HttpRouteHolder.updateHttpRoute(
|
||||
HttpServerRoute.update(
|
||||
parentContext, CONTROLLER, SpringWebMvcServerSpanNaming.SERVER_SPAN_NAME, request);
|
||||
|
||||
if (!handlerInstrumenter().shouldStart(parentContext, handler)) {
|
||||
|
|
|
@ -5,14 +5,14 @@
|
|||
|
||||
package io.opentelemetry.javaagent.instrumentation.spring.webmvc.v6_0;
|
||||
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteGetter;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRouteGetter;
|
||||
import io.opentelemetry.javaagent.bootstrap.servlet.ServletContextPath;
|
||||
import jakarta.servlet.http.HttpServletRequest;
|
||||
import org.springframework.web.servlet.HandlerMapping;
|
||||
|
||||
public class SpringWebMvcServerSpanNaming {
|
||||
|
||||
public static final HttpRouteGetter<HttpServletRequest> SERVER_SPAN_NAME =
|
||||
public static final HttpServerRouteGetter<HttpServletRequest> SERVER_SPAN_NAME =
|
||||
(context, request) -> {
|
||||
Object bestMatchingPattern =
|
||||
request.getAttribute(HandlerMapping.BEST_MATCHING_PATTERN_ATTRIBUTE);
|
||||
|
|
|
@ -5,11 +5,11 @@
|
|||
|
||||
package org.springframework.web.servlet.v6_0;
|
||||
|
||||
import static io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteSource.CONTROLLER;
|
||||
import static io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRouteSource.CONTROLLER;
|
||||
|
||||
import io.opentelemetry.context.Context;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteGetter;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteHolder;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRoute;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRouteGetter;
|
||||
import io.opentelemetry.javaagent.instrumentation.spring.webmvc.v6_0.SpringWebMvcServerSpanNaming;
|
||||
import jakarta.servlet.Filter;
|
||||
import jakarta.servlet.FilterChain;
|
||||
|
@ -33,7 +33,7 @@ import org.springframework.web.util.ServletRequestPathUtils;
|
|||
|
||||
public class OpenTelemetryHandlerMappingFilter implements Filter, Ordered {
|
||||
|
||||
private final HttpRouteGetter<HttpServletRequest> serverSpanName =
|
||||
private final HttpServerRouteGetter<HttpServletRequest> serverSpanName =
|
||||
(context, request) -> {
|
||||
RequestPath previousValue = null;
|
||||
if (this.parseRequestPath) {
|
||||
|
@ -77,8 +77,7 @@ public class OpenTelemetryHandlerMappingFilter implements Filter, Ordered {
|
|||
} finally {
|
||||
if (handlerMappings != null) {
|
||||
Context context = Context.current();
|
||||
HttpRouteHolder.updateHttpRoute(
|
||||
context, CONTROLLER, serverSpanName, (HttpServletRequest) request);
|
||||
HttpServerRoute.update(context, CONTROLLER, serverSpanName, (HttpServletRequest) request);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -10,10 +10,10 @@ import io.opentelemetry.api.OpenTelemetry;
|
|||
import io.opentelemetry.instrumentation.api.instrumenter.AttributesExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.SpanNameExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteHolder;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerAttributesExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerAttributesExtractorBuilder;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerMetrics;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRoute;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanNameExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanStatusExtractor;
|
||||
import jakarta.servlet.http.HttpServletRequest;
|
||||
|
@ -131,7 +131,7 @@ public final class SpringWebMvcTelemetryBuilder {
|
|||
.addAttributesExtractor(httpAttributesExtractorBuilder.build())
|
||||
.addAttributesExtractors(additionalExtractors)
|
||||
.addOperationMetrics(HttpServerMetrics.get())
|
||||
.addContextCustomizer(HttpRouteHolder.create(httpAttributesGetter))
|
||||
.addContextCustomizer(HttpServerRoute.create(httpAttributesGetter))
|
||||
.buildServerInstrumenter(JakartaHttpServletRequestGetter.INSTANCE);
|
||||
|
||||
return new SpringWebMvcTelemetry(instrumenter);
|
||||
|
|
|
@ -5,13 +5,13 @@
|
|||
|
||||
package io.opentelemetry.instrumentation.spring.webmvc.v6_0;
|
||||
|
||||
import static io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteSource.CONTROLLER;
|
||||
import static io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRouteSource.CONTROLLER;
|
||||
import static java.util.Objects.requireNonNull;
|
||||
|
||||
import io.opentelemetry.context.Context;
|
||||
import io.opentelemetry.context.Scope;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteHolder;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRoute;
|
||||
import jakarta.servlet.FilterChain;
|
||||
import jakarta.servlet.ServletException;
|
||||
import jakarta.servlet.http.HttpServletRequest;
|
||||
|
@ -61,8 +61,7 @@ final class WebMvcTelemetryProducingFilter extends OncePerRequestFilter implemen
|
|||
throw t;
|
||||
} finally {
|
||||
if (httpRouteSupport.hasMappings()) {
|
||||
HttpRouteHolder.updateHttpRoute(
|
||||
context, CONTROLLER, httpRouteSupport::getHttpRoute, request);
|
||||
HttpServerRoute.update(context, CONTROLLER, httpRouteSupport::getHttpRoute, request);
|
||||
}
|
||||
instrumenter.end(context, request, response, error);
|
||||
}
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
|
||||
package io.opentelemetry.javaagent.instrumentation.struts2;
|
||||
|
||||
import static io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteSource.CONTROLLER;
|
||||
import static io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRouteSource.CONTROLLER;
|
||||
import static io.opentelemetry.javaagent.extension.matcher.AgentElementMatchers.hasClassesNamed;
|
||||
import static io.opentelemetry.javaagent.extension.matcher.AgentElementMatchers.implementsInterface;
|
||||
import static io.opentelemetry.javaagent.instrumentation.struts2.StrutsSingletons.instrumenter;
|
||||
|
@ -16,7 +16,7 @@ import static net.bytebuddy.matcher.ElementMatchers.named;
|
|||
import com.opensymphony.xwork2.ActionInvocation;
|
||||
import io.opentelemetry.context.Context;
|
||||
import io.opentelemetry.context.Scope;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteHolder;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRoute;
|
||||
import io.opentelemetry.javaagent.bootstrap.Java8BytecodeBridge;
|
||||
import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation;
|
||||
import io.opentelemetry.javaagent.extension.instrumentation.TypeTransformer;
|
||||
|
@ -53,7 +53,7 @@ public class ActionInvocationInstrumentation implements TypeInstrumentation {
|
|||
@Advice.Local("otelScope") Scope scope) {
|
||||
Context parentContext = Java8BytecodeBridge.currentContext();
|
||||
|
||||
HttpRouteHolder.updateHttpRoute(
|
||||
HttpServerRoute.update(
|
||||
parentContext,
|
||||
CONTROLLER,
|
||||
StrutsServerSpanNaming.SERVER_SPAN_NAME,
|
||||
|
|
|
@ -6,12 +6,12 @@
|
|||
package io.opentelemetry.javaagent.instrumentation.struts2;
|
||||
|
||||
import com.opensymphony.xwork2.ActionProxy;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteGetter;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRouteGetter;
|
||||
import io.opentelemetry.javaagent.bootstrap.servlet.ServletContextPath;
|
||||
|
||||
public class StrutsServerSpanNaming {
|
||||
|
||||
public static final HttpRouteGetter<ActionProxy> SERVER_SPAN_NAME =
|
||||
public static final HttpServerRouteGetter<ActionProxy> SERVER_SPAN_NAME =
|
||||
(context, actionProxy) -> {
|
||||
// We take name from the config, because it contains the path pattern from the
|
||||
// configuration.
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
|
||||
package io.opentelemetry.javaagent.instrumentation.tapestry;
|
||||
|
||||
import static io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteSource.CONTROLLER;
|
||||
import static io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRouteSource.CONTROLLER;
|
||||
import static io.opentelemetry.javaagent.bootstrap.Java8BytecodeBridge.currentContext;
|
||||
import static net.bytebuddy.matcher.ElementMatchers.isMethod;
|
||||
import static net.bytebuddy.matcher.ElementMatchers.isPublic;
|
||||
|
@ -13,7 +13,7 @@ import static net.bytebuddy.matcher.ElementMatchers.named;
|
|||
import static net.bytebuddy.matcher.ElementMatchers.takesArgument;
|
||||
import static net.bytebuddy.matcher.ElementMatchers.takesArguments;
|
||||
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteHolder;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRoute;
|
||||
import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation;
|
||||
import io.opentelemetry.javaagent.extension.instrumentation.TypeTransformer;
|
||||
import net.bytebuddy.asm.Advice;
|
||||
|
@ -58,7 +58,7 @@ public class InitializeActivePageNameInstrumentation implements TypeInstrumentat
|
|||
|
||||
@Advice.OnMethodEnter(suppress = Throwable.class)
|
||||
public static void onEnter(@Advice.Argument(0) ComponentEventRequestParameters parameters) {
|
||||
HttpRouteHolder.updateHttpRoute(
|
||||
HttpServerRoute.update(
|
||||
currentContext(),
|
||||
CONTROLLER,
|
||||
TapestryServerSpanNaming.SERVER_SPAN_NAME,
|
||||
|
@ -71,7 +71,7 @@ public class InitializeActivePageNameInstrumentation implements TypeInstrumentat
|
|||
|
||||
@Advice.OnMethodEnter(suppress = Throwable.class)
|
||||
public static void onEnter(@Advice.Argument(0) PageRenderRequestParameters parameters) {
|
||||
HttpRouteHolder.updateHttpRoute(
|
||||
HttpServerRoute.update(
|
||||
currentContext(),
|
||||
CONTROLLER,
|
||||
TapestryServerSpanNaming.SERVER_SPAN_NAME,
|
||||
|
|
|
@ -5,12 +5,12 @@
|
|||
|
||||
package io.opentelemetry.javaagent.instrumentation.tapestry;
|
||||
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteGetter;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRouteGetter;
|
||||
import io.opentelemetry.javaagent.bootstrap.servlet.ServletContextPath;
|
||||
|
||||
public class TapestryServerSpanNaming {
|
||||
|
||||
public static final HttpRouteGetter<String> SERVER_SPAN_NAME =
|
||||
public static final HttpServerRouteGetter<String> SERVER_SPAN_NAME =
|
||||
(context, pageName) -> {
|
||||
if (pageName == null) {
|
||||
return null;
|
||||
|
|
|
@ -7,9 +7,9 @@ package io.opentelemetry.javaagent.instrumentation.tomcat.common;
|
|||
|
||||
import io.opentelemetry.api.GlobalOpenTelemetry;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteHolder;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerAttributesExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerMetrics;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRoute;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanNameExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanStatusExtractor;
|
||||
import io.opentelemetry.javaagent.bootstrap.internal.CommonConfig;
|
||||
|
@ -39,7 +39,7 @@ public final class TomcatInstrumenterFactory {
|
|||
.setCapturedResponseHeaders(CommonConfig.get().getServerResponseHeaders())
|
||||
.setKnownMethods(CommonConfig.get().getKnownHttpRequestMethods())
|
||||
.build())
|
||||
.addContextCustomizer(HttpRouteHolder.create(httpAttributesGetter))
|
||||
.addContextCustomizer(HttpServerRoute.create(httpAttributesGetter))
|
||||
.addContextCustomizer(
|
||||
(context, request, attributes) ->
|
||||
new AppServerBridge.Builder()
|
||||
|
|
|
@ -7,9 +7,9 @@ package io.opentelemetry.javaagent.instrumentation.undertow;
|
|||
|
||||
import io.opentelemetry.api.GlobalOpenTelemetry;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteHolder;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerAttributesExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerMetrics;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRoute;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanNameExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanStatusExtractor;
|
||||
import io.opentelemetry.javaagent.bootstrap.internal.CommonConfig;
|
||||
|
@ -37,7 +37,7 @@ public final class UndertowSingletons {
|
|||
.setCapturedResponseHeaders(CommonConfig.get().getServerResponseHeaders())
|
||||
.setKnownMethods(CommonConfig.get().getKnownHttpRequestMethods())
|
||||
.build())
|
||||
.addContextCustomizer(HttpRouteHolder.create(httpAttributesGetter))
|
||||
.addContextCustomizer(HttpServerRoute.create(httpAttributesGetter))
|
||||
.addContextCustomizer(
|
||||
(context, request, attributes) -> {
|
||||
// span is ended when counter reaches 0, we start from 2 which accounts for the
|
||||
|
|
|
@ -12,8 +12,8 @@ import com.vaadin.flow.component.UI;
|
|||
import com.vaadin.flow.router.Location;
|
||||
import io.opentelemetry.context.Context;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteHolder;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteSource;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRoute;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRouteSource;
|
||||
import io.opentelemetry.javaagent.bootstrap.servlet.ServletContextPath;
|
||||
import javax.annotation.Nullable;
|
||||
|
||||
|
@ -42,10 +42,10 @@ public class VaadinHelper {
|
|||
Context context, VaadinServiceRequest request, Throwable throwable) {
|
||||
serviceInstrumenter.end(context, request, null, throwable);
|
||||
|
||||
HttpRouteHolder.updateHttpRoute(
|
||||
HttpServerRoute.update(
|
||||
context,
|
||||
HttpRouteSource.CONTROLLER,
|
||||
(c, req) -> getSpanNameForVaadinServiceContext(c, req),
|
||||
HttpServerRouteSource.CONTROLLER,
|
||||
VaadinHelper::getSpanNameForVaadinServiceContext,
|
||||
request);
|
||||
}
|
||||
|
||||
|
@ -107,9 +107,9 @@ public class VaadinHelper {
|
|||
|
||||
public void updateServerSpanName(Location location) {
|
||||
Context context = Context.current();
|
||||
HttpRouteHolder.updateHttpRoute(
|
||||
HttpServerRoute.update(
|
||||
context,
|
||||
HttpRouteSource.NESTED_CONTROLLER,
|
||||
HttpServerRouteSource.NESTED_CONTROLLER,
|
||||
(c, loc) -> ServletContextPath.prepend(c, getSpanNameForLocation(loc)),
|
||||
location);
|
||||
}
|
||||
|
|
|
@ -8,8 +8,8 @@ package io.opentelemetry.javaagent.instrumentation.vertx;
|
|||
import io.opentelemetry.api.trace.Span;
|
||||
import io.opentelemetry.context.Context;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.LocalRootSpan;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteHolder;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteSource;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRoute;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRouteSource;
|
||||
import io.vertx.core.Handler;
|
||||
import io.vertx.ext.web.RoutingContext;
|
||||
import java.lang.reflect.InvocationTargetException;
|
||||
|
@ -29,8 +29,11 @@ public final class RoutingContextHandlerWrapper implements Handler<RoutingContex
|
|||
@Override
|
||||
public void handle(RoutingContext context) {
|
||||
Context otelContext = Context.current();
|
||||
HttpRouteHolder.updateHttpRoute(
|
||||
otelContext, HttpRouteSource.CONTROLLER, RoutingContextHandlerWrapper::getRoute, context);
|
||||
HttpServerRoute.update(
|
||||
otelContext,
|
||||
HttpServerRouteSource.CONTROLLER,
|
||||
RoutingContextHandlerWrapper::getRoute,
|
||||
context);
|
||||
|
||||
try {
|
||||
handler.handle(context);
|
||||
|
|
|
@ -5,11 +5,11 @@
|
|||
|
||||
package io.opentelemetry.javaagent.instrumentation.wicket;
|
||||
|
||||
import static io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteSource.CONTROLLER;
|
||||
import static io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRouteSource.CONTROLLER;
|
||||
import static net.bytebuddy.matcher.ElementMatchers.named;
|
||||
import static net.bytebuddy.matcher.ElementMatchers.takesArgument;
|
||||
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteHolder;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRoute;
|
||||
import io.opentelemetry.javaagent.bootstrap.Java8BytecodeBridge;
|
||||
import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation;
|
||||
import io.opentelemetry.javaagent.extension.instrumentation.TypeTransformer;
|
||||
|
@ -39,7 +39,7 @@ public class RequestHandlerExecutorInstrumentation implements TypeInstrumentatio
|
|||
@Advice.OnMethodEnter(suppress = Throwable.class)
|
||||
public static void onExit(@Advice.Argument(0) IRequestHandler handler) {
|
||||
if (handler instanceof IPageClassRequestHandler) {
|
||||
HttpRouteHolder.updateHttpRoute(
|
||||
HttpServerRoute.update(
|
||||
Java8BytecodeBridge.currentContext(),
|
||||
CONTROLLER,
|
||||
WicketServerSpanNaming.SERVER_SPAN_NAME,
|
||||
|
|
|
@ -5,14 +5,14 @@
|
|||
|
||||
package io.opentelemetry.javaagent.instrumentation.wicket;
|
||||
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteGetter;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRouteGetter;
|
||||
import io.opentelemetry.javaagent.bootstrap.servlet.ServletContextPath;
|
||||
import org.apache.wicket.core.request.handler.IPageClassRequestHandler;
|
||||
import org.apache.wicket.request.cycle.RequestCycle;
|
||||
|
||||
public final class WicketServerSpanNaming {
|
||||
|
||||
public static final HttpRouteGetter<IPageClassRequestHandler> SERVER_SPAN_NAME =
|
||||
public static final HttpServerRouteGetter<IPageClassRequestHandler> SERVER_SPAN_NAME =
|
||||
(context, handler) -> {
|
||||
// using class name as page name
|
||||
String pageName = handler.getPageClass().getName();
|
||||
|
|
|
@ -18,9 +18,9 @@ import io.opentelemetry.context.Scope;
|
|||
import io.opentelemetry.instrumentation.api.instrumenter.AttributesExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.SpanKindExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpRouteHolder;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerAttributesExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerAttributesGetter;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRoute;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanNameExtractor;
|
||||
import io.opentelemetry.instrumentation.api.internal.SpanKey;
|
||||
import io.opentelemetry.instrumentation.api.internal.SpanKeyProvider;
|
||||
|
@ -51,7 +51,7 @@ final class TestInstrumenters {
|
|||
// cover both semconv and span-kind strategies
|
||||
.addAttributesExtractor(HttpServerAttributesExtractor.create(HttpServerGetter.INSTANCE))
|
||||
.addAttributesExtractor(new SpanKeyAttributesExtractor(SpanKey.KIND_SERVER))
|
||||
.addContextCustomizer(HttpRouteHolder.create(HttpServerGetter.INSTANCE))
|
||||
.addContextCustomizer(HttpServerRoute.create(HttpServerGetter.INSTANCE))
|
||||
.buildInstrumenter(SpanKindExtractor.alwaysServer());
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue