Use HTTP instead of non-known method in http span name (#9441)
Co-authored-by: Mateusz Rzeszutek <mrzeszutek@splunk.com>
This commit is contained in:
parent
2d505ebd08
commit
d157b68efb
|
|
@ -6,6 +6,8 @@
|
||||||
package io.opentelemetry.instrumentation.api.instrumenter.http;
|
package io.opentelemetry.instrumentation.api.instrumenter.http;
|
||||||
|
|
||||||
import io.opentelemetry.instrumentation.api.instrumenter.SpanNameExtractor;
|
import io.opentelemetry.instrumentation.api.instrumenter.SpanNameExtractor;
|
||||||
|
import java.util.HashSet;
|
||||||
|
import java.util.Set;
|
||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -17,18 +19,29 @@ import javax.annotation.Nullable;
|
||||||
public final class HttpSpanNameExtractor<REQUEST> implements SpanNameExtractor<REQUEST> {
|
public final class HttpSpanNameExtractor<REQUEST> implements SpanNameExtractor<REQUEST> {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns a {@link SpanNameExtractor} which should be used for HTTP requests. HTTP attributes
|
* Returns a {@link SpanNameExtractor} which should be used for HTTP requests with default
|
||||||
* will be examined to determine the name of the span.
|
* configuration. HTTP attributes will be examined to determine the name of the span.
|
||||||
*/
|
*/
|
||||||
public static <REQUEST> SpanNameExtractor<REQUEST> create(
|
public static <REQUEST> SpanNameExtractor<REQUEST> create(
|
||||||
HttpCommonAttributesGetter<REQUEST, ?> getter) {
|
HttpCommonAttributesGetter<REQUEST, ?> getter) {
|
||||||
return new HttpSpanNameExtractor<>(getter);
|
return builder(getter).build();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns a new {@link HttpSpanNameExtractorBuilder} that can be used to configure the HTTP span
|
||||||
|
* name extractor.
|
||||||
|
*/
|
||||||
|
public static <REQUEST> HttpSpanNameExtractorBuilder<REQUEST> builder(
|
||||||
|
HttpCommonAttributesGetter<REQUEST, ?> getter) {
|
||||||
|
return new HttpSpanNameExtractorBuilder<>(getter);
|
||||||
}
|
}
|
||||||
|
|
||||||
private final HttpCommonAttributesGetter<REQUEST, ?> getter;
|
private final HttpCommonAttributesGetter<REQUEST, ?> getter;
|
||||||
|
private final Set<String> knownMethods;
|
||||||
|
|
||||||
private HttpSpanNameExtractor(HttpCommonAttributesGetter<REQUEST, ?> getter) {
|
HttpSpanNameExtractor(HttpSpanNameExtractorBuilder<REQUEST> builder) {
|
||||||
this.getter = getter;
|
this.getter = builder.httpAttributesGetter;
|
||||||
|
this.knownMethods = new HashSet<>(builder.knownMethods);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
@ -36,6 +49,9 @@ public final class HttpSpanNameExtractor<REQUEST> implements SpanNameExtractor<R
|
||||||
String method = getter.getHttpRequestMethod(request);
|
String method = getter.getHttpRequestMethod(request);
|
||||||
String route = extractRoute(request);
|
String route = extractRoute(request);
|
||||||
if (method != null) {
|
if (method != null) {
|
||||||
|
if (!knownMethods.contains(method)) {
|
||||||
|
method = "HTTP";
|
||||||
|
}
|
||||||
return route == null ? method : method + " " + route;
|
return route == null ? method : method + " " + route;
|
||||||
}
|
}
|
||||||
return "HTTP";
|
return "HTTP";
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,52 @@
|
||||||
|
/*
|
||||||
|
* Copyright The OpenTelemetry Authors
|
||||||
|
* SPDX-License-Identifier: Apache-2.0
|
||||||
|
*/
|
||||||
|
|
||||||
|
package io.opentelemetry.instrumentation.api.instrumenter.http;
|
||||||
|
|
||||||
|
import com.google.errorprone.annotations.CanIgnoreReturnValue;
|
||||||
|
import io.opentelemetry.instrumentation.api.instrumenter.SpanNameExtractor;
|
||||||
|
import io.opentelemetry.instrumentation.api.internal.HttpConstants;
|
||||||
|
import java.util.HashSet;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
|
/** A builder of {@link HttpSpanNameExtractor}. */
|
||||||
|
public final class HttpSpanNameExtractorBuilder<REQUEST> {
|
||||||
|
|
||||||
|
final HttpCommonAttributesGetter<REQUEST, ?> httpAttributesGetter;
|
||||||
|
Set<String> knownMethods = HttpConstants.KNOWN_METHODS;
|
||||||
|
|
||||||
|
HttpSpanNameExtractorBuilder(HttpCommonAttributesGetter<REQUEST, ?> httpAttributesGetter) {
|
||||||
|
this.httpAttributesGetter = httpAttributesGetter;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Configures the extractor to recognize an alternative set of HTTP request methods.
|
||||||
|
*
|
||||||
|
* <p>By default, this extractor defines "known" methods as the ones listed in <a
|
||||||
|
* href="https://www.rfc-editor.org/rfc/rfc9110.html#name-methods">RFC9110</a> and the PATCH
|
||||||
|
* method defined in <a href="https://www.rfc-editor.org/rfc/rfc5789.html">RFC5789</a>. If an
|
||||||
|
* unknown method is encountered, the extractor will use the value {@value HttpConstants#_OTHER}
|
||||||
|
* instead of it and put the original value in an extra {@code http.request.method_original}
|
||||||
|
* attribute.
|
||||||
|
*
|
||||||
|
* <p>Note: calling this method <b>overrides</b> the default known method sets completely; it does
|
||||||
|
* not supplement it.
|
||||||
|
*
|
||||||
|
* @param knownMethods A set of recognized HTTP request methods.
|
||||||
|
*/
|
||||||
|
@CanIgnoreReturnValue
|
||||||
|
public HttpSpanNameExtractorBuilder<REQUEST> setKnownMethods(Set<String> knownMethods) {
|
||||||
|
this.knownMethods = new HashSet<>(knownMethods);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns a new {@link HttpSpanNameExtractor} with the settings of this {@link
|
||||||
|
* HttpSpanNameExtractorBuilder}.
|
||||||
|
*/
|
||||||
|
public SpanNameExtractor<REQUEST> build() {
|
||||||
|
return new HttpSpanNameExtractor<>(this);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -32,7 +32,9 @@ public class AkkaHttpClientSingletons {
|
||||||
Instrumenter.<HttpRequest, HttpResponse>builder(
|
Instrumenter.<HttpRequest, HttpResponse>builder(
|
||||||
GlobalOpenTelemetry.get(),
|
GlobalOpenTelemetry.get(),
|
||||||
AkkaHttpUtil.instrumentationName(),
|
AkkaHttpUtil.instrumentationName(),
|
||||||
HttpSpanNameExtractor.create(httpAttributesGetter))
|
HttpSpanNameExtractor.builder(httpAttributesGetter)
|
||||||
|
.setKnownMethods(CommonConfig.get().getKnownHttpRequestMethods())
|
||||||
|
.build())
|
||||||
.setSpanStatusExtractor(HttpSpanStatusExtractor.create(httpAttributesGetter))
|
.setSpanStatusExtractor(HttpSpanStatusExtractor.create(httpAttributesGetter))
|
||||||
.addAttributesExtractor(
|
.addAttributesExtractor(
|
||||||
HttpClientAttributesExtractor.builder(httpAttributesGetter)
|
HttpClientAttributesExtractor.builder(httpAttributesGetter)
|
||||||
|
|
|
||||||
|
|
@ -29,7 +29,9 @@ public final class AkkaHttpServerSingletons {
|
||||||
Instrumenter.<HttpRequest, HttpResponse>builder(
|
Instrumenter.<HttpRequest, HttpResponse>builder(
|
||||||
GlobalOpenTelemetry.get(),
|
GlobalOpenTelemetry.get(),
|
||||||
AkkaHttpUtil.instrumentationName(),
|
AkkaHttpUtil.instrumentationName(),
|
||||||
HttpSpanNameExtractor.create(httpAttributesGetter))
|
HttpSpanNameExtractor.builder(httpAttributesGetter)
|
||||||
|
.setKnownMethods(CommonConfig.get().getKnownHttpRequestMethods())
|
||||||
|
.build())
|
||||||
.setSpanStatusExtractor(HttpSpanStatusExtractor.create(httpAttributesGetter))
|
.setSpanStatusExtractor(HttpSpanStatusExtractor.create(httpAttributesGetter))
|
||||||
.addAttributesExtractor(
|
.addAttributesExtractor(
|
||||||
HttpServerAttributesExtractor.builder(httpAttributesGetter)
|
HttpServerAttributesExtractor.builder(httpAttributesGetter)
|
||||||
|
|
|
||||||
|
|
@ -30,7 +30,9 @@ public final class ApacheHttpAsyncClientSingletons {
|
||||||
Instrumenter.<ApacheHttpClientRequest, HttpResponse>builder(
|
Instrumenter.<ApacheHttpClientRequest, HttpResponse>builder(
|
||||||
GlobalOpenTelemetry.get(),
|
GlobalOpenTelemetry.get(),
|
||||||
INSTRUMENTATION_NAME,
|
INSTRUMENTATION_NAME,
|
||||||
HttpSpanNameExtractor.create(httpAttributesGetter))
|
HttpSpanNameExtractor.builder(httpAttributesGetter)
|
||||||
|
.setKnownMethods(CommonConfig.get().getKnownHttpRequestMethods())
|
||||||
|
.build())
|
||||||
.setSpanStatusExtractor(HttpSpanStatusExtractor.create(httpAttributesGetter))
|
.setSpanStatusExtractor(HttpSpanStatusExtractor.create(httpAttributesGetter))
|
||||||
.addAttributesExtractor(
|
.addAttributesExtractor(
|
||||||
HttpClientAttributesExtractor.builder(httpAttributesGetter)
|
HttpClientAttributesExtractor.builder(httpAttributesGetter)
|
||||||
|
|
|
||||||
|
|
@ -30,7 +30,9 @@ public final class ApacheHttpClientSingletons {
|
||||||
Instrumenter.<HttpMethod, HttpMethod>builder(
|
Instrumenter.<HttpMethod, HttpMethod>builder(
|
||||||
GlobalOpenTelemetry.get(),
|
GlobalOpenTelemetry.get(),
|
||||||
INSTRUMENTATION_NAME,
|
INSTRUMENTATION_NAME,
|
||||||
HttpSpanNameExtractor.create(httpAttributesGetter))
|
HttpSpanNameExtractor.builder(httpAttributesGetter)
|
||||||
|
.setKnownMethods(CommonConfig.get().getKnownHttpRequestMethods())
|
||||||
|
.build())
|
||||||
.setSpanStatusExtractor(HttpSpanStatusExtractor.create(httpAttributesGetter))
|
.setSpanStatusExtractor(HttpSpanStatusExtractor.create(httpAttributesGetter))
|
||||||
.addAttributesExtractor(
|
.addAttributesExtractor(
|
||||||
HttpClientAttributesExtractor.builder(httpAttributesGetter)
|
HttpClientAttributesExtractor.builder(httpAttributesGetter)
|
||||||
|
|
|
||||||
|
|
@ -30,7 +30,9 @@ public final class ApacheHttpClientSingletons {
|
||||||
Instrumenter.<ApacheHttpClientRequest, HttpResponse>builder(
|
Instrumenter.<ApacheHttpClientRequest, HttpResponse>builder(
|
||||||
GlobalOpenTelemetry.get(),
|
GlobalOpenTelemetry.get(),
|
||||||
INSTRUMENTATION_NAME,
|
INSTRUMENTATION_NAME,
|
||||||
HttpSpanNameExtractor.create(httpAttributesGetter))
|
HttpSpanNameExtractor.builder(httpAttributesGetter)
|
||||||
|
.setKnownMethods(CommonConfig.get().getKnownHttpRequestMethods())
|
||||||
|
.build())
|
||||||
.setSpanStatusExtractor(HttpSpanStatusExtractor.create(httpAttributesGetter))
|
.setSpanStatusExtractor(HttpSpanStatusExtractor.create(httpAttributesGetter))
|
||||||
.addAttributesExtractor(
|
.addAttributesExtractor(
|
||||||
HttpClientAttributesExtractor.builder(httpAttributesGetter)
|
HttpClientAttributesExtractor.builder(httpAttributesGetter)
|
||||||
|
|
|
||||||
|
|
@ -16,6 +16,7 @@ import io.opentelemetry.instrumentation.api.instrumenter.http.HttpClientAttribut
|
||||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpClientExperimentalMetrics;
|
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpClientExperimentalMetrics;
|
||||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpClientMetrics;
|
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpClientMetrics;
|
||||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanNameExtractor;
|
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanNameExtractor;
|
||||||
|
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanNameExtractorBuilder;
|
||||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanStatusExtractor;
|
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanStatusExtractor;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
@ -34,6 +35,8 @@ public final class ApacheHttpClientTelemetryBuilder {
|
||||||
private final HttpClientAttributesExtractorBuilder<ApacheHttpClientRequest, HttpResponse>
|
private final HttpClientAttributesExtractorBuilder<ApacheHttpClientRequest, HttpResponse>
|
||||||
httpAttributesExtractorBuilder =
|
httpAttributesExtractorBuilder =
|
||||||
HttpClientAttributesExtractor.builder(ApacheHttpClientHttpAttributesGetter.INSTANCE);
|
HttpClientAttributesExtractor.builder(ApacheHttpClientHttpAttributesGetter.INSTANCE);
|
||||||
|
private final HttpSpanNameExtractorBuilder<ApacheHttpClientRequest> httpSpanNameExtractorBuilder =
|
||||||
|
HttpSpanNameExtractor.builder(ApacheHttpClientHttpAttributesGetter.INSTANCE);
|
||||||
private boolean emitExperimentalHttpClientMetrics = false;
|
private boolean emitExperimentalHttpClientMetrics = false;
|
||||||
|
|
||||||
ApacheHttpClientTelemetryBuilder(OpenTelemetry openTelemetry) {
|
ApacheHttpClientTelemetryBuilder(OpenTelemetry openTelemetry) {
|
||||||
|
|
@ -90,6 +93,7 @@ public final class ApacheHttpClientTelemetryBuilder {
|
||||||
@CanIgnoreReturnValue
|
@CanIgnoreReturnValue
|
||||||
public ApacheHttpClientTelemetryBuilder setKnownMethods(Set<String> knownMethods) {
|
public ApacheHttpClientTelemetryBuilder setKnownMethods(Set<String> knownMethods) {
|
||||||
httpAttributesExtractorBuilder.setKnownMethods(knownMethods);
|
httpAttributesExtractorBuilder.setKnownMethods(knownMethods);
|
||||||
|
httpSpanNameExtractorBuilder.setKnownMethods(knownMethods);
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -116,9 +120,7 @@ public final class ApacheHttpClientTelemetryBuilder {
|
||||||
|
|
||||||
InstrumenterBuilder<ApacheHttpClientRequest, HttpResponse> builder =
|
InstrumenterBuilder<ApacheHttpClientRequest, HttpResponse> builder =
|
||||||
Instrumenter.<ApacheHttpClientRequest, HttpResponse>builder(
|
Instrumenter.<ApacheHttpClientRequest, HttpResponse>builder(
|
||||||
openTelemetry,
|
openTelemetry, INSTRUMENTATION_NAME, httpSpanNameExtractorBuilder.build())
|
||||||
INSTRUMENTATION_NAME,
|
|
||||||
HttpSpanNameExtractor.create(httpAttributesGetter))
|
|
||||||
.setSpanStatusExtractor(HttpSpanStatusExtractor.create(httpAttributesGetter))
|
.setSpanStatusExtractor(HttpSpanStatusExtractor.create(httpAttributesGetter))
|
||||||
.addAttributesExtractor(httpAttributesExtractorBuilder.build())
|
.addAttributesExtractor(httpAttributesExtractorBuilder.build())
|
||||||
.addAttributesExtractors(additionalExtractors)
|
.addAttributesExtractors(additionalExtractors)
|
||||||
|
|
|
||||||
|
|
@ -31,7 +31,9 @@ public final class ApacheHttpClientSingletons {
|
||||||
Instrumenter.<HttpRequest, HttpResponse>builder(
|
Instrumenter.<HttpRequest, HttpResponse>builder(
|
||||||
GlobalOpenTelemetry.get(),
|
GlobalOpenTelemetry.get(),
|
||||||
INSTRUMENTATION_NAME,
|
INSTRUMENTATION_NAME,
|
||||||
HttpSpanNameExtractor.create(httpAttributesGetter))
|
HttpSpanNameExtractor.builder(httpAttributesGetter)
|
||||||
|
.setKnownMethods(CommonConfig.get().getKnownHttpRequestMethods())
|
||||||
|
.build())
|
||||||
.setSpanStatusExtractor(HttpSpanStatusExtractor.create(httpAttributesGetter))
|
.setSpanStatusExtractor(HttpSpanStatusExtractor.create(httpAttributesGetter))
|
||||||
.addAttributesExtractor(
|
.addAttributesExtractor(
|
||||||
HttpClientAttributesExtractor.builder(httpAttributesGetter)
|
HttpClientAttributesExtractor.builder(httpAttributesGetter)
|
||||||
|
|
|
||||||
|
|
@ -25,6 +25,7 @@ import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerExperime
|
||||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerMetrics;
|
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerMetrics;
|
||||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRoute;
|
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRoute;
|
||||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanNameExtractor;
|
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanNameExtractor;
|
||||||
|
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanNameExtractorBuilder;
|
||||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanStatusExtractor;
|
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanStatusExtractor;
|
||||||
import io.opentelemetry.instrumentation.armeria.v1_3.internal.ArmeriaHttpClientAttributesGetter;
|
import io.opentelemetry.instrumentation.armeria.v1_3.internal.ArmeriaHttpClientAttributesGetter;
|
||||||
import io.opentelemetry.semconv.trace.attributes.SemanticAttributes;
|
import io.opentelemetry.semconv.trace.attributes.SemanticAttributes;
|
||||||
|
|
@ -56,6 +57,11 @@ public final class ArmeriaTelemetryBuilder {
|
||||||
httpServerAttributesExtractorBuilder =
|
httpServerAttributesExtractorBuilder =
|
||||||
HttpServerAttributesExtractor.builder(ArmeriaHttpServerAttributesGetter.INSTANCE);
|
HttpServerAttributesExtractor.builder(ArmeriaHttpServerAttributesGetter.INSTANCE);
|
||||||
|
|
||||||
|
private final HttpSpanNameExtractorBuilder<RequestContext> httpClientSpanNameExtractorBuilder =
|
||||||
|
HttpSpanNameExtractor.builder(ArmeriaHttpClientAttributesGetter.INSTANCE);
|
||||||
|
private final HttpSpanNameExtractorBuilder<RequestContext> httpServerSpanNameExtractorBuilder =
|
||||||
|
HttpSpanNameExtractor.builder(ArmeriaHttpServerAttributesGetter.INSTANCE);
|
||||||
|
|
||||||
private Function<
|
private Function<
|
||||||
SpanStatusExtractor<RequestContext, RequestLog>,
|
SpanStatusExtractor<RequestContext, RequestLog>,
|
||||||
? extends SpanStatusExtractor<? super RequestContext, ? super RequestLog>>
|
? extends SpanStatusExtractor<? super RequestContext, ? super RequestLog>>
|
||||||
|
|
@ -167,6 +173,8 @@ public final class ArmeriaTelemetryBuilder {
|
||||||
public ArmeriaTelemetryBuilder setKnownMethods(Set<String> knownMethods) {
|
public ArmeriaTelemetryBuilder setKnownMethods(Set<String> knownMethods) {
|
||||||
httpClientAttributesExtractorBuilder.setKnownMethods(knownMethods);
|
httpClientAttributesExtractorBuilder.setKnownMethods(knownMethods);
|
||||||
httpServerAttributesExtractorBuilder.setKnownMethods(knownMethods);
|
httpServerAttributesExtractorBuilder.setKnownMethods(knownMethods);
|
||||||
|
httpClientSpanNameExtractorBuilder.setKnownMethods(knownMethods);
|
||||||
|
httpServerSpanNameExtractorBuilder.setKnownMethods(knownMethods);
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -204,14 +212,10 @@ public final class ArmeriaTelemetryBuilder {
|
||||||
|
|
||||||
InstrumenterBuilder<ClientRequestContext, RequestLog> clientInstrumenterBuilder =
|
InstrumenterBuilder<ClientRequestContext, RequestLog> clientInstrumenterBuilder =
|
||||||
Instrumenter.builder(
|
Instrumenter.builder(
|
||||||
openTelemetry,
|
openTelemetry, INSTRUMENTATION_NAME, httpClientSpanNameExtractorBuilder.build());
|
||||||
INSTRUMENTATION_NAME,
|
|
||||||
HttpSpanNameExtractor.create(clientAttributesGetter));
|
|
||||||
InstrumenterBuilder<ServiceRequestContext, RequestLog> serverInstrumenterBuilder =
|
InstrumenterBuilder<ServiceRequestContext, RequestLog> serverInstrumenterBuilder =
|
||||||
Instrumenter.builder(
|
Instrumenter.builder(
|
||||||
openTelemetry,
|
openTelemetry, INSTRUMENTATION_NAME, httpServerSpanNameExtractorBuilder.build());
|
||||||
INSTRUMENTATION_NAME,
|
|
||||||
HttpSpanNameExtractor.create(serverAttributesGetter));
|
|
||||||
|
|
||||||
Stream.of(clientInstrumenterBuilder, serverInstrumenterBuilder)
|
Stream.of(clientInstrumenterBuilder, serverInstrumenterBuilder)
|
||||||
.forEach(instrumenter -> instrumenter.addAttributesExtractors(additionalExtractors));
|
.forEach(instrumenter -> instrumenter.addAttributesExtractors(additionalExtractors));
|
||||||
|
|
|
||||||
|
|
@ -31,7 +31,9 @@ public final class AsyncHttpClientSingletons {
|
||||||
Instrumenter.<Request, Response>builder(
|
Instrumenter.<Request, Response>builder(
|
||||||
GlobalOpenTelemetry.get(),
|
GlobalOpenTelemetry.get(),
|
||||||
INSTRUMENTATION_NAME,
|
INSTRUMENTATION_NAME,
|
||||||
HttpSpanNameExtractor.create(httpAttributesGetter))
|
HttpSpanNameExtractor.builder(httpAttributesGetter)
|
||||||
|
.setKnownMethods(CommonConfig.get().getKnownHttpRequestMethods())
|
||||||
|
.build())
|
||||||
.setSpanStatusExtractor(HttpSpanStatusExtractor.create(httpAttributesGetter))
|
.setSpanStatusExtractor(HttpSpanStatusExtractor.create(httpAttributesGetter))
|
||||||
.addAttributesExtractor(
|
.addAttributesExtractor(
|
||||||
HttpClientAttributesExtractor.builder(httpAttributesGetter)
|
HttpClientAttributesExtractor.builder(httpAttributesGetter)
|
||||||
|
|
|
||||||
|
|
@ -30,7 +30,9 @@ public final class AsyncHttpClientSingletons {
|
||||||
Instrumenter.<RequestContext, Response>builder(
|
Instrumenter.<RequestContext, Response>builder(
|
||||||
GlobalOpenTelemetry.get(),
|
GlobalOpenTelemetry.get(),
|
||||||
INSTRUMENTATION_NAME,
|
INSTRUMENTATION_NAME,
|
||||||
HttpSpanNameExtractor.create(httpAttributesGetter))
|
HttpSpanNameExtractor.builder(httpAttributesGetter)
|
||||||
|
.setKnownMethods(CommonConfig.get().getKnownHttpRequestMethods())
|
||||||
|
.build())
|
||||||
.setSpanStatusExtractor(HttpSpanStatusExtractor.create(httpAttributesGetter))
|
.setSpanStatusExtractor(HttpSpanStatusExtractor.create(httpAttributesGetter))
|
||||||
.addAttributesExtractor(
|
.addAttributesExtractor(
|
||||||
HttpClientAttributesExtractor.builder(httpAttributesGetter)
|
HttpClientAttributesExtractor.builder(httpAttributesGetter)
|
||||||
|
|
|
||||||
|
|
@ -31,7 +31,9 @@ public class GoogleHttpClientSingletons {
|
||||||
Instrumenter.<HttpRequest, HttpResponse>builder(
|
Instrumenter.<HttpRequest, HttpResponse>builder(
|
||||||
GlobalOpenTelemetry.get(),
|
GlobalOpenTelemetry.get(),
|
||||||
INSTRUMENTATION_NAME,
|
INSTRUMENTATION_NAME,
|
||||||
HttpSpanNameExtractor.create(httpAttributesGetter))
|
HttpSpanNameExtractor.builder(httpAttributesGetter)
|
||||||
|
.setKnownMethods(CommonConfig.get().getKnownHttpRequestMethods())
|
||||||
|
.build())
|
||||||
.setSpanStatusExtractor(HttpSpanStatusExtractor.create(httpAttributesGetter))
|
.setSpanStatusExtractor(HttpSpanStatusExtractor.create(httpAttributesGetter))
|
||||||
.addAttributesExtractor(
|
.addAttributesExtractor(
|
||||||
HttpClientAttributesExtractor.builder(httpAttributesGetter)
|
HttpClientAttributesExtractor.builder(httpAttributesGetter)
|
||||||
|
|
|
||||||
|
|
@ -30,7 +30,9 @@ public final class GrizzlySingletons {
|
||||||
Instrumenter.<HttpRequestPacket, HttpResponsePacket>builder(
|
Instrumenter.<HttpRequestPacket, HttpResponsePacket>builder(
|
||||||
GlobalOpenTelemetry.get(),
|
GlobalOpenTelemetry.get(),
|
||||||
"io.opentelemetry.grizzly-2.3",
|
"io.opentelemetry.grizzly-2.3",
|
||||||
HttpSpanNameExtractor.create(httpAttributesGetter))
|
HttpSpanNameExtractor.builder(httpAttributesGetter)
|
||||||
|
.setKnownMethods(CommonConfig.get().getKnownHttpRequestMethods())
|
||||||
|
.build())
|
||||||
.setSpanStatusExtractor(HttpSpanStatusExtractor.create(httpAttributesGetter))
|
.setSpanStatusExtractor(HttpSpanStatusExtractor.create(httpAttributesGetter))
|
||||||
.addAttributesExtractor(
|
.addAttributesExtractor(
|
||||||
HttpServerAttributesExtractor.builder(httpAttributesGetter)
|
HttpServerAttributesExtractor.builder(httpAttributesGetter)
|
||||||
|
|
|
||||||
|
|
@ -28,7 +28,9 @@ public final class HttpUrlConnectionSingletons {
|
||||||
Instrumenter.<HttpURLConnection, Integer>builder(
|
Instrumenter.<HttpURLConnection, Integer>builder(
|
||||||
GlobalOpenTelemetry.get(),
|
GlobalOpenTelemetry.get(),
|
||||||
"io.opentelemetry.http-url-connection",
|
"io.opentelemetry.http-url-connection",
|
||||||
HttpSpanNameExtractor.create(httpAttributesGetter))
|
HttpSpanNameExtractor.builder(httpAttributesGetter)
|
||||||
|
.setKnownMethods(CommonConfig.get().getKnownHttpRequestMethods())
|
||||||
|
.build())
|
||||||
.setSpanStatusExtractor(HttpSpanStatusExtractor.create(httpAttributesGetter))
|
.setSpanStatusExtractor(HttpSpanStatusExtractor.create(httpAttributesGetter))
|
||||||
.addAttributesExtractor(
|
.addAttributesExtractor(
|
||||||
HttpClientAttributesExtractor.builder(httpAttributesGetter)
|
HttpClientAttributesExtractor.builder(httpAttributesGetter)
|
||||||
|
|
|
||||||
|
|
@ -33,6 +33,7 @@ public class JavaHttpClientSingletons {
|
||||||
.setCapturedRequestHeaders(CommonConfig.get().getClientRequestHeaders())
|
.setCapturedRequestHeaders(CommonConfig.get().getClientRequestHeaders())
|
||||||
.setCapturedResponseHeaders(CommonConfig.get().getClientResponseHeaders())
|
.setCapturedResponseHeaders(CommonConfig.get().getClientResponseHeaders())
|
||||||
.setKnownMethods(CommonConfig.get().getKnownHttpRequestMethods()),
|
.setKnownMethods(CommonConfig.get().getKnownHttpRequestMethods()),
|
||||||
|
builder -> builder.setKnownMethods(CommonConfig.get().getKnownHttpRequestMethods()),
|
||||||
singletonList(
|
singletonList(
|
||||||
PeerServiceAttributesExtractor.create(
|
PeerServiceAttributesExtractor.create(
|
||||||
JavaHttpClientAttributesGetter.INSTANCE,
|
JavaHttpClientAttributesGetter.INSTANCE,
|
||||||
|
|
|
||||||
|
|
@ -10,6 +10,7 @@ import io.opentelemetry.api.OpenTelemetry;
|
||||||
import io.opentelemetry.instrumentation.api.instrumenter.AttributesExtractor;
|
import io.opentelemetry.instrumentation.api.instrumenter.AttributesExtractor;
|
||||||
import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter;
|
import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter;
|
||||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpClientAttributesExtractorBuilder;
|
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpClientAttributesExtractorBuilder;
|
||||||
|
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanNameExtractorBuilder;
|
||||||
import io.opentelemetry.instrumentation.httpclient.internal.HttpHeadersSetter;
|
import io.opentelemetry.instrumentation.httpclient.internal.HttpHeadersSetter;
|
||||||
import io.opentelemetry.instrumentation.httpclient.internal.JavaHttpClientInstrumenterFactory;
|
import io.opentelemetry.instrumentation.httpclient.internal.JavaHttpClientInstrumenterFactory;
|
||||||
import java.net.http.HttpRequest;
|
import java.net.http.HttpRequest;
|
||||||
|
|
@ -25,9 +26,10 @@ public final class JavaHttpClientTelemetryBuilder {
|
||||||
|
|
||||||
private final List<AttributesExtractor<? super HttpRequest, ? super HttpResponse<?>>>
|
private final List<AttributesExtractor<? super HttpRequest, ? super HttpResponse<?>>>
|
||||||
additionalExtractors = new ArrayList<>();
|
additionalExtractors = new ArrayList<>();
|
||||||
|
|
||||||
private Consumer<HttpClientAttributesExtractorBuilder<HttpRequest, HttpResponse<?>>>
|
private Consumer<HttpClientAttributesExtractorBuilder<HttpRequest, HttpResponse<?>>>
|
||||||
extractorConfigurer = builder -> {};
|
extractorConfigurer = builder -> {};
|
||||||
|
private Consumer<HttpSpanNameExtractorBuilder<HttpRequest>> spanNameExtractorConfigurer =
|
||||||
|
builder -> {};
|
||||||
private boolean emitExperimentalHttpClientMetrics = false;
|
private boolean emitExperimentalHttpClientMetrics = false;
|
||||||
|
|
||||||
JavaHttpClientTelemetryBuilder(OpenTelemetry openTelemetry) {
|
JavaHttpClientTelemetryBuilder(OpenTelemetry openTelemetry) {
|
||||||
|
|
@ -86,6 +88,8 @@ public final class JavaHttpClientTelemetryBuilder {
|
||||||
public JavaHttpClientTelemetryBuilder setKnownMethods(Set<String> knownMethods) {
|
public JavaHttpClientTelemetryBuilder setKnownMethods(Set<String> knownMethods) {
|
||||||
extractorConfigurer =
|
extractorConfigurer =
|
||||||
extractorConfigurer.andThen(builder -> builder.setKnownMethods(knownMethods));
|
extractorConfigurer.andThen(builder -> builder.setKnownMethods(knownMethods));
|
||||||
|
spanNameExtractorConfigurer =
|
||||||
|
spanNameExtractorConfigurer.andThen(builder -> builder.setKnownMethods(knownMethods));
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -107,6 +111,7 @@ public final class JavaHttpClientTelemetryBuilder {
|
||||||
JavaHttpClientInstrumenterFactory.createInstrumenter(
|
JavaHttpClientInstrumenterFactory.createInstrumenter(
|
||||||
openTelemetry,
|
openTelemetry,
|
||||||
extractorConfigurer,
|
extractorConfigurer,
|
||||||
|
spanNameExtractorConfigurer,
|
||||||
additionalExtractors,
|
additionalExtractors,
|
||||||
emitExperimentalHttpClientMetrics);
|
emitExperimentalHttpClientMetrics);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -15,6 +15,7 @@ import io.opentelemetry.instrumentation.api.instrumenter.http.HttpClientAttribut
|
||||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpClientExperimentalMetrics;
|
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpClientExperimentalMetrics;
|
||||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpClientMetrics;
|
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpClientMetrics;
|
||||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanNameExtractor;
|
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanNameExtractor;
|
||||||
|
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanNameExtractorBuilder;
|
||||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanStatusExtractor;
|
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanStatusExtractor;
|
||||||
import java.net.http.HttpRequest;
|
import java.net.http.HttpRequest;
|
||||||
import java.net.http.HttpResponse;
|
import java.net.http.HttpResponse;
|
||||||
|
|
@ -32,6 +33,7 @@ public final class JavaHttpClientInstrumenterFactory {
|
||||||
OpenTelemetry openTelemetry,
|
OpenTelemetry openTelemetry,
|
||||||
Consumer<HttpClientAttributesExtractorBuilder<HttpRequest, HttpResponse<?>>>
|
Consumer<HttpClientAttributesExtractorBuilder<HttpRequest, HttpResponse<?>>>
|
||||||
extractorConfigurer,
|
extractorConfigurer,
|
||||||
|
Consumer<HttpSpanNameExtractorBuilder<HttpRequest>> spanNameExtractorConfigurer,
|
||||||
List<AttributesExtractor<? super HttpRequest, ? super HttpResponse<?>>> additionalExtractors,
|
List<AttributesExtractor<? super HttpRequest, ? super HttpResponse<?>>> additionalExtractors,
|
||||||
boolean emitExperimentalHttpClientMetrics) {
|
boolean emitExperimentalHttpClientMetrics) {
|
||||||
|
|
||||||
|
|
@ -42,11 +44,13 @@ public final class JavaHttpClientInstrumenterFactory {
|
||||||
HttpClientAttributesExtractor.builder(httpAttributesGetter);
|
HttpClientAttributesExtractor.builder(httpAttributesGetter);
|
||||||
extractorConfigurer.accept(httpAttributesExtractorBuilder);
|
extractorConfigurer.accept(httpAttributesExtractorBuilder);
|
||||||
|
|
||||||
|
HttpSpanNameExtractorBuilder<HttpRequest> httpSpanNameExtractorBuilder =
|
||||||
|
HttpSpanNameExtractor.builder(httpAttributesGetter);
|
||||||
|
spanNameExtractorConfigurer.accept(httpSpanNameExtractorBuilder);
|
||||||
|
|
||||||
InstrumenterBuilder<HttpRequest, HttpResponse<?>> builder =
|
InstrumenterBuilder<HttpRequest, HttpResponse<?>> builder =
|
||||||
Instrumenter.<HttpRequest, HttpResponse<?>>builder(
|
Instrumenter.<HttpRequest, HttpResponse<?>>builder(
|
||||||
openTelemetry,
|
openTelemetry, INSTRUMENTATION_NAME, httpSpanNameExtractorBuilder.build())
|
||||||
INSTRUMENTATION_NAME,
|
|
||||||
HttpSpanNameExtractor.create(httpAttributesGetter))
|
|
||||||
.setSpanStatusExtractor(HttpSpanStatusExtractor.create(httpAttributesGetter))
|
.setSpanStatusExtractor(HttpSpanStatusExtractor.create(httpAttributesGetter))
|
||||||
.addAttributesExtractor(httpAttributesExtractorBuilder.build())
|
.addAttributesExtractor(httpAttributesExtractorBuilder.build())
|
||||||
.addAttributesExtractors(additionalExtractors)
|
.addAttributesExtractors(additionalExtractors)
|
||||||
|
|
|
||||||
|
|
@ -26,6 +26,7 @@ public class JettyHttpClientSingletons {
|
||||||
.setCapturedRequestHeaders(CommonConfig.get().getClientRequestHeaders())
|
.setCapturedRequestHeaders(CommonConfig.get().getClientRequestHeaders())
|
||||||
.setCapturedResponseHeaders(CommonConfig.get().getClientResponseHeaders())
|
.setCapturedResponseHeaders(CommonConfig.get().getClientResponseHeaders())
|
||||||
.setKnownMethods(CommonConfig.get().getKnownHttpRequestMethods()),
|
.setKnownMethods(CommonConfig.get().getKnownHttpRequestMethods()),
|
||||||
|
builder -> builder.setKnownMethods(CommonConfig.get().getKnownHttpRequestMethods()),
|
||||||
singletonList(
|
singletonList(
|
||||||
PeerServiceAttributesExtractor.create(
|
PeerServiceAttributesExtractor.create(
|
||||||
JettyClientHttpAttributesGetter.INSTANCE,
|
JettyClientHttpAttributesGetter.INSTANCE,
|
||||||
|
|
|
||||||
|
|
@ -9,6 +9,7 @@ import com.google.errorprone.annotations.CanIgnoreReturnValue;
|
||||||
import io.opentelemetry.api.OpenTelemetry;
|
import io.opentelemetry.api.OpenTelemetry;
|
||||||
import io.opentelemetry.instrumentation.api.instrumenter.AttributesExtractor;
|
import io.opentelemetry.instrumentation.api.instrumenter.AttributesExtractor;
|
||||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpClientAttributesExtractorBuilder;
|
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpClientAttributesExtractorBuilder;
|
||||||
|
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanNameExtractorBuilder;
|
||||||
import io.opentelemetry.instrumentation.jetty.httpclient.v9_2.internal.JettyClientInstrumenterFactory;
|
import io.opentelemetry.instrumentation.jetty.httpclient.v9_2.internal.JettyClientInstrumenterFactory;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
@ -27,6 +28,8 @@ public final class JettyClientTelemetryBuilder {
|
||||||
new ArrayList<>();
|
new ArrayList<>();
|
||||||
private Consumer<HttpClientAttributesExtractorBuilder<Request, Response>> extractorConfigurer =
|
private Consumer<HttpClientAttributesExtractorBuilder<Request, Response>> extractorConfigurer =
|
||||||
builder -> {};
|
builder -> {};
|
||||||
|
private Consumer<HttpSpanNameExtractorBuilder<Request>> spanNameExtractorConfigurer =
|
||||||
|
builder -> {};
|
||||||
private boolean emitExperimentalHttpClientMetrics = false;
|
private boolean emitExperimentalHttpClientMetrics = false;
|
||||||
private HttpClientTransport httpClientTransport;
|
private HttpClientTransport httpClientTransport;
|
||||||
private SslContextFactory sslContextFactory;
|
private SslContextFactory sslContextFactory;
|
||||||
|
|
@ -100,6 +103,8 @@ public final class JettyClientTelemetryBuilder {
|
||||||
public JettyClientTelemetryBuilder setKnownMethods(Set<String> knownMethods) {
|
public JettyClientTelemetryBuilder setKnownMethods(Set<String> knownMethods) {
|
||||||
extractorConfigurer =
|
extractorConfigurer =
|
||||||
extractorConfigurer.andThen(builder -> builder.setKnownMethods(knownMethods));
|
extractorConfigurer.andThen(builder -> builder.setKnownMethods(knownMethods));
|
||||||
|
spanNameExtractorConfigurer =
|
||||||
|
spanNameExtractorConfigurer.andThen(builder -> builder.setKnownMethods(knownMethods));
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -126,6 +131,7 @@ public final class JettyClientTelemetryBuilder {
|
||||||
JettyClientInstrumenterFactory.create(
|
JettyClientInstrumenterFactory.create(
|
||||||
openTelemetry,
|
openTelemetry,
|
||||||
extractorConfigurer,
|
extractorConfigurer,
|
||||||
|
spanNameExtractorConfigurer,
|
||||||
additionalExtractors,
|
additionalExtractors,
|
||||||
emitExperimentalHttpClientMetrics),
|
emitExperimentalHttpClientMetrics),
|
||||||
sslContextFactory,
|
sslContextFactory,
|
||||||
|
|
|
||||||
|
|
@ -14,6 +14,7 @@ import io.opentelemetry.instrumentation.api.instrumenter.http.HttpClientAttribut
|
||||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpClientExperimentalMetrics;
|
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpClientExperimentalMetrics;
|
||||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpClientMetrics;
|
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpClientMetrics;
|
||||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanNameExtractor;
|
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanNameExtractor;
|
||||||
|
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanNameExtractorBuilder;
|
||||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanStatusExtractor;
|
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanStatusExtractor;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.function.Consumer;
|
import java.util.function.Consumer;
|
||||||
|
|
@ -31,6 +32,7 @@ public final class JettyClientInstrumenterFactory {
|
||||||
public static Instrumenter<Request, Response> create(
|
public static Instrumenter<Request, Response> create(
|
||||||
OpenTelemetry openTelemetry,
|
OpenTelemetry openTelemetry,
|
||||||
Consumer<HttpClientAttributesExtractorBuilder<Request, Response>> extractorConfigurer,
|
Consumer<HttpClientAttributesExtractorBuilder<Request, Response>> extractorConfigurer,
|
||||||
|
Consumer<HttpSpanNameExtractorBuilder<Request>> spanNameExtractorConfigurer,
|
||||||
List<AttributesExtractor<? super Request, ? super Response>> additionalExtractors,
|
List<AttributesExtractor<? super Request, ? super Response>> additionalExtractors,
|
||||||
boolean emitExperimentalHttpClientMetrics) {
|
boolean emitExperimentalHttpClientMetrics) {
|
||||||
|
|
||||||
|
|
@ -40,11 +42,13 @@ public final class JettyClientInstrumenterFactory {
|
||||||
HttpClientAttributesExtractor.builder(httpAttributesGetter);
|
HttpClientAttributesExtractor.builder(httpAttributesGetter);
|
||||||
extractorConfigurer.accept(httpAttributesExtractorBuilder);
|
extractorConfigurer.accept(httpAttributesExtractorBuilder);
|
||||||
|
|
||||||
|
HttpSpanNameExtractorBuilder<Request> httpSpanNameExtractorBuilder =
|
||||||
|
HttpSpanNameExtractor.builder(httpAttributesGetter);
|
||||||
|
spanNameExtractorConfigurer.accept(httpSpanNameExtractorBuilder);
|
||||||
|
|
||||||
InstrumenterBuilder<Request, Response> builder =
|
InstrumenterBuilder<Request, Response> builder =
|
||||||
Instrumenter.<Request, Response>builder(
|
Instrumenter.<Request, Response>builder(
|
||||||
openTelemetry,
|
openTelemetry, INSTRUMENTATION_NAME, httpSpanNameExtractorBuilder.build())
|
||||||
INSTRUMENTATION_NAME,
|
|
||||||
HttpSpanNameExtractor.create(httpAttributesGetter))
|
|
||||||
.setSpanStatusExtractor(HttpSpanStatusExtractor.create(httpAttributesGetter))
|
.setSpanStatusExtractor(HttpSpanStatusExtractor.create(httpAttributesGetter))
|
||||||
.addAttributesExtractor(httpAttributesExtractorBuilder.build())
|
.addAttributesExtractor(httpAttributesExtractorBuilder.build())
|
||||||
.addAttributesExtractors(additionalExtractors)
|
.addAttributesExtractors(additionalExtractors)
|
||||||
|
|
|
||||||
|
|
@ -30,7 +30,9 @@ public final class JoddHttpSingletons {
|
||||||
Instrumenter.<HttpRequest, HttpResponse>builder(
|
Instrumenter.<HttpRequest, HttpResponse>builder(
|
||||||
GlobalOpenTelemetry.get(),
|
GlobalOpenTelemetry.get(),
|
||||||
INSTRUMENTATION_NAME,
|
INSTRUMENTATION_NAME,
|
||||||
HttpSpanNameExtractor.create(httpAttributesGetter))
|
HttpSpanNameExtractor.builder(httpAttributesGetter)
|
||||||
|
.setKnownMethods(CommonConfig.get().getKnownHttpRequestMethods())
|
||||||
|
.build())
|
||||||
.setSpanStatusExtractor(HttpSpanStatusExtractor.create(httpAttributesGetter))
|
.setSpanStatusExtractor(HttpSpanStatusExtractor.create(httpAttributesGetter))
|
||||||
.addAttributesExtractor(
|
.addAttributesExtractor(
|
||||||
HttpClientAttributesExtractor.builder(httpAttributesGetter)
|
HttpClientAttributesExtractor.builder(httpAttributesGetter)
|
||||||
|
|
|
||||||
|
|
@ -38,6 +38,8 @@ class KtorServerTracing private constructor(
|
||||||
|
|
||||||
internal val httpAttributesExtractorBuilder = HttpServerAttributesExtractor.builder(KtorHttpServerAttributesGetter.INSTANCE)
|
internal val httpAttributesExtractorBuilder = HttpServerAttributesExtractor.builder(KtorHttpServerAttributesGetter.INSTANCE)
|
||||||
|
|
||||||
|
internal val httpSpanNameExtractorBuilder = HttpSpanNameExtractor.builder(KtorHttpServerAttributesGetter.INSTANCE)
|
||||||
|
|
||||||
internal var statusExtractor:
|
internal var statusExtractor:
|
||||||
(SpanStatusExtractor<ApplicationRequest, ApplicationResponse>) -> SpanStatusExtractor<in ApplicationRequest, in ApplicationResponse> = { a -> a }
|
(SpanStatusExtractor<ApplicationRequest, ApplicationResponse>) -> SpanStatusExtractor<in ApplicationRequest, in ApplicationResponse> = { a -> a }
|
||||||
|
|
||||||
|
|
@ -74,6 +76,7 @@ class KtorServerTracing private constructor(
|
||||||
|
|
||||||
fun setKnownMethods(knownMethods: Set<String>) {
|
fun setKnownMethods(knownMethods: Set<String>) {
|
||||||
httpAttributesExtractorBuilder.setKnownMethods(knownMethods)
|
httpAttributesExtractorBuilder.setKnownMethods(knownMethods)
|
||||||
|
httpSpanNameExtractorBuilder.setKnownMethods(knownMethods)
|
||||||
}
|
}
|
||||||
|
|
||||||
internal fun isOpenTelemetryInitialized(): Boolean = this::openTelemetry.isInitialized
|
internal fun isOpenTelemetryInitialized(): Boolean = this::openTelemetry.isInitialized
|
||||||
|
|
@ -112,7 +115,7 @@ class KtorServerTracing private constructor(
|
||||||
val instrumenterBuilder = Instrumenter.builder<ApplicationRequest, ApplicationResponse>(
|
val instrumenterBuilder = Instrumenter.builder<ApplicationRequest, ApplicationResponse>(
|
||||||
configuration.openTelemetry,
|
configuration.openTelemetry,
|
||||||
INSTRUMENTATION_NAME,
|
INSTRUMENTATION_NAME,
|
||||||
HttpSpanNameExtractor.create(httpAttributesGetter),
|
configuration.httpSpanNameExtractorBuilder.build()
|
||||||
)
|
)
|
||||||
|
|
||||||
configuration.additionalExtractors.forEach { instrumenterBuilder.addAttributesExtractor(it) }
|
configuration.additionalExtractors.forEach { instrumenterBuilder.addAttributesExtractor(it) }
|
||||||
|
|
|
||||||
|
|
@ -23,6 +23,7 @@ class KtorClientTracingBuilder {
|
||||||
private var openTelemetry: OpenTelemetry? = null
|
private var openTelemetry: OpenTelemetry? = null
|
||||||
private val additionalExtractors = mutableListOf<AttributesExtractor<in HttpRequestData, in HttpResponse>>()
|
private val additionalExtractors = mutableListOf<AttributesExtractor<in HttpRequestData, in HttpResponse>>()
|
||||||
private val httpAttributesExtractorBuilder = HttpClientAttributesExtractor.builder(KtorHttpClientAttributesGetter)
|
private val httpAttributesExtractorBuilder = HttpClientAttributesExtractor.builder(KtorHttpClientAttributesGetter)
|
||||||
|
private val httpSpanNameExtractorBuilder = HttpSpanNameExtractor.builder(KtorHttpClientAttributesGetter)
|
||||||
private var emitExperimentalHttpClientMetrics = false
|
private var emitExperimentalHttpClientMetrics = false
|
||||||
|
|
||||||
fun setOpenTelemetry(openTelemetry: OpenTelemetry) {
|
fun setOpenTelemetry(openTelemetry: OpenTelemetry) {
|
||||||
|
|
@ -45,6 +46,7 @@ class KtorClientTracingBuilder {
|
||||||
|
|
||||||
fun setKnownMethods(knownMethods: Set<String>) {
|
fun setKnownMethods(knownMethods: Set<String>) {
|
||||||
httpAttributesExtractorBuilder.setKnownMethods(knownMethods)
|
httpAttributesExtractorBuilder.setKnownMethods(knownMethods)
|
||||||
|
httpSpanNameExtractorBuilder.setKnownMethods(knownMethods)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun addAttributesExtractors(vararg extractors: AttributesExtractor<in HttpRequestData, in HttpResponse>) =
|
fun addAttributesExtractors(vararg extractors: AttributesExtractor<in HttpRequestData, in HttpResponse>) =
|
||||||
|
|
@ -72,7 +74,7 @@ class KtorClientTracingBuilder {
|
||||||
val instrumenterBuilder = Instrumenter.builder<HttpRequestData, HttpResponse>(
|
val instrumenterBuilder = Instrumenter.builder<HttpRequestData, HttpResponse>(
|
||||||
initializedOpenTelemetry,
|
initializedOpenTelemetry,
|
||||||
INSTRUMENTATION_NAME,
|
INSTRUMENTATION_NAME,
|
||||||
HttpSpanNameExtractor.create(KtorHttpClientAttributesGetter),
|
httpSpanNameExtractorBuilder.build()
|
||||||
)
|
)
|
||||||
.setSpanStatusExtractor(HttpSpanStatusExtractor.create(KtorHttpClientAttributesGetter))
|
.setSpanStatusExtractor(HttpSpanStatusExtractor.create(KtorHttpClientAttributesGetter))
|
||||||
.addAttributesExtractor(httpAttributesExtractorBuilder.build())
|
.addAttributesExtractor(httpAttributesExtractorBuilder.build())
|
||||||
|
|
|
||||||
|
|
@ -39,6 +39,8 @@ class KtorServerTracing private constructor(
|
||||||
|
|
||||||
internal val httpAttributesExtractorBuilder = HttpServerAttributesExtractor.builder(KtorHttpServerAttributesGetter.INSTANCE)
|
internal val httpAttributesExtractorBuilder = HttpServerAttributesExtractor.builder(KtorHttpServerAttributesGetter.INSTANCE)
|
||||||
|
|
||||||
|
internal val httpSpanNameExtractorBuilder = HttpSpanNameExtractor.builder(KtorHttpServerAttributesGetter.INSTANCE)
|
||||||
|
|
||||||
internal var statusExtractor:
|
internal var statusExtractor:
|
||||||
(SpanStatusExtractor<ApplicationRequest, ApplicationResponse>) -> SpanStatusExtractor<in ApplicationRequest, in ApplicationResponse> = { a -> a }
|
(SpanStatusExtractor<ApplicationRequest, ApplicationResponse>) -> SpanStatusExtractor<in ApplicationRequest, in ApplicationResponse> = { a -> a }
|
||||||
|
|
||||||
|
|
@ -75,6 +77,7 @@ class KtorServerTracing private constructor(
|
||||||
|
|
||||||
fun setKnownMethods(knownMethods: Set<String>) {
|
fun setKnownMethods(knownMethods: Set<String>) {
|
||||||
httpAttributesExtractorBuilder.setKnownMethods(knownMethods)
|
httpAttributesExtractorBuilder.setKnownMethods(knownMethods)
|
||||||
|
httpSpanNameExtractorBuilder.setKnownMethods(knownMethods)
|
||||||
}
|
}
|
||||||
|
|
||||||
internal fun isOpenTelemetryInitialized(): Boolean = this::openTelemetry.isInitialized
|
internal fun isOpenTelemetryInitialized(): Boolean = this::openTelemetry.isInitialized
|
||||||
|
|
@ -112,7 +115,7 @@ class KtorServerTracing private constructor(
|
||||||
val instrumenterBuilder = Instrumenter.builder<ApplicationRequest, ApplicationResponse>(
|
val instrumenterBuilder = Instrumenter.builder<ApplicationRequest, ApplicationResponse>(
|
||||||
configuration.openTelemetry,
|
configuration.openTelemetry,
|
||||||
INSTRUMENTATION_NAME,
|
INSTRUMENTATION_NAME,
|
||||||
HttpSpanNameExtractor.create(httpAttributesGetter),
|
configuration.httpSpanNameExtractorBuilder.build()
|
||||||
)
|
)
|
||||||
|
|
||||||
configuration.additionalExtractors.forEach { instrumenterBuilder.addAttributesExtractor(it) }
|
configuration.additionalExtractors.forEach { instrumenterBuilder.addAttributesExtractor(it) }
|
||||||
|
|
|
||||||
|
|
@ -29,7 +29,9 @@ public final class LibertyDispatcherSingletons {
|
||||||
Instrumenter.<LibertyRequest, LibertyResponse>builder(
|
Instrumenter.<LibertyRequest, LibertyResponse>builder(
|
||||||
GlobalOpenTelemetry.get(),
|
GlobalOpenTelemetry.get(),
|
||||||
INSTRUMENTATION_NAME,
|
INSTRUMENTATION_NAME,
|
||||||
HttpSpanNameExtractor.create(httpAttributesGetter))
|
HttpSpanNameExtractor.builder(httpAttributesGetter)
|
||||||
|
.setKnownMethods(CommonConfig.get().getKnownHttpRequestMethods())
|
||||||
|
.build())
|
||||||
.setSpanStatusExtractor(HttpSpanStatusExtractor.create(httpAttributesGetter))
|
.setSpanStatusExtractor(HttpSpanStatusExtractor.create(httpAttributesGetter))
|
||||||
.addAttributesExtractor(
|
.addAttributesExtractor(
|
||||||
HttpServerAttributesExtractor.builder(httpAttributesGetter)
|
HttpServerAttributesExtractor.builder(httpAttributesGetter)
|
||||||
|
|
|
||||||
|
|
@ -36,7 +36,9 @@ public final class NettyClientSingletons {
|
||||||
Instrumenter.<HttpRequestAndChannel, HttpResponse>builder(
|
Instrumenter.<HttpRequestAndChannel, HttpResponse>builder(
|
||||||
GlobalOpenTelemetry.get(),
|
GlobalOpenTelemetry.get(),
|
||||||
INSTRUMENTATION_NAME,
|
INSTRUMENTATION_NAME,
|
||||||
HttpSpanNameExtractor.create(httpAttributesGetter))
|
HttpSpanNameExtractor.builder(httpAttributesGetter)
|
||||||
|
.setKnownMethods(CommonConfig.get().getKnownHttpRequestMethods())
|
||||||
|
.build())
|
||||||
.setSpanStatusExtractor(HttpSpanStatusExtractor.create(httpAttributesGetter))
|
.setSpanStatusExtractor(HttpSpanStatusExtractor.create(httpAttributesGetter))
|
||||||
.addAttributesExtractor(
|
.addAttributesExtractor(
|
||||||
HttpClientAttributesExtractor.builder(httpAttributesGetter)
|
HttpClientAttributesExtractor.builder(httpAttributesGetter)
|
||||||
|
|
|
||||||
|
|
@ -31,7 +31,9 @@ final class NettyServerSingletons {
|
||||||
Instrumenter.<HttpRequestAndChannel, HttpResponse>builder(
|
Instrumenter.<HttpRequestAndChannel, HttpResponse>builder(
|
||||||
GlobalOpenTelemetry.get(),
|
GlobalOpenTelemetry.get(),
|
||||||
"io.opentelemetry.netty-3.8",
|
"io.opentelemetry.netty-3.8",
|
||||||
HttpSpanNameExtractor.create(httpServerAttributesGetter))
|
HttpSpanNameExtractor.builder(httpServerAttributesGetter)
|
||||||
|
.setKnownMethods(CommonConfig.get().getKnownHttpRequestMethods())
|
||||||
|
.build())
|
||||||
.setSpanStatusExtractor(HttpSpanStatusExtractor.create(httpServerAttributesGetter))
|
.setSpanStatusExtractor(HttpSpanStatusExtractor.create(httpServerAttributesGetter))
|
||||||
.addAttributesExtractor(
|
.addAttributesExtractor(
|
||||||
HttpServerAttributesExtractor.builder(httpServerAttributesGetter)
|
HttpServerAttributesExtractor.builder(httpServerAttributesGetter)
|
||||||
|
|
|
||||||
|
|
@ -17,6 +17,7 @@ import io.opentelemetry.instrumentation.api.instrumenter.http.HttpClientAttribut
|
||||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpClientExperimentalMetrics;
|
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpClientExperimentalMetrics;
|
||||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpClientMetrics;
|
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpClientMetrics;
|
||||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanNameExtractor;
|
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanNameExtractor;
|
||||||
|
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanNameExtractorBuilder;
|
||||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanStatusExtractor;
|
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanStatusExtractor;
|
||||||
import io.opentelemetry.instrumentation.api.instrumenter.net.PeerServiceAttributesExtractor;
|
import io.opentelemetry.instrumentation.api.instrumenter.net.PeerServiceAttributesExtractor;
|
||||||
import io.opentelemetry.instrumentation.netty.common.internal.NettyConnectionRequest;
|
import io.opentelemetry.instrumentation.netty.common.internal.NettyConnectionRequest;
|
||||||
|
|
@ -56,6 +57,7 @@ public final class NettyClientInstrumenterFactory {
|
||||||
public Instrumenter<HttpRequestAndChannel, HttpResponse> createHttpInstrumenter(
|
public Instrumenter<HttpRequestAndChannel, HttpResponse> createHttpInstrumenter(
|
||||||
Consumer<HttpClientAttributesExtractorBuilder<HttpRequestAndChannel, HttpResponse>>
|
Consumer<HttpClientAttributesExtractorBuilder<HttpRequestAndChannel, HttpResponse>>
|
||||||
extractorConfigurer,
|
extractorConfigurer,
|
||||||
|
Consumer<HttpSpanNameExtractorBuilder<HttpRequestAndChannel>> spanNameExtractorConfigurer,
|
||||||
List<AttributesExtractor<HttpRequestAndChannel, HttpResponse>>
|
List<AttributesExtractor<HttpRequestAndChannel, HttpResponse>>
|
||||||
additionalHttpAttributeExtractors) {
|
additionalHttpAttributeExtractors) {
|
||||||
NettyHttpClientAttributesGetter httpAttributesGetter = new NettyHttpClientAttributesGetter();
|
NettyHttpClientAttributesGetter httpAttributesGetter = new NettyHttpClientAttributesGetter();
|
||||||
|
|
@ -64,11 +66,13 @@ public final class NettyClientInstrumenterFactory {
|
||||||
HttpClientAttributesExtractor.builder(httpAttributesGetter);
|
HttpClientAttributesExtractor.builder(httpAttributesGetter);
|
||||||
extractorConfigurer.accept(extractorBuilder);
|
extractorConfigurer.accept(extractorBuilder);
|
||||||
|
|
||||||
|
HttpSpanNameExtractorBuilder<HttpRequestAndChannel> httpSpanNameExtractorBuilder =
|
||||||
|
HttpSpanNameExtractor.builder(httpAttributesGetter);
|
||||||
|
spanNameExtractorConfigurer.accept(httpSpanNameExtractorBuilder);
|
||||||
|
|
||||||
InstrumenterBuilder<HttpRequestAndChannel, HttpResponse> builder =
|
InstrumenterBuilder<HttpRequestAndChannel, HttpResponse> builder =
|
||||||
Instrumenter.<HttpRequestAndChannel, HttpResponse>builder(
|
Instrumenter.<HttpRequestAndChannel, HttpResponse>builder(
|
||||||
openTelemetry,
|
openTelemetry, instrumentationName, httpSpanNameExtractorBuilder.build())
|
||||||
instrumentationName,
|
|
||||||
HttpSpanNameExtractor.create(httpAttributesGetter))
|
|
||||||
.setSpanStatusExtractor(HttpSpanStatusExtractor.create(httpAttributesGetter))
|
.setSpanStatusExtractor(HttpSpanStatusExtractor.create(httpAttributesGetter))
|
||||||
.addAttributesExtractor(extractorBuilder.build())
|
.addAttributesExtractor(extractorBuilder.build())
|
||||||
.addAttributesExtractor(
|
.addAttributesExtractor(
|
||||||
|
|
|
||||||
|
|
@ -15,6 +15,7 @@ import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerExperime
|
||||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerMetrics;
|
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerMetrics;
|
||||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRoute;
|
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRoute;
|
||||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanNameExtractor;
|
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanNameExtractor;
|
||||||
|
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanNameExtractorBuilder;
|
||||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanStatusExtractor;
|
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanStatusExtractor;
|
||||||
import io.opentelemetry.instrumentation.netty.common.internal.NettyErrorHolder;
|
import io.opentelemetry.instrumentation.netty.common.internal.NettyErrorHolder;
|
||||||
import io.opentelemetry.instrumentation.netty.v4.common.HttpRequestAndChannel;
|
import io.opentelemetry.instrumentation.netty.v4.common.HttpRequestAndChannel;
|
||||||
|
|
@ -31,6 +32,7 @@ public final class NettyServerInstrumenterFactory {
|
||||||
String instrumentationName,
|
String instrumentationName,
|
||||||
Consumer<HttpServerAttributesExtractorBuilder<HttpRequestAndChannel, HttpResponse>>
|
Consumer<HttpServerAttributesExtractorBuilder<HttpRequestAndChannel, HttpResponse>>
|
||||||
extractorConfigurer,
|
extractorConfigurer,
|
||||||
|
Consumer<HttpSpanNameExtractorBuilder<HttpRequestAndChannel>> spanNameExtractorConfigurer,
|
||||||
boolean emitExperimentalHttpServerMetrics) {
|
boolean emitExperimentalHttpServerMetrics) {
|
||||||
|
|
||||||
NettyHttpServerAttributesGetter httpAttributesGetter = new NettyHttpServerAttributesGetter();
|
NettyHttpServerAttributesGetter httpAttributesGetter = new NettyHttpServerAttributesGetter();
|
||||||
|
|
@ -39,11 +41,13 @@ public final class NettyServerInstrumenterFactory {
|
||||||
HttpServerAttributesExtractor.builder(httpAttributesGetter);
|
HttpServerAttributesExtractor.builder(httpAttributesGetter);
|
||||||
extractorConfigurer.accept(extractorBuilder);
|
extractorConfigurer.accept(extractorBuilder);
|
||||||
|
|
||||||
|
HttpSpanNameExtractorBuilder<HttpRequestAndChannel> httpSpanNameExtractorBuilder =
|
||||||
|
HttpSpanNameExtractor.builder(httpAttributesGetter);
|
||||||
|
spanNameExtractorConfigurer.accept(httpSpanNameExtractorBuilder);
|
||||||
|
|
||||||
InstrumenterBuilder<HttpRequestAndChannel, HttpResponse> builder =
|
InstrumenterBuilder<HttpRequestAndChannel, HttpResponse> builder =
|
||||||
Instrumenter.<HttpRequestAndChannel, HttpResponse>builder(
|
Instrumenter.<HttpRequestAndChannel, HttpResponse>builder(
|
||||||
openTelemetry,
|
openTelemetry, instrumentationName, httpSpanNameExtractorBuilder.build())
|
||||||
instrumentationName,
|
|
||||||
HttpSpanNameExtractor.create(httpAttributesGetter))
|
|
||||||
.setSpanStatusExtractor(HttpSpanStatusExtractor.create(httpAttributesGetter))
|
.setSpanStatusExtractor(HttpSpanStatusExtractor.create(httpAttributesGetter))
|
||||||
.addAttributesExtractor(extractorBuilder.build())
|
.addAttributesExtractor(extractorBuilder.build())
|
||||||
.addOperationMetrics(HttpServerMetrics.get());
|
.addOperationMetrics(HttpServerMetrics.get());
|
||||||
|
|
|
||||||
|
|
@ -56,6 +56,7 @@ public final class NettyClientSingletons {
|
||||||
.setCapturedRequestHeaders(CommonConfig.get().getClientRequestHeaders())
|
.setCapturedRequestHeaders(CommonConfig.get().getClientRequestHeaders())
|
||||||
.setCapturedResponseHeaders(CommonConfig.get().getClientResponseHeaders())
|
.setCapturedResponseHeaders(CommonConfig.get().getClientResponseHeaders())
|
||||||
.setKnownMethods(CommonConfig.get().getKnownHttpRequestMethods()),
|
.setKnownMethods(CommonConfig.get().getKnownHttpRequestMethods()),
|
||||||
|
builder -> builder.setKnownMethods(CommonConfig.get().getKnownHttpRequestMethods()),
|
||||||
Collections.emptyList());
|
Collections.emptyList());
|
||||||
CONNECTION_INSTRUMENTER = factory.createConnectionInstrumenter();
|
CONNECTION_INSTRUMENTER = factory.createConnectionInstrumenter();
|
||||||
SSL_INSTRUMENTER = factory.createSslInstrumenter();
|
SSL_INSTRUMENTER = factory.createSslInstrumenter();
|
||||||
|
|
|
||||||
|
|
@ -23,6 +23,7 @@ public final class NettyServerSingletons {
|
||||||
.setCapturedRequestHeaders(CommonConfig.get().getServerRequestHeaders())
|
.setCapturedRequestHeaders(CommonConfig.get().getServerRequestHeaders())
|
||||||
.setCapturedResponseHeaders(CommonConfig.get().getServerResponseHeaders())
|
.setCapturedResponseHeaders(CommonConfig.get().getServerResponseHeaders())
|
||||||
.setKnownMethods(CommonConfig.get().getKnownHttpRequestMethods()),
|
.setKnownMethods(CommonConfig.get().getKnownHttpRequestMethods()),
|
||||||
|
builder -> builder.setKnownMethods(CommonConfig.get().getKnownHttpRequestMethods()),
|
||||||
CommonConfig.get().shouldEmitExperimentalHttpServerMetrics());
|
CommonConfig.get().shouldEmitExperimentalHttpServerMetrics());
|
||||||
|
|
||||||
public static Instrumenter<HttpRequestAndChannel, HttpResponse> instrumenter() {
|
public static Instrumenter<HttpRequestAndChannel, HttpResponse> instrumenter() {
|
||||||
|
|
|
||||||
|
|
@ -56,6 +56,7 @@ public final class NettyClientSingletons {
|
||||||
.setCapturedRequestHeaders(CommonConfig.get().getClientRequestHeaders())
|
.setCapturedRequestHeaders(CommonConfig.get().getClientRequestHeaders())
|
||||||
.setCapturedResponseHeaders(CommonConfig.get().getClientResponseHeaders())
|
.setCapturedResponseHeaders(CommonConfig.get().getClientResponseHeaders())
|
||||||
.setKnownMethods(CommonConfig.get().getKnownHttpRequestMethods()),
|
.setKnownMethods(CommonConfig.get().getKnownHttpRequestMethods()),
|
||||||
|
builder -> builder.setKnownMethods(CommonConfig.get().getKnownHttpRequestMethods()),
|
||||||
Collections.emptyList());
|
Collections.emptyList());
|
||||||
CONNECTION_INSTRUMENTER = factory.createConnectionInstrumenter();
|
CONNECTION_INSTRUMENTER = factory.createConnectionInstrumenter();
|
||||||
SSL_INSTRUMENTER = factory.createSslInstrumenter();
|
SSL_INSTRUMENTER = factory.createSslInstrumenter();
|
||||||
|
|
|
||||||
|
|
@ -23,6 +23,7 @@ public final class NettyServerSingletons {
|
||||||
.setCapturedRequestHeaders(CommonConfig.get().getServerRequestHeaders())
|
.setCapturedRequestHeaders(CommonConfig.get().getServerRequestHeaders())
|
||||||
.setCapturedResponseHeaders(CommonConfig.get().getServerResponseHeaders())
|
.setCapturedResponseHeaders(CommonConfig.get().getServerResponseHeaders())
|
||||||
.setKnownMethods(CommonConfig.get().getKnownHttpRequestMethods()),
|
.setKnownMethods(CommonConfig.get().getKnownHttpRequestMethods()),
|
||||||
|
builder -> builder.setKnownMethods(CommonConfig.get().getKnownHttpRequestMethods()),
|
||||||
CommonConfig.get().shouldEmitExperimentalHttpServerMetrics());
|
CommonConfig.get().shouldEmitExperimentalHttpServerMetrics());
|
||||||
|
|
||||||
public static Instrumenter<HttpRequestAndChannel, HttpResponse> instrumenter() {
|
public static Instrumenter<HttpRequestAndChannel, HttpResponse> instrumenter() {
|
||||||
|
|
|
||||||
|
|
@ -10,6 +10,7 @@ import io.netty.handler.codec.http.HttpResponse;
|
||||||
import io.opentelemetry.api.OpenTelemetry;
|
import io.opentelemetry.api.OpenTelemetry;
|
||||||
import io.opentelemetry.instrumentation.api.instrumenter.AttributesExtractor;
|
import io.opentelemetry.instrumentation.api.instrumenter.AttributesExtractor;
|
||||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpClientAttributesExtractorBuilder;
|
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpClientAttributesExtractorBuilder;
|
||||||
|
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanNameExtractorBuilder;
|
||||||
import io.opentelemetry.instrumentation.netty.v4.common.HttpRequestAndChannel;
|
import io.opentelemetry.instrumentation.netty.v4.common.HttpRequestAndChannel;
|
||||||
import io.opentelemetry.instrumentation.netty.v4.common.internal.client.NettyClientInstrumenterFactory;
|
import io.opentelemetry.instrumentation.netty.v4.common.internal.client.NettyClientInstrumenterFactory;
|
||||||
import io.opentelemetry.instrumentation.netty.v4.common.internal.client.NettyConnectionInstrumentationFlag;
|
import io.opentelemetry.instrumentation.netty.v4.common.internal.client.NettyConnectionInstrumentationFlag;
|
||||||
|
|
@ -28,6 +29,8 @@ public final class NettyClientTelemetryBuilder {
|
||||||
|
|
||||||
private Consumer<HttpClientAttributesExtractorBuilder<HttpRequestAndChannel, HttpResponse>>
|
private Consumer<HttpClientAttributesExtractorBuilder<HttpRequestAndChannel, HttpResponse>>
|
||||||
extractorConfigurer = builder -> {};
|
extractorConfigurer = builder -> {};
|
||||||
|
private Consumer<HttpSpanNameExtractorBuilder<HttpRequestAndChannel>>
|
||||||
|
spanNameExtractorConfigurer = builder -> {};
|
||||||
private boolean emitExperimentalHttpClientMetrics = false;
|
private boolean emitExperimentalHttpClientMetrics = false;
|
||||||
|
|
||||||
NettyClientTelemetryBuilder(OpenTelemetry openTelemetry) {
|
NettyClientTelemetryBuilder(OpenTelemetry openTelemetry) {
|
||||||
|
|
@ -90,6 +93,8 @@ public final class NettyClientTelemetryBuilder {
|
||||||
public NettyClientTelemetryBuilder setKnownMethods(Set<String> knownMethods) {
|
public NettyClientTelemetryBuilder setKnownMethods(Set<String> knownMethods) {
|
||||||
extractorConfigurer =
|
extractorConfigurer =
|
||||||
extractorConfigurer.andThen(builder -> builder.setKnownMethods(knownMethods));
|
extractorConfigurer.andThen(builder -> builder.setKnownMethods(knownMethods));
|
||||||
|
spanNameExtractorConfigurer =
|
||||||
|
spanNameExtractorConfigurer.andThen(builder -> builder.setKnownMethods(knownMethods));
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -116,6 +121,7 @@ public final class NettyClientTelemetryBuilder {
|
||||||
NettyConnectionInstrumentationFlag.DISABLED,
|
NettyConnectionInstrumentationFlag.DISABLED,
|
||||||
Collections.emptyMap(),
|
Collections.emptyMap(),
|
||||||
emitExperimentalHttpClientMetrics)
|
emitExperimentalHttpClientMetrics)
|
||||||
.createHttpInstrumenter(extractorConfigurer, additionalAttributesExtractors));
|
.createHttpInstrumenter(
|
||||||
|
extractorConfigurer, spanNameExtractorConfigurer, additionalAttributesExtractors));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -9,6 +9,7 @@ import com.google.errorprone.annotations.CanIgnoreReturnValue;
|
||||||
import io.netty.handler.codec.http.HttpResponse;
|
import io.netty.handler.codec.http.HttpResponse;
|
||||||
import io.opentelemetry.api.OpenTelemetry;
|
import io.opentelemetry.api.OpenTelemetry;
|
||||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerAttributesExtractorBuilder;
|
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerAttributesExtractorBuilder;
|
||||||
|
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanNameExtractorBuilder;
|
||||||
import io.opentelemetry.instrumentation.netty.v4.common.HttpRequestAndChannel;
|
import io.opentelemetry.instrumentation.netty.v4.common.HttpRequestAndChannel;
|
||||||
import io.opentelemetry.instrumentation.netty.v4.common.internal.server.NettyServerInstrumenterFactory;
|
import io.opentelemetry.instrumentation.netty.v4.common.internal.server.NettyServerInstrumenterFactory;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
@ -22,6 +23,8 @@ public final class NettyServerTelemetryBuilder {
|
||||||
|
|
||||||
private Consumer<HttpServerAttributesExtractorBuilder<HttpRequestAndChannel, HttpResponse>>
|
private Consumer<HttpServerAttributesExtractorBuilder<HttpRequestAndChannel, HttpResponse>>
|
||||||
extractorConfigurer = builder -> {};
|
extractorConfigurer = builder -> {};
|
||||||
|
private Consumer<HttpSpanNameExtractorBuilder<HttpRequestAndChannel>>
|
||||||
|
spanNameExtractorConfigurer = builder -> {};
|
||||||
private boolean emitExperimentalHttpServerMetrics = false;
|
private boolean emitExperimentalHttpServerMetrics = false;
|
||||||
|
|
||||||
NettyServerTelemetryBuilder(OpenTelemetry openTelemetry) {
|
NettyServerTelemetryBuilder(OpenTelemetry openTelemetry) {
|
||||||
|
|
@ -73,6 +76,8 @@ public final class NettyServerTelemetryBuilder {
|
||||||
public NettyServerTelemetryBuilder setKnownMethods(Set<String> knownMethods) {
|
public NettyServerTelemetryBuilder setKnownMethods(Set<String> knownMethods) {
|
||||||
extractorConfigurer =
|
extractorConfigurer =
|
||||||
extractorConfigurer.andThen(builder -> builder.setKnownMethods(knownMethods));
|
extractorConfigurer.andThen(builder -> builder.setKnownMethods(knownMethods));
|
||||||
|
spanNameExtractorConfigurer =
|
||||||
|
spanNameExtractorConfigurer.andThen(builder -> builder.setKnownMethods(knownMethods));
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -96,6 +101,7 @@ public final class NettyServerTelemetryBuilder {
|
||||||
openTelemetry,
|
openTelemetry,
|
||||||
"io.opentelemetry.netty-4.1",
|
"io.opentelemetry.netty-4.1",
|
||||||
extractorConfigurer,
|
extractorConfigurer,
|
||||||
|
spanNameExtractorConfigurer,
|
||||||
emitExperimentalHttpServerMetrics));
|
emitExperimentalHttpServerMetrics));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -37,7 +37,9 @@ public final class OkHttp2Singletons {
|
||||||
Instrumenter.<Request, Response>builder(
|
Instrumenter.<Request, Response>builder(
|
||||||
openTelemetry,
|
openTelemetry,
|
||||||
INSTRUMENTATION_NAME,
|
INSTRUMENTATION_NAME,
|
||||||
HttpSpanNameExtractor.create(httpAttributesGetter))
|
HttpSpanNameExtractor.builder(httpAttributesGetter)
|
||||||
|
.setKnownMethods(CommonConfig.get().getKnownHttpRequestMethods())
|
||||||
|
.build())
|
||||||
.setSpanStatusExtractor(HttpSpanStatusExtractor.create(httpAttributesGetter))
|
.setSpanStatusExtractor(HttpSpanStatusExtractor.create(httpAttributesGetter))
|
||||||
.addAttributesExtractor(
|
.addAttributesExtractor(
|
||||||
HttpClientAttributesExtractor.builder(httpAttributesGetter)
|
HttpClientAttributesExtractor.builder(httpAttributesGetter)
|
||||||
|
|
|
||||||
|
|
@ -33,6 +33,7 @@ public final class OkHttp3Singletons {
|
||||||
.setCapturedRequestHeaders(CommonConfig.get().getClientRequestHeaders())
|
.setCapturedRequestHeaders(CommonConfig.get().getClientRequestHeaders())
|
||||||
.setCapturedResponseHeaders(CommonConfig.get().getClientResponseHeaders())
|
.setCapturedResponseHeaders(CommonConfig.get().getClientResponseHeaders())
|
||||||
.setKnownMethods(CommonConfig.get().getKnownHttpRequestMethods()),
|
.setKnownMethods(CommonConfig.get().getKnownHttpRequestMethods()),
|
||||||
|
builder -> builder.setKnownMethods(CommonConfig.get().getKnownHttpRequestMethods()),
|
||||||
singletonList(
|
singletonList(
|
||||||
PeerServiceAttributesExtractor.create(
|
PeerServiceAttributesExtractor.create(
|
||||||
OkHttpAttributesGetter.INSTANCE, CommonConfig.get().getPeerServiceMapping())),
|
OkHttpAttributesGetter.INSTANCE, CommonConfig.get().getPeerServiceMapping())),
|
||||||
|
|
|
||||||
|
|
@ -9,6 +9,7 @@ import com.google.errorprone.annotations.CanIgnoreReturnValue;
|
||||||
import io.opentelemetry.api.OpenTelemetry;
|
import io.opentelemetry.api.OpenTelemetry;
|
||||||
import io.opentelemetry.instrumentation.api.instrumenter.AttributesExtractor;
|
import io.opentelemetry.instrumentation.api.instrumenter.AttributesExtractor;
|
||||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpClientAttributesExtractorBuilder;
|
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpClientAttributesExtractorBuilder;
|
||||||
|
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanNameExtractorBuilder;
|
||||||
import io.opentelemetry.instrumentation.okhttp.v3_0.internal.OkHttpInstrumenterFactory;
|
import io.opentelemetry.instrumentation.okhttp.v3_0.internal.OkHttpInstrumenterFactory;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
@ -25,6 +26,8 @@ public final class OkHttpTelemetryBuilder {
|
||||||
new ArrayList<>();
|
new ArrayList<>();
|
||||||
private Consumer<HttpClientAttributesExtractorBuilder<Request, Response>> extractorConfigurer =
|
private Consumer<HttpClientAttributesExtractorBuilder<Request, Response>> extractorConfigurer =
|
||||||
builder -> {};
|
builder -> {};
|
||||||
|
private Consumer<HttpSpanNameExtractorBuilder<Request>> spanNameExtractorConfigurer =
|
||||||
|
builder -> {};
|
||||||
private boolean emitExperimentalHttpClientMetrics = false;
|
private boolean emitExperimentalHttpClientMetrics = false;
|
||||||
|
|
||||||
OkHttpTelemetryBuilder(OpenTelemetry openTelemetry) {
|
OkHttpTelemetryBuilder(OpenTelemetry openTelemetry) {
|
||||||
|
|
@ -83,6 +86,8 @@ public final class OkHttpTelemetryBuilder {
|
||||||
public OkHttpTelemetryBuilder setKnownMethods(Set<String> knownMethods) {
|
public OkHttpTelemetryBuilder setKnownMethods(Set<String> knownMethods) {
|
||||||
extractorConfigurer =
|
extractorConfigurer =
|
||||||
extractorConfigurer.andThen(builder -> builder.setKnownMethods(knownMethods));
|
extractorConfigurer.andThen(builder -> builder.setKnownMethods(knownMethods));
|
||||||
|
spanNameExtractorConfigurer =
|
||||||
|
spanNameExtractorConfigurer.andThen(builder -> builder.setKnownMethods(knownMethods));
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -107,6 +112,7 @@ public final class OkHttpTelemetryBuilder {
|
||||||
OkHttpInstrumenterFactory.create(
|
OkHttpInstrumenterFactory.create(
|
||||||
openTelemetry,
|
openTelemetry,
|
||||||
extractorConfigurer,
|
extractorConfigurer,
|
||||||
|
spanNameExtractorConfigurer,
|
||||||
additionalExtractors,
|
additionalExtractors,
|
||||||
emitExperimentalHttpClientMetrics),
|
emitExperimentalHttpClientMetrics),
|
||||||
openTelemetry.getPropagators());
|
openTelemetry.getPropagators());
|
||||||
|
|
|
||||||
|
|
@ -16,6 +16,7 @@ import io.opentelemetry.instrumentation.api.instrumenter.http.HttpClientAttribut
|
||||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpClientExperimentalMetrics;
|
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpClientExperimentalMetrics;
|
||||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpClientMetrics;
|
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpClientMetrics;
|
||||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanNameExtractor;
|
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanNameExtractor;
|
||||||
|
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanNameExtractorBuilder;
|
||||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanStatusExtractor;
|
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanStatusExtractor;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.function.Consumer;
|
import java.util.function.Consumer;
|
||||||
|
|
@ -33,6 +34,7 @@ public final class OkHttpInstrumenterFactory {
|
||||||
public static Instrumenter<Request, Response> create(
|
public static Instrumenter<Request, Response> create(
|
||||||
OpenTelemetry openTelemetry,
|
OpenTelemetry openTelemetry,
|
||||||
Consumer<HttpClientAttributesExtractorBuilder<Request, Response>> extractorConfigurer,
|
Consumer<HttpClientAttributesExtractorBuilder<Request, Response>> extractorConfigurer,
|
||||||
|
Consumer<HttpSpanNameExtractorBuilder<Request>> spanNameExtractorConfigurer,
|
||||||
List<AttributesExtractor<Request, Response>> additionalAttributesExtractors,
|
List<AttributesExtractor<Request, Response>> additionalAttributesExtractors,
|
||||||
boolean emitExperimentalHttpClientMetrics) {
|
boolean emitExperimentalHttpClientMetrics) {
|
||||||
|
|
||||||
|
|
@ -42,11 +44,13 @@ public final class OkHttpInstrumenterFactory {
|
||||||
HttpClientAttributesExtractor.builder(httpAttributesGetter);
|
HttpClientAttributesExtractor.builder(httpAttributesGetter);
|
||||||
extractorConfigurer.accept(extractorBuilder);
|
extractorConfigurer.accept(extractorBuilder);
|
||||||
|
|
||||||
|
HttpSpanNameExtractorBuilder<Request> httpSpanNameExtractorBuilder =
|
||||||
|
HttpSpanNameExtractor.builder(httpAttributesGetter);
|
||||||
|
spanNameExtractorConfigurer.accept(httpSpanNameExtractorBuilder);
|
||||||
|
|
||||||
InstrumenterBuilder<Request, Response> builder =
|
InstrumenterBuilder<Request, Response> builder =
|
||||||
Instrumenter.<Request, Response>builder(
|
Instrumenter.<Request, Response>builder(
|
||||||
openTelemetry,
|
openTelemetry, INSTRUMENTATION_NAME, httpSpanNameExtractorBuilder.build())
|
||||||
INSTRUMENTATION_NAME,
|
|
||||||
HttpSpanNameExtractor.create(httpAttributesGetter))
|
|
||||||
.setSpanStatusExtractor(HttpSpanStatusExtractor.create(httpAttributesGetter))
|
.setSpanStatusExtractor(HttpSpanStatusExtractor.create(httpAttributesGetter))
|
||||||
.addAttributesExtractor(extractorBuilder.build())
|
.addAttributesExtractor(extractorBuilder.build())
|
||||||
.addAttributesExtractors(additionalAttributesExtractors)
|
.addAttributesExtractors(additionalAttributesExtractors)
|
||||||
|
|
|
||||||
|
|
@ -27,7 +27,9 @@ public final class PlayWsClientInstrumenterFactory {
|
||||||
Instrumenter.<Request, Response>builder(
|
Instrumenter.<Request, Response>builder(
|
||||||
GlobalOpenTelemetry.get(),
|
GlobalOpenTelemetry.get(),
|
||||||
instrumentationName,
|
instrumentationName,
|
||||||
HttpSpanNameExtractor.create(httpAttributesGetter))
|
HttpSpanNameExtractor.builder(httpAttributesGetter)
|
||||||
|
.setKnownMethods(CommonConfig.get().getKnownHttpRequestMethods())
|
||||||
|
.build())
|
||||||
.setSpanStatusExtractor(HttpSpanStatusExtractor.create(httpAttributesGetter))
|
.setSpanStatusExtractor(HttpSpanStatusExtractor.create(httpAttributesGetter))
|
||||||
.addAttributesExtractor(
|
.addAttributesExtractor(
|
||||||
HttpClientAttributesExtractor.builder(httpAttributesGetter)
|
HttpClientAttributesExtractor.builder(httpAttributesGetter)
|
||||||
|
|
|
||||||
|
|
@ -20,6 +20,7 @@ import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerExperime
|
||||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerMetrics;
|
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerMetrics;
|
||||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRoute;
|
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRoute;
|
||||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanNameExtractor;
|
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanNameExtractor;
|
||||||
|
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanNameExtractorBuilder;
|
||||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanStatusExtractor;
|
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanStatusExtractor;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
@ -45,6 +46,11 @@ public final class RatpackTelemetryBuilder {
|
||||||
httpServerAttributesExtractorBuilder =
|
httpServerAttributesExtractorBuilder =
|
||||||
HttpServerAttributesExtractor.builder(RatpackHttpAttributesGetter.INSTANCE);
|
HttpServerAttributesExtractor.builder(RatpackHttpAttributesGetter.INSTANCE);
|
||||||
|
|
||||||
|
private final HttpSpanNameExtractorBuilder<RequestSpec> httpClientSpanNameExtractorBuilder =
|
||||||
|
HttpSpanNameExtractor.builder(RatpackHttpClientAttributesGetter.INSTANCE);
|
||||||
|
private final HttpSpanNameExtractorBuilder<Request> httpServerSpanNameExtractorBuilder =
|
||||||
|
HttpSpanNameExtractor.builder(RatpackHttpAttributesGetter.INSTANCE);
|
||||||
|
|
||||||
private final List<AttributesExtractor<? super RequestSpec, ? super HttpResponse>>
|
private final List<AttributesExtractor<? super RequestSpec, ? super HttpResponse>>
|
||||||
additionalHttpClientExtractors = new ArrayList<>();
|
additionalHttpClientExtractors = new ArrayList<>();
|
||||||
|
|
||||||
|
|
@ -135,6 +141,8 @@ public final class RatpackTelemetryBuilder {
|
||||||
public RatpackTelemetryBuilder setKnownMethods(Set<String> knownMethods) {
|
public RatpackTelemetryBuilder setKnownMethods(Set<String> knownMethods) {
|
||||||
httpClientAttributesExtractorBuilder.setKnownMethods(knownMethods);
|
httpClientAttributesExtractorBuilder.setKnownMethods(knownMethods);
|
||||||
httpServerAttributesExtractorBuilder.setKnownMethods(knownMethods);
|
httpServerAttributesExtractorBuilder.setKnownMethods(knownMethods);
|
||||||
|
httpClientSpanNameExtractorBuilder.setKnownMethods(knownMethods);
|
||||||
|
httpServerSpanNameExtractorBuilder.setKnownMethods(knownMethods);
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -174,7 +182,7 @@ public final class RatpackTelemetryBuilder {
|
||||||
|
|
||||||
InstrumenterBuilder<Request, Response> builder =
|
InstrumenterBuilder<Request, Response> builder =
|
||||||
Instrumenter.<Request, Response>builder(
|
Instrumenter.<Request, Response>builder(
|
||||||
openTelemetry, INSTRUMENTATION_NAME, HttpSpanNameExtractor.create(httpAttributes))
|
openTelemetry, INSTRUMENTATION_NAME, httpServerSpanNameExtractorBuilder.build())
|
||||||
.setSpanStatusExtractor(HttpSpanStatusExtractor.create(httpAttributes))
|
.setSpanStatusExtractor(HttpSpanStatusExtractor.create(httpAttributes))
|
||||||
.addAttributesExtractor(httpServerAttributesExtractorBuilder.build())
|
.addAttributesExtractor(httpServerAttributesExtractorBuilder.build())
|
||||||
.addAttributesExtractors(additionalExtractors)
|
.addAttributesExtractors(additionalExtractors)
|
||||||
|
|
@ -191,7 +199,7 @@ public final class RatpackTelemetryBuilder {
|
||||||
|
|
||||||
InstrumenterBuilder<RequestSpec, HttpResponse> builder =
|
InstrumenterBuilder<RequestSpec, HttpResponse> builder =
|
||||||
Instrumenter.<RequestSpec, HttpResponse>builder(
|
Instrumenter.<RequestSpec, HttpResponse>builder(
|
||||||
openTelemetry, INSTRUMENTATION_NAME, HttpSpanNameExtractor.create(httpAttributes))
|
openTelemetry, INSTRUMENTATION_NAME, httpClientSpanNameExtractorBuilder.build())
|
||||||
.setSpanStatusExtractor(HttpSpanStatusExtractor.create(httpAttributes))
|
.setSpanStatusExtractor(HttpSpanStatusExtractor.create(httpAttributes))
|
||||||
.addAttributesExtractor(httpClientAttributesExtractorBuilder.build())
|
.addAttributesExtractor(httpClientAttributesExtractorBuilder.build())
|
||||||
.addAttributesExtractors(additionalHttpClientExtractors)
|
.addAttributesExtractors(additionalHttpClientExtractors)
|
||||||
|
|
|
||||||
|
|
@ -50,7 +50,9 @@ public final class ReactorNettySingletons {
|
||||||
Instrumenter.<HttpClientRequest, HttpClientResponse>builder(
|
Instrumenter.<HttpClientRequest, HttpClientResponse>builder(
|
||||||
GlobalOpenTelemetry.get(),
|
GlobalOpenTelemetry.get(),
|
||||||
INSTRUMENTATION_NAME,
|
INSTRUMENTATION_NAME,
|
||||||
HttpSpanNameExtractor.create(httpAttributesGetter))
|
HttpSpanNameExtractor.builder(httpAttributesGetter)
|
||||||
|
.setKnownMethods(CommonConfig.get().getKnownHttpRequestMethods())
|
||||||
|
.build())
|
||||||
.setSpanStatusExtractor(HttpSpanStatusExtractor.create(httpAttributesGetter))
|
.setSpanStatusExtractor(HttpSpanStatusExtractor.create(httpAttributesGetter))
|
||||||
.addAttributesExtractor(
|
.addAttributesExtractor(
|
||||||
HttpClientAttributesExtractor.builder(httpAttributesGetter)
|
HttpClientAttributesExtractor.builder(httpAttributesGetter)
|
||||||
|
|
|
||||||
|
|
@ -16,6 +16,7 @@ import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerExperime
|
||||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerMetrics;
|
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerMetrics;
|
||||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRoute;
|
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRoute;
|
||||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanNameExtractor;
|
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanNameExtractor;
|
||||||
|
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanNameExtractorBuilder;
|
||||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanStatusExtractor;
|
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanStatusExtractor;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
@ -34,7 +35,8 @@ public final class RestletTelemetryBuilder {
|
||||||
private final HttpServerAttributesExtractorBuilder<Request, Response>
|
private final HttpServerAttributesExtractorBuilder<Request, Response>
|
||||||
httpAttributesExtractorBuilder =
|
httpAttributesExtractorBuilder =
|
||||||
HttpServerAttributesExtractor.builder(RestletHttpAttributesGetter.INSTANCE);
|
HttpServerAttributesExtractor.builder(RestletHttpAttributesGetter.INSTANCE);
|
||||||
|
private final HttpSpanNameExtractorBuilder<Request> httpSpanNameExtractorBuilder =
|
||||||
|
HttpSpanNameExtractor.builder(RestletHttpAttributesGetter.INSTANCE);
|
||||||
private boolean emitExperimentalHttpServerMetrics = false;
|
private boolean emitExperimentalHttpServerMetrics = false;
|
||||||
|
|
||||||
RestletTelemetryBuilder(OpenTelemetry openTelemetry) {
|
RestletTelemetryBuilder(OpenTelemetry openTelemetry) {
|
||||||
|
|
@ -90,6 +92,7 @@ public final class RestletTelemetryBuilder {
|
||||||
@CanIgnoreReturnValue
|
@CanIgnoreReturnValue
|
||||||
public RestletTelemetryBuilder setKnownMethods(Set<String> knownMethods) {
|
public RestletTelemetryBuilder setKnownMethods(Set<String> knownMethods) {
|
||||||
httpAttributesExtractorBuilder.setKnownMethods(knownMethods);
|
httpAttributesExtractorBuilder.setKnownMethods(knownMethods);
|
||||||
|
httpSpanNameExtractorBuilder.setKnownMethods(knownMethods);
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -115,9 +118,7 @@ public final class RestletTelemetryBuilder {
|
||||||
|
|
||||||
InstrumenterBuilder<Request, Response> builder =
|
InstrumenterBuilder<Request, Response> builder =
|
||||||
Instrumenter.<Request, Response>builder(
|
Instrumenter.<Request, Response>builder(
|
||||||
openTelemetry,
|
openTelemetry, INSTRUMENTATION_NAME, httpSpanNameExtractorBuilder.build())
|
||||||
INSTRUMENTATION_NAME,
|
|
||||||
HttpSpanNameExtractor.create(httpAttributesGetter))
|
|
||||||
.setSpanStatusExtractor(HttpSpanStatusExtractor.create(httpAttributesGetter))
|
.setSpanStatusExtractor(HttpSpanStatusExtractor.create(httpAttributesGetter))
|
||||||
.addAttributesExtractor(httpAttributesExtractorBuilder.build())
|
.addAttributesExtractor(httpAttributesExtractorBuilder.build())
|
||||||
.addAttributesExtractors(additionalExtractors)
|
.addAttributesExtractors(additionalExtractors)
|
||||||
|
|
|
||||||
|
|
@ -9,6 +9,7 @@ import io.opentelemetry.api.GlobalOpenTelemetry;
|
||||||
import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter;
|
import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter;
|
||||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerAttributesExtractor;
|
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerAttributesExtractor;
|
||||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRouteGetter;
|
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRouteGetter;
|
||||||
|
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanNameExtractor;
|
||||||
import io.opentelemetry.instrumentation.restlet.v2_0.internal.RestletHttpAttributesGetter;
|
import io.opentelemetry.instrumentation.restlet.v2_0.internal.RestletHttpAttributesGetter;
|
||||||
import io.opentelemetry.instrumentation.restlet.v2_0.internal.RestletInstrumenterFactory;
|
import io.opentelemetry.instrumentation.restlet.v2_0.internal.RestletInstrumenterFactory;
|
||||||
import io.opentelemetry.javaagent.bootstrap.internal.CommonConfig;
|
import io.opentelemetry.javaagent.bootstrap.internal.CommonConfig;
|
||||||
|
|
@ -27,6 +28,9 @@ public final class RestletSingletons {
|
||||||
.setCapturedResponseHeaders(CommonConfig.get().getServerResponseHeaders())
|
.setCapturedResponseHeaders(CommonConfig.get().getServerResponseHeaders())
|
||||||
.setKnownMethods(CommonConfig.get().getKnownHttpRequestMethods())
|
.setKnownMethods(CommonConfig.get().getKnownHttpRequestMethods())
|
||||||
.build(),
|
.build(),
|
||||||
|
HttpSpanNameExtractor.builder(RestletHttpAttributesGetter.INSTANCE)
|
||||||
|
.setKnownMethods(CommonConfig.get().getKnownHttpRequestMethods())
|
||||||
|
.build(),
|
||||||
Collections.emptyList(),
|
Collections.emptyList(),
|
||||||
CommonConfig.get().shouldEmitExperimentalHttpServerMetrics());
|
CommonConfig.get().shouldEmitExperimentalHttpServerMetrics());
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -11,6 +11,8 @@ import io.opentelemetry.instrumentation.api.instrumenter.AttributesExtractor;
|
||||||
import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter;
|
import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter;
|
||||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerAttributesExtractor;
|
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerAttributesExtractor;
|
||||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerAttributesExtractorBuilder;
|
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerAttributesExtractorBuilder;
|
||||||
|
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanNameExtractor;
|
||||||
|
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanNameExtractorBuilder;
|
||||||
import io.opentelemetry.instrumentation.restlet.v2_0.internal.RestletHttpAttributesGetter;
|
import io.opentelemetry.instrumentation.restlet.v2_0.internal.RestletHttpAttributesGetter;
|
||||||
import io.opentelemetry.instrumentation.restlet.v2_0.internal.RestletInstrumenterFactory;
|
import io.opentelemetry.instrumentation.restlet.v2_0.internal.RestletInstrumenterFactory;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
|
@ -28,7 +30,8 @@ public final class RestletTelemetryBuilder {
|
||||||
private final HttpServerAttributesExtractorBuilder<Request, Response>
|
private final HttpServerAttributesExtractorBuilder<Request, Response>
|
||||||
httpAttributesExtractorBuilder =
|
httpAttributesExtractorBuilder =
|
||||||
HttpServerAttributesExtractor.builder(RestletHttpAttributesGetter.INSTANCE);
|
HttpServerAttributesExtractor.builder(RestletHttpAttributesGetter.INSTANCE);
|
||||||
|
private final HttpSpanNameExtractorBuilder<Request> httpSpanNameExtractorBuilder =
|
||||||
|
HttpSpanNameExtractor.builder(RestletHttpAttributesGetter.INSTANCE);
|
||||||
private boolean emitExperimentalHttpServerMetrics = false;
|
private boolean emitExperimentalHttpServerMetrics = false;
|
||||||
|
|
||||||
RestletTelemetryBuilder(OpenTelemetry openTelemetry) {
|
RestletTelemetryBuilder(OpenTelemetry openTelemetry) {
|
||||||
|
|
@ -84,6 +87,7 @@ public final class RestletTelemetryBuilder {
|
||||||
@CanIgnoreReturnValue
|
@CanIgnoreReturnValue
|
||||||
public RestletTelemetryBuilder setKnownMethods(Set<String> knownMethods) {
|
public RestletTelemetryBuilder setKnownMethods(Set<String> knownMethods) {
|
||||||
httpAttributesExtractorBuilder.setKnownMethods(knownMethods);
|
httpAttributesExtractorBuilder.setKnownMethods(knownMethods);
|
||||||
|
httpSpanNameExtractorBuilder.setKnownMethods(knownMethods);
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -109,6 +113,7 @@ public final class RestletTelemetryBuilder {
|
||||||
RestletInstrumenterFactory.newServerInstrumenter(
|
RestletInstrumenterFactory.newServerInstrumenter(
|
||||||
openTelemetry,
|
openTelemetry,
|
||||||
httpAttributesExtractorBuilder.build(),
|
httpAttributesExtractorBuilder.build(),
|
||||||
|
httpSpanNameExtractorBuilder.build(),
|
||||||
additionalExtractors,
|
additionalExtractors,
|
||||||
emitExperimentalHttpServerMetrics);
|
emitExperimentalHttpServerMetrics);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -9,10 +9,10 @@ import io.opentelemetry.api.OpenTelemetry;
|
||||||
import io.opentelemetry.instrumentation.api.instrumenter.AttributesExtractor;
|
import io.opentelemetry.instrumentation.api.instrumenter.AttributesExtractor;
|
||||||
import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter;
|
import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter;
|
||||||
import io.opentelemetry.instrumentation.api.instrumenter.InstrumenterBuilder;
|
import io.opentelemetry.instrumentation.api.instrumenter.InstrumenterBuilder;
|
||||||
|
import io.opentelemetry.instrumentation.api.instrumenter.SpanNameExtractor;
|
||||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerExperimentalMetrics;
|
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerExperimentalMetrics;
|
||||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerMetrics;
|
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerMetrics;
|
||||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRoute;
|
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRoute;
|
||||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanNameExtractor;
|
|
||||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanStatusExtractor;
|
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanStatusExtractor;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import org.restlet.Request;
|
import org.restlet.Request;
|
||||||
|
|
@ -29,6 +29,7 @@ public final class RestletInstrumenterFactory {
|
||||||
public static Instrumenter<Request, Response> newServerInstrumenter(
|
public static Instrumenter<Request, Response> newServerInstrumenter(
|
||||||
OpenTelemetry openTelemetry,
|
OpenTelemetry openTelemetry,
|
||||||
AttributesExtractor<Request, Response> httpServerAttributesExtractor,
|
AttributesExtractor<Request, Response> httpServerAttributesExtractor,
|
||||||
|
SpanNameExtractor<Request> httpServerSpanNameExtractor,
|
||||||
List<AttributesExtractor<Request, Response>> additionalExtractors,
|
List<AttributesExtractor<Request, Response>> additionalExtractors,
|
||||||
boolean emitExperimentalHttpServerMetrics) {
|
boolean emitExperimentalHttpServerMetrics) {
|
||||||
|
|
||||||
|
|
@ -36,9 +37,7 @@ public final class RestletInstrumenterFactory {
|
||||||
|
|
||||||
InstrumenterBuilder<Request, Response> builder =
|
InstrumenterBuilder<Request, Response> builder =
|
||||||
Instrumenter.<Request, Response>builder(
|
Instrumenter.<Request, Response>builder(
|
||||||
openTelemetry,
|
openTelemetry, INSTRUMENTATION_NAME, httpServerSpanNameExtractor)
|
||||||
INSTRUMENTATION_NAME,
|
|
||||||
HttpSpanNameExtractor.create(httpAttributesGetter))
|
|
||||||
.setSpanStatusExtractor(HttpSpanStatusExtractor.create(httpAttributesGetter))
|
.setSpanStatusExtractor(HttpSpanStatusExtractor.create(httpAttributesGetter))
|
||||||
.addAttributesExtractor(httpServerAttributesExtractor)
|
.addAttributesExtractor(httpServerAttributesExtractor)
|
||||||
.addAttributesExtractors(additionalExtractors)
|
.addAttributesExtractors(additionalExtractors)
|
||||||
|
|
|
||||||
|
|
@ -87,7 +87,9 @@ public final class ServletInstrumenterBuilder<REQUEST, RESPONSE> {
|
||||||
HttpServerAttributesGetter<ServletRequestContext<REQUEST>, ServletResponseContext<RESPONSE>>
|
HttpServerAttributesGetter<ServletRequestContext<REQUEST>, ServletResponseContext<RESPONSE>>
|
||||||
httpAttributesGetter = new ServletHttpAttributesGetter<>(accessor);
|
httpAttributesGetter = new ServletHttpAttributesGetter<>(accessor);
|
||||||
SpanNameExtractor<ServletRequestContext<REQUEST>> spanNameExtractor =
|
SpanNameExtractor<ServletRequestContext<REQUEST>> spanNameExtractor =
|
||||||
HttpSpanNameExtractor.create(httpAttributesGetter);
|
HttpSpanNameExtractor.builder(httpAttributesGetter)
|
||||||
|
.setKnownMethods(CommonConfig.get().getKnownHttpRequestMethods())
|
||||||
|
.build();
|
||||||
|
|
||||||
return build(instrumentationName, accessor, spanNameExtractor, httpAttributesGetter);
|
return build(instrumentationName, accessor, spanNameExtractor, httpAttributesGetter);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -16,6 +16,7 @@ import io.opentelemetry.instrumentation.api.instrumenter.http.HttpClientAttribut
|
||||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpClientExperimentalMetrics;
|
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpClientExperimentalMetrics;
|
||||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpClientMetrics;
|
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpClientMetrics;
|
||||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanNameExtractor;
|
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanNameExtractor;
|
||||||
|
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanNameExtractorBuilder;
|
||||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanStatusExtractor;
|
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanStatusExtractor;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
@ -35,6 +36,8 @@ public final class SpringWebTelemetryBuilder {
|
||||||
private final HttpClientAttributesExtractorBuilder<HttpRequest, ClientHttpResponse>
|
private final HttpClientAttributesExtractorBuilder<HttpRequest, ClientHttpResponse>
|
||||||
httpAttributesExtractorBuilder =
|
httpAttributesExtractorBuilder =
|
||||||
HttpClientAttributesExtractor.builder(SpringWebHttpAttributesGetter.INSTANCE);
|
HttpClientAttributesExtractor.builder(SpringWebHttpAttributesGetter.INSTANCE);
|
||||||
|
private final HttpSpanNameExtractorBuilder<HttpRequest> httpSpanNameExtractorBuilder =
|
||||||
|
HttpSpanNameExtractor.builder(SpringWebHttpAttributesGetter.INSTANCE);
|
||||||
private boolean emitExperimentalHttpClientMetrics = false;
|
private boolean emitExperimentalHttpClientMetrics = false;
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
|
|
@ -103,6 +106,7 @@ public final class SpringWebTelemetryBuilder {
|
||||||
@CanIgnoreReturnValue
|
@CanIgnoreReturnValue
|
||||||
public SpringWebTelemetryBuilder setKnownMethods(Set<String> knownMethods) {
|
public SpringWebTelemetryBuilder setKnownMethods(Set<String> knownMethods) {
|
||||||
httpAttributesExtractorBuilder.setKnownMethods(knownMethods);
|
httpAttributesExtractorBuilder.setKnownMethods(knownMethods);
|
||||||
|
httpSpanNameExtractorBuilder.setKnownMethods(knownMethods);
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -126,8 +130,7 @@ public final class SpringWebTelemetryBuilder {
|
||||||
public SpringWebTelemetry build() {
|
public SpringWebTelemetry build() {
|
||||||
SpringWebHttpAttributesGetter httpAttributeGetter = SpringWebHttpAttributesGetter.INSTANCE;
|
SpringWebHttpAttributesGetter httpAttributeGetter = SpringWebHttpAttributesGetter.INSTANCE;
|
||||||
|
|
||||||
SpanNameExtractor<HttpRequest> originalSpanNameExtractor =
|
SpanNameExtractor<HttpRequest> originalSpanNameExtractor = httpSpanNameExtractorBuilder.build();
|
||||||
HttpSpanNameExtractor.create(httpAttributeGetter);
|
|
||||||
SpanNameExtractor<? super HttpRequest> spanNameExtractor = originalSpanNameExtractor;
|
SpanNameExtractor<? super HttpRequest> spanNameExtractor = originalSpanNameExtractor;
|
||||||
if (spanNameExtractorTransformer != null) {
|
if (spanNameExtractorTransformer != null) {
|
||||||
spanNameExtractor = spanNameExtractorTransformer.apply(originalSpanNameExtractor);
|
spanNameExtractor = spanNameExtractorTransformer.apply(originalSpanNameExtractor);
|
||||||
|
|
|
||||||
|
|
@ -30,6 +30,7 @@ public final class WebClientHelper {
|
||||||
.setCapturedRequestHeaders(CommonConfig.get().getClientRequestHeaders())
|
.setCapturedRequestHeaders(CommonConfig.get().getClientRequestHeaders())
|
||||||
.setCapturedResponseHeaders(CommonConfig.get().getClientResponseHeaders())
|
.setCapturedResponseHeaders(CommonConfig.get().getClientResponseHeaders())
|
||||||
.setKnownMethods(CommonConfig.get().getKnownHttpRequestMethods()),
|
.setKnownMethods(CommonConfig.get().getKnownHttpRequestMethods()),
|
||||||
|
builder -> builder.setKnownMethods(CommonConfig.get().getKnownHttpRequestMethods()),
|
||||||
singletonList(
|
singletonList(
|
||||||
PeerServiceAttributesExtractor.create(
|
PeerServiceAttributesExtractor.create(
|
||||||
WebClientHttpAttributesGetter.INSTANCE,
|
WebClientHttpAttributesGetter.INSTANCE,
|
||||||
|
|
|
||||||
|
|
@ -17,6 +17,7 @@ import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerExperime
|
||||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerMetrics;
|
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerMetrics;
|
||||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRoute;
|
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRoute;
|
||||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanNameExtractor;
|
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanNameExtractor;
|
||||||
|
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanNameExtractorBuilder;
|
||||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanStatusExtractor;
|
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanStatusExtractor;
|
||||||
import io.opentelemetry.instrumentation.spring.webflux.v5_3.internal.ClientInstrumenterFactory;
|
import io.opentelemetry.instrumentation.spring.webflux.v5_3.internal.ClientInstrumenterFactory;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
|
@ -41,9 +42,13 @@ public final class SpringWebfluxTelemetryBuilder {
|
||||||
private final HttpServerAttributesExtractorBuilder<ServerWebExchange, ServerWebExchange>
|
private final HttpServerAttributesExtractorBuilder<ServerWebExchange, ServerWebExchange>
|
||||||
httpServerAttributesExtractorBuilder =
|
httpServerAttributesExtractorBuilder =
|
||||||
HttpServerAttributesExtractor.builder(WebfluxServerHttpAttributesGetter.INSTANCE);
|
HttpServerAttributesExtractor.builder(WebfluxServerHttpAttributesGetter.INSTANCE);
|
||||||
|
private final HttpSpanNameExtractorBuilder<ServerWebExchange> httpServerSpanNameExtractorBuilder =
|
||||||
|
HttpSpanNameExtractor.builder(WebfluxServerHttpAttributesGetter.INSTANCE);
|
||||||
|
|
||||||
private Consumer<HttpClientAttributesExtractorBuilder<ClientRequest, ClientResponse>>
|
private Consumer<HttpClientAttributesExtractorBuilder<ClientRequest, ClientResponse>>
|
||||||
clientExtractorConfigurer = builder -> {};
|
clientExtractorConfigurer = builder -> {};
|
||||||
|
private Consumer<HttpSpanNameExtractorBuilder<ClientRequest>> clientSpanNameExtractorConfigurer =
|
||||||
|
builder -> {};
|
||||||
private boolean captureExperimentalSpanAttributes = false;
|
private boolean captureExperimentalSpanAttributes = false;
|
||||||
private boolean emitExperimentalHttpClientMetrics = false;
|
private boolean emitExperimentalHttpClientMetrics = false;
|
||||||
private boolean emitExperimentalHttpServerMetrics = false;
|
private boolean emitExperimentalHttpServerMetrics = false;
|
||||||
|
|
@ -158,7 +163,10 @@ public final class SpringWebfluxTelemetryBuilder {
|
||||||
public SpringWebfluxTelemetryBuilder setKnownMethods(Set<String> knownMethods) {
|
public SpringWebfluxTelemetryBuilder setKnownMethods(Set<String> knownMethods) {
|
||||||
clientExtractorConfigurer =
|
clientExtractorConfigurer =
|
||||||
clientExtractorConfigurer.andThen(builder -> builder.setKnownMethods(knownMethods));
|
clientExtractorConfigurer.andThen(builder -> builder.setKnownMethods(knownMethods));
|
||||||
|
clientSpanNameExtractorConfigurer =
|
||||||
|
clientSpanNameExtractorConfigurer.andThen(builder -> builder.setKnownMethods(knownMethods));
|
||||||
httpServerAttributesExtractorBuilder.setKnownMethods(knownMethods);
|
httpServerAttributesExtractorBuilder.setKnownMethods(knownMethods);
|
||||||
|
httpServerSpanNameExtractorBuilder.setKnownMethods(knownMethods);
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -198,6 +206,7 @@ public final class SpringWebfluxTelemetryBuilder {
|
||||||
ClientInstrumenterFactory.create(
|
ClientInstrumenterFactory.create(
|
||||||
openTelemetry,
|
openTelemetry,
|
||||||
clientExtractorConfigurer,
|
clientExtractorConfigurer,
|
||||||
|
clientSpanNameExtractorConfigurer,
|
||||||
clientAdditionalExtractors,
|
clientAdditionalExtractors,
|
||||||
captureExperimentalSpanAttributes,
|
captureExperimentalSpanAttributes,
|
||||||
emitExperimentalHttpClientMetrics);
|
emitExperimentalHttpClientMetrics);
|
||||||
|
|
@ -214,7 +223,7 @@ public final class SpringWebfluxTelemetryBuilder {
|
||||||
|
|
||||||
InstrumenterBuilder<ServerWebExchange, ServerWebExchange> builder =
|
InstrumenterBuilder<ServerWebExchange, ServerWebExchange> builder =
|
||||||
Instrumenter.<ServerWebExchange, ServerWebExchange>builder(
|
Instrumenter.<ServerWebExchange, ServerWebExchange>builder(
|
||||||
openTelemetry, INSTRUMENTATION_NAME, HttpSpanNameExtractor.create(getter))
|
openTelemetry, INSTRUMENTATION_NAME, httpServerSpanNameExtractorBuilder.build())
|
||||||
.setSpanStatusExtractor(HttpSpanStatusExtractor.create(getter))
|
.setSpanStatusExtractor(HttpSpanStatusExtractor.create(getter))
|
||||||
.addAttributesExtractor(httpServerAttributesExtractorBuilder.build())
|
.addAttributesExtractor(httpServerAttributesExtractorBuilder.build())
|
||||||
.addAttributesExtractors(serverAdditionalExtractors)
|
.addAttributesExtractors(serverAdditionalExtractors)
|
||||||
|
|
|
||||||
|
|
@ -16,6 +16,7 @@ import io.opentelemetry.instrumentation.api.instrumenter.http.HttpClientAttribut
|
||||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpClientExperimentalMetrics;
|
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpClientExperimentalMetrics;
|
||||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpClientMetrics;
|
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpClientMetrics;
|
||||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanNameExtractor;
|
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanNameExtractor;
|
||||||
|
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanNameExtractorBuilder;
|
||||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanStatusExtractor;
|
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanStatusExtractor;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.function.Consumer;
|
import java.util.function.Consumer;
|
||||||
|
|
@ -36,6 +37,7 @@ public final class ClientInstrumenterFactory {
|
||||||
OpenTelemetry openTelemetry,
|
OpenTelemetry openTelemetry,
|
||||||
Consumer<HttpClientAttributesExtractorBuilder<ClientRequest, ClientResponse>>
|
Consumer<HttpClientAttributesExtractorBuilder<ClientRequest, ClientResponse>>
|
||||||
extractorConfigurer,
|
extractorConfigurer,
|
||||||
|
Consumer<HttpSpanNameExtractorBuilder<ClientRequest>> spanNameExtractorConfigurer,
|
||||||
List<AttributesExtractor<ClientRequest, ClientResponse>> additionalExtractors,
|
List<AttributesExtractor<ClientRequest, ClientResponse>> additionalExtractors,
|
||||||
boolean captureExperimentalSpanAttributes,
|
boolean captureExperimentalSpanAttributes,
|
||||||
boolean emitExperimentalHttpClientMetrics) {
|
boolean emitExperimentalHttpClientMetrics) {
|
||||||
|
|
@ -46,11 +48,13 @@ public final class ClientInstrumenterFactory {
|
||||||
HttpClientAttributesExtractor.builder(httpAttributesGetter);
|
HttpClientAttributesExtractor.builder(httpAttributesGetter);
|
||||||
extractorConfigurer.accept(extractorBuilder);
|
extractorConfigurer.accept(extractorBuilder);
|
||||||
|
|
||||||
|
HttpSpanNameExtractorBuilder<ClientRequest> httpSpanNameExtractorBuilder =
|
||||||
|
HttpSpanNameExtractor.builder(httpAttributesGetter);
|
||||||
|
spanNameExtractorConfigurer.accept(httpSpanNameExtractorBuilder);
|
||||||
|
|
||||||
InstrumenterBuilder<ClientRequest, ClientResponse> clientBuilder =
|
InstrumenterBuilder<ClientRequest, ClientResponse> clientBuilder =
|
||||||
Instrumenter.<ClientRequest, ClientResponse>builder(
|
Instrumenter.<ClientRequest, ClientResponse>builder(
|
||||||
openTelemetry,
|
openTelemetry, INSTRUMENTATION_NAME, httpSpanNameExtractorBuilder.build())
|
||||||
INSTRUMENTATION_NAME,
|
|
||||||
HttpSpanNameExtractor.create(httpAttributesGetter))
|
|
||||||
.setSpanStatusExtractor(HttpSpanStatusExtractor.create(httpAttributesGetter))
|
.setSpanStatusExtractor(HttpSpanStatusExtractor.create(httpAttributesGetter))
|
||||||
.addAttributesExtractor(extractorBuilder.build())
|
.addAttributesExtractor(extractorBuilder.build())
|
||||||
.addAttributesExtractors(additionalExtractors)
|
.addAttributesExtractors(additionalExtractors)
|
||||||
|
|
|
||||||
|
|
@ -17,6 +17,7 @@ import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerExperime
|
||||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerMetrics;
|
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerMetrics;
|
||||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRoute;
|
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRoute;
|
||||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanNameExtractor;
|
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanNameExtractor;
|
||||||
|
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanNameExtractorBuilder;
|
||||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanStatusExtractor;
|
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanStatusExtractor;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
@ -37,6 +38,8 @@ public final class SpringWebMvcTelemetryBuilder {
|
||||||
private final HttpServerAttributesExtractorBuilder<HttpServletRequest, HttpServletResponse>
|
private final HttpServerAttributesExtractorBuilder<HttpServletRequest, HttpServletResponse>
|
||||||
httpAttributesExtractorBuilder =
|
httpAttributesExtractorBuilder =
|
||||||
HttpServerAttributesExtractor.builder(SpringWebMvcHttpAttributesGetter.INSTANCE);
|
HttpServerAttributesExtractor.builder(SpringWebMvcHttpAttributesGetter.INSTANCE);
|
||||||
|
private final HttpSpanNameExtractorBuilder<HttpServletRequest> httpSpanNameExtractorBuilder =
|
||||||
|
HttpSpanNameExtractor.builder(SpringWebMvcHttpAttributesGetter.INSTANCE);
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
private Function<
|
private Function<
|
||||||
|
|
@ -110,6 +113,7 @@ public final class SpringWebMvcTelemetryBuilder {
|
||||||
@CanIgnoreReturnValue
|
@CanIgnoreReturnValue
|
||||||
public SpringWebMvcTelemetryBuilder setKnownMethods(Set<String> knownMethods) {
|
public SpringWebMvcTelemetryBuilder setKnownMethods(Set<String> knownMethods) {
|
||||||
httpAttributesExtractorBuilder.setKnownMethods(knownMethods);
|
httpAttributesExtractorBuilder.setKnownMethods(knownMethods);
|
||||||
|
httpSpanNameExtractorBuilder.setKnownMethods(knownMethods);
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -135,7 +139,7 @@ public final class SpringWebMvcTelemetryBuilder {
|
||||||
SpringWebMvcHttpAttributesGetter.INSTANCE;
|
SpringWebMvcHttpAttributesGetter.INSTANCE;
|
||||||
|
|
||||||
SpanNameExtractor<HttpServletRequest> originalSpanNameExtractor =
|
SpanNameExtractor<HttpServletRequest> originalSpanNameExtractor =
|
||||||
HttpSpanNameExtractor.create(httpAttributesGetter);
|
httpSpanNameExtractorBuilder.build();
|
||||||
SpanNameExtractor<? super HttpServletRequest> spanNameExtractor = originalSpanNameExtractor;
|
SpanNameExtractor<? super HttpServletRequest> spanNameExtractor = originalSpanNameExtractor;
|
||||||
if (spanNameExtractorTransformer != null) {
|
if (spanNameExtractorTransformer != null) {
|
||||||
spanNameExtractor = spanNameExtractorTransformer.apply(originalSpanNameExtractor);
|
spanNameExtractor = spanNameExtractorTransformer.apply(originalSpanNameExtractor);
|
||||||
|
|
|
||||||
|
|
@ -17,6 +17,7 @@ import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerExperime
|
||||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerMetrics;
|
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerMetrics;
|
||||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRoute;
|
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpServerRoute;
|
||||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanNameExtractor;
|
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanNameExtractor;
|
||||||
|
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanNameExtractorBuilder;
|
||||||
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanStatusExtractor;
|
import io.opentelemetry.instrumentation.api.instrumenter.http.HttpSpanStatusExtractor;
|
||||||
import jakarta.servlet.http.HttpServletRequest;
|
import jakarta.servlet.http.HttpServletRequest;
|
||||||
import jakarta.servlet.http.HttpServletResponse;
|
import jakarta.servlet.http.HttpServletResponse;
|
||||||
|
|
@ -37,6 +38,8 @@ public final class SpringWebMvcTelemetryBuilder {
|
||||||
private final HttpServerAttributesExtractorBuilder<HttpServletRequest, HttpServletResponse>
|
private final HttpServerAttributesExtractorBuilder<HttpServletRequest, HttpServletResponse>
|
||||||
httpAttributesExtractorBuilder =
|
httpAttributesExtractorBuilder =
|
||||||
HttpServerAttributesExtractor.builder(SpringWebMvcHttpAttributesGetter.INSTANCE);
|
HttpServerAttributesExtractor.builder(SpringWebMvcHttpAttributesGetter.INSTANCE);
|
||||||
|
private final HttpSpanNameExtractorBuilder<HttpServletRequest> httpSpanNameExtractorBuilder =
|
||||||
|
HttpSpanNameExtractor.builder(SpringWebMvcHttpAttributesGetter.INSTANCE);
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
private Function<
|
private Function<
|
||||||
|
|
@ -110,6 +113,7 @@ public final class SpringWebMvcTelemetryBuilder {
|
||||||
@CanIgnoreReturnValue
|
@CanIgnoreReturnValue
|
||||||
public SpringWebMvcTelemetryBuilder setKnownMethods(Set<String> knownMethods) {
|
public SpringWebMvcTelemetryBuilder setKnownMethods(Set<String> knownMethods) {
|
||||||
httpAttributesExtractorBuilder.setKnownMethods(knownMethods);
|
httpAttributesExtractorBuilder.setKnownMethods(knownMethods);
|
||||||
|
httpSpanNameExtractorBuilder.setKnownMethods(knownMethods);
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -135,7 +139,7 @@ public final class SpringWebMvcTelemetryBuilder {
|
||||||
SpringWebMvcHttpAttributesGetter.INSTANCE;
|
SpringWebMvcHttpAttributesGetter.INSTANCE;
|
||||||
|
|
||||||
SpanNameExtractor<HttpServletRequest> originalSpanNameExtractor =
|
SpanNameExtractor<HttpServletRequest> originalSpanNameExtractor =
|
||||||
HttpSpanNameExtractor.create(httpAttributesGetter);
|
httpSpanNameExtractorBuilder.build();
|
||||||
SpanNameExtractor<? super HttpServletRequest> spanNameExtractor = originalSpanNameExtractor;
|
SpanNameExtractor<? super HttpServletRequest> spanNameExtractor = originalSpanNameExtractor;
|
||||||
if (spanNameExtractorTransformer != null) {
|
if (spanNameExtractorTransformer != null) {
|
||||||
spanNameExtractor = spanNameExtractorTransformer.apply(originalSpanNameExtractor);
|
spanNameExtractor = spanNameExtractorTransformer.apply(originalSpanNameExtractor);
|
||||||
|
|
|
||||||
|
|
@ -33,7 +33,9 @@ public final class TomcatInstrumenterFactory {
|
||||||
Instrumenter.<Request, Response>builder(
|
Instrumenter.<Request, Response>builder(
|
||||||
GlobalOpenTelemetry.get(),
|
GlobalOpenTelemetry.get(),
|
||||||
instrumentationName,
|
instrumentationName,
|
||||||
HttpSpanNameExtractor.create(httpAttributesGetter))
|
HttpSpanNameExtractor.builder(httpAttributesGetter)
|
||||||
|
.setKnownMethods(CommonConfig.get().getKnownHttpRequestMethods())
|
||||||
|
.build())
|
||||||
.setSpanStatusExtractor(HttpSpanStatusExtractor.create(httpAttributesGetter))
|
.setSpanStatusExtractor(HttpSpanStatusExtractor.create(httpAttributesGetter))
|
||||||
.setErrorCauseExtractor(new ServletErrorCauseExtractor<>(accessor))
|
.setErrorCauseExtractor(new ServletErrorCauseExtractor<>(accessor))
|
||||||
.addAttributesExtractor(
|
.addAttributesExtractor(
|
||||||
|
|
|
||||||
|
|
@ -31,7 +31,9 @@ public final class UndertowSingletons {
|
||||||
Instrumenter.<HttpServerExchange, HttpServerExchange>builder(
|
Instrumenter.<HttpServerExchange, HttpServerExchange>builder(
|
||||||
GlobalOpenTelemetry.get(),
|
GlobalOpenTelemetry.get(),
|
||||||
INSTRUMENTATION_NAME,
|
INSTRUMENTATION_NAME,
|
||||||
HttpSpanNameExtractor.create(httpAttributesGetter))
|
HttpSpanNameExtractor.builder(httpAttributesGetter)
|
||||||
|
.setKnownMethods(CommonConfig.get().getKnownHttpRequestMethods())
|
||||||
|
.build())
|
||||||
.setSpanStatusExtractor(HttpSpanStatusExtractor.create(httpAttributesGetter))
|
.setSpanStatusExtractor(HttpSpanStatusExtractor.create(httpAttributesGetter))
|
||||||
.addAttributesExtractor(
|
.addAttributesExtractor(
|
||||||
HttpServerAttributesExtractor.builder(httpAttributesGetter)
|
HttpServerAttributesExtractor.builder(httpAttributesGetter)
|
||||||
|
|
|
||||||
|
|
@ -27,7 +27,9 @@ public final class VertxClientInstrumenterFactory {
|
||||||
Instrumenter.<HttpClientRequest, HttpClientResponse>builder(
|
Instrumenter.<HttpClientRequest, HttpClientResponse>builder(
|
||||||
GlobalOpenTelemetry.get(),
|
GlobalOpenTelemetry.get(),
|
||||||
instrumentationName,
|
instrumentationName,
|
||||||
HttpSpanNameExtractor.create(httpAttributesGetter))
|
HttpSpanNameExtractor.builder(httpAttributesGetter)
|
||||||
|
.setKnownMethods(CommonConfig.get().getKnownHttpRequestMethods())
|
||||||
|
.build())
|
||||||
.setSpanStatusExtractor(HttpSpanStatusExtractor.create(httpAttributesGetter))
|
.setSpanStatusExtractor(HttpSpanStatusExtractor.create(httpAttributesGetter))
|
||||||
.addAttributesExtractor(
|
.addAttributesExtractor(
|
||||||
HttpClientAttributesExtractor.builder(httpAttributesGetter)
|
HttpClientAttributesExtractor.builder(httpAttributesGetter)
|
||||||
|
|
|
||||||
|
|
@ -374,7 +374,7 @@ abstract class HttpClientTest<REQUEST> extends InstrumentationSpecification {
|
||||||
}
|
}
|
||||||
|
|
||||||
protected String expectedClientSpanName(URI uri, String method) {
|
protected String expectedClientSpanName(URI uri, String method) {
|
||||||
return HttpConstants._OTHER == method ? "TEST" : method
|
return HttpConstants._OTHER == method ? "HTTP" : method
|
||||||
}
|
}
|
||||||
|
|
||||||
Integer responseCodeOnRedirectError() {
|
Integer responseCodeOnRedirectError() {
|
||||||
|
|
|
||||||
|
|
@ -36,7 +36,7 @@ public abstract class HttpClientTestOptions {
|
||||||
SemconvStabilityUtil.getAttributeKey(SemanticAttributes.USER_AGENT_ORIGINAL))));
|
SemconvStabilityUtil.getAttributeKey(SemanticAttributes.USER_AGENT_ORIGINAL))));
|
||||||
|
|
||||||
public static final BiFunction<URI, String, String> DEFAULT_EXPECTED_CLIENT_SPAN_NAME_MAPPER =
|
public static final BiFunction<URI, String, String> DEFAULT_EXPECTED_CLIENT_SPAN_NAME_MAPPER =
|
||||||
(uri, method) -> HttpConstants._OTHER.equals(method) ? "TEST" : method;
|
(uri, method) -> HttpConstants._OTHER.equals(method) ? "HTTP" : method;
|
||||||
|
|
||||||
public static final int FOUND_STATUS_CODE = HttpStatus.FOUND.code();
|
public static final int FOUND_STATUS_CODE = HttpStatus.FOUND.code();
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue