Allow library instrumentations to override span name (#11355)
Co-authored-by: Trask Stalnaker <trask.stalnaker@gmail.com>
This commit is contained in:
parent
004e49d281
commit
7a06507f80
|
@ -20,6 +20,7 @@ import io.opentelemetry.instrumentation.api.semconv.network.NetworkAttributesExt
|
|||
import io.opentelemetry.instrumentation.api.semconv.network.ServerAttributesExtractor;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.function.Function;
|
||||
import javax.annotation.Nullable;
|
||||
import org.apache.dubbo.rpc.Result;
|
||||
|
||||
|
@ -35,6 +36,12 @@ public final class DubboTelemetryBuilder {
|
|||
@Nullable private String peerService;
|
||||
private final List<AttributesExtractor<DubboRequest, Result>> attributesExtractors =
|
||||
new ArrayList<>();
|
||||
private Function<
|
||||
SpanNameExtractor<DubboRequest>, ? extends SpanNameExtractor<? super DubboRequest>>
|
||||
clientSpanNameExtractorTransformer = Function.identity();
|
||||
private Function<
|
||||
SpanNameExtractor<DubboRequest>, ? extends SpanNameExtractor<? super DubboRequest>>
|
||||
serverSpanNameExtractorTransformer = Function.identity();
|
||||
|
||||
DubboTelemetryBuilder(OpenTelemetry openTelemetry) {
|
||||
this.openTelemetry = openTelemetry;
|
||||
|
@ -56,6 +63,24 @@ public final class DubboTelemetryBuilder {
|
|||
return this;
|
||||
}
|
||||
|
||||
/** Sets custom client {@link SpanNameExtractor} via transform function. */
|
||||
@CanIgnoreReturnValue
|
||||
public DubboTelemetryBuilder setClientSpanNameExtractor(
|
||||
Function<SpanNameExtractor<DubboRequest>, ? extends SpanNameExtractor<? super DubboRequest>>
|
||||
clientSpanNameExtractor) {
|
||||
this.clientSpanNameExtractorTransformer = clientSpanNameExtractor;
|
||||
return this;
|
||||
}
|
||||
|
||||
/** Sets custom server {@link SpanNameExtractor} via transform function. */
|
||||
@CanIgnoreReturnValue
|
||||
public DubboTelemetryBuilder setServerSpanNameExtractor(
|
||||
Function<SpanNameExtractor<DubboRequest>, ? extends SpanNameExtractor<? super DubboRequest>>
|
||||
serverSpanNameExtractor) {
|
||||
this.serverSpanNameExtractorTransformer = serverSpanNameExtractor;
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a new {@link DubboTelemetry} with the settings of this {@link DubboTelemetryBuilder}.
|
||||
*/
|
||||
|
@ -63,6 +88,10 @@ public final class DubboTelemetryBuilder {
|
|||
DubboRpcAttributesGetter rpcAttributesGetter = DubboRpcAttributesGetter.INSTANCE;
|
||||
SpanNameExtractor<DubboRequest> spanNameExtractor =
|
||||
RpcSpanNameExtractor.create(rpcAttributesGetter);
|
||||
SpanNameExtractor<? super DubboRequest> clientSpanNameExtractor =
|
||||
clientSpanNameExtractorTransformer.apply(spanNameExtractor);
|
||||
SpanNameExtractor<? super DubboRequest> serverSpanNameExtractor =
|
||||
serverSpanNameExtractorTransformer.apply(spanNameExtractor);
|
||||
DubboClientNetworkAttributesGetter netClientAttributesGetter =
|
||||
new DubboClientNetworkAttributesGetter();
|
||||
DubboNetworkServerAttributesGetter netServerAttributesGetter =
|
||||
|
@ -70,14 +99,14 @@ public final class DubboTelemetryBuilder {
|
|||
|
||||
InstrumenterBuilder<DubboRequest, Result> serverInstrumenterBuilder =
|
||||
Instrumenter.<DubboRequest, Result>builder(
|
||||
openTelemetry, INSTRUMENTATION_NAME, spanNameExtractor)
|
||||
openTelemetry, INSTRUMENTATION_NAME, serverSpanNameExtractor)
|
||||
.addAttributesExtractor(RpcServerAttributesExtractor.create(rpcAttributesGetter))
|
||||
.addAttributesExtractor(NetworkAttributesExtractor.create(netServerAttributesGetter))
|
||||
.addAttributesExtractors(attributesExtractors);
|
||||
|
||||
InstrumenterBuilder<DubboRequest, Result> clientInstrumenterBuilder =
|
||||
Instrumenter.<DubboRequest, Result>builder(
|
||||
openTelemetry, INSTRUMENTATION_NAME, spanNameExtractor)
|
||||
openTelemetry, INSTRUMENTATION_NAME, clientSpanNameExtractor)
|
||||
.addAttributesExtractor(RpcClientAttributesExtractor.create(rpcAttributesGetter))
|
||||
.addAttributesExtractor(ServerAttributesExtractor.create(netClientAttributesGetter))
|
||||
.addAttributesExtractor(NetworkAttributesExtractor.create(netClientAttributesGetter))
|
||||
|
|
|
@ -13,6 +13,7 @@ import io.opentelemetry.instrumentation.api.instrumenter.AttributesExtractor;
|
|||
import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.InstrumenterBuilder;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.SpanKindExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.SpanNameExtractor;
|
||||
import io.opentelemetry.instrumentation.api.semconv.http.HttpClientAttributesExtractor;
|
||||
import io.opentelemetry.instrumentation.api.semconv.http.HttpClientAttributesExtractorBuilder;
|
||||
import io.opentelemetry.instrumentation.api.semconv.http.HttpClientMetrics;
|
||||
|
@ -22,6 +23,7 @@ import io.opentelemetry.instrumentation.api.semconv.http.HttpSpanStatusExtractor
|
|||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
import java.util.function.Function;
|
||||
import org.apache.http.HttpResponse;
|
||||
|
||||
/** A builder for {@link ApacheHttpClientTelemetry}. */
|
||||
|
@ -38,6 +40,10 @@ public final class ApacheHttpClientTelemetryBuilder {
|
|||
HttpClientAttributesExtractor.builder(ApacheHttpClientHttpAttributesGetter.INSTANCE);
|
||||
private final HttpSpanNameExtractorBuilder<ApacheHttpClientRequest> httpSpanNameExtractorBuilder =
|
||||
HttpSpanNameExtractor.builder(ApacheHttpClientHttpAttributesGetter.INSTANCE);
|
||||
private Function<
|
||||
SpanNameExtractor<ApacheHttpClientRequest>,
|
||||
? extends SpanNameExtractor<? super ApacheHttpClientRequest>>
|
||||
spanNameExtractorTransformer = Function.identity();
|
||||
private boolean emitExperimentalHttpClientMetrics = false;
|
||||
|
||||
ApacheHttpClientTelemetryBuilder(OpenTelemetry openTelemetry) {
|
||||
|
@ -111,6 +117,17 @@ public final class ApacheHttpClientTelemetryBuilder {
|
|||
return this;
|
||||
}
|
||||
|
||||
/** Sets custom {@link SpanNameExtractor} via transform function. */
|
||||
@CanIgnoreReturnValue
|
||||
public ApacheHttpClientTelemetryBuilder setSpanNameExtractor(
|
||||
Function<
|
||||
SpanNameExtractor<ApacheHttpClientRequest>,
|
||||
? extends SpanNameExtractor<? super ApacheHttpClientRequest>>
|
||||
spanNameExtractorTransformer) {
|
||||
this.spanNameExtractorTransformer = spanNameExtractorTransformer;
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a new {@link ApacheHttpClientTelemetry} configured with this {@link
|
||||
* ApacheHttpClientTelemetryBuilder}.
|
||||
|
@ -118,10 +135,12 @@ public final class ApacheHttpClientTelemetryBuilder {
|
|||
public ApacheHttpClientTelemetry build() {
|
||||
ApacheHttpClientHttpAttributesGetter httpAttributesGetter =
|
||||
ApacheHttpClientHttpAttributesGetter.INSTANCE;
|
||||
SpanNameExtractor<? super ApacheHttpClientRequest> spanNameExtractor =
|
||||
spanNameExtractorTransformer.apply(httpSpanNameExtractorBuilder.build());
|
||||
|
||||
InstrumenterBuilder<ApacheHttpClientRequest, HttpResponse> builder =
|
||||
Instrumenter.<ApacheHttpClientRequest, HttpResponse>builder(
|
||||
openTelemetry, INSTRUMENTATION_NAME, httpSpanNameExtractorBuilder.build())
|
||||
openTelemetry, INSTRUMENTATION_NAME, spanNameExtractor)
|
||||
.setSpanStatusExtractor(HttpSpanStatusExtractor.create(httpAttributesGetter))
|
||||
.addAttributesExtractor(httpAttributesExtractorBuilder.build())
|
||||
.addAttributesExtractors(additionalExtractors)
|
||||
|
|
|
@ -13,6 +13,7 @@ import io.opentelemetry.instrumentation.api.instrumenter.AttributesExtractor;
|
|||
import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.InstrumenterBuilder;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.SpanKindExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.SpanNameExtractor;
|
||||
import io.opentelemetry.instrumentation.api.semconv.http.HttpClientAttributesExtractor;
|
||||
import io.opentelemetry.instrumentation.api.semconv.http.HttpClientAttributesExtractorBuilder;
|
||||
import io.opentelemetry.instrumentation.api.semconv.http.HttpClientMetrics;
|
||||
|
@ -22,6 +23,7 @@ import io.opentelemetry.instrumentation.api.semconv.http.HttpSpanStatusExtractor
|
|||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
import java.util.function.Function;
|
||||
import org.apache.hc.core5.http.HttpResponse;
|
||||
|
||||
/** A builder for {@link ApacheHttpClient5Telemetry}. */
|
||||
|
@ -40,7 +42,10 @@ public final class ApacheHttpClient5TelemetryBuilder {
|
|||
private final HttpSpanNameExtractorBuilder<ApacheHttpClient5Request>
|
||||
httpSpanNameExtractorBuilder =
|
||||
HttpSpanNameExtractor.builder(ApacheHttpClient5HttpAttributesGetter.INSTANCE);
|
||||
|
||||
private Function<
|
||||
SpanNameExtractor<ApacheHttpClient5Request>,
|
||||
? extends SpanNameExtractor<? super ApacheHttpClient5Request>>
|
||||
spanNameExtractorTransformer = Function.identity();
|
||||
private boolean emitExperimentalHttpClientMetrics = false;
|
||||
|
||||
ApacheHttpClient5TelemetryBuilder(OpenTelemetry openTelemetry) {
|
||||
|
@ -115,6 +120,17 @@ public final class ApacheHttpClient5TelemetryBuilder {
|
|||
return this;
|
||||
}
|
||||
|
||||
/** Sets custom {@link SpanNameExtractor} via transform function. */
|
||||
@CanIgnoreReturnValue
|
||||
public ApacheHttpClient5TelemetryBuilder setSpanNameExtractor(
|
||||
Function<
|
||||
SpanNameExtractor<ApacheHttpClient5Request>,
|
||||
? extends SpanNameExtractor<? super ApacheHttpClient5Request>>
|
||||
spanNameExtractorTransformer) {
|
||||
this.spanNameExtractorTransformer = spanNameExtractorTransformer;
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a new {@link ApacheHttpClient5Telemetry} configured with this {@link
|
||||
* ApacheHttpClient5TelemetryBuilder}.
|
||||
|
@ -122,10 +138,12 @@ public final class ApacheHttpClient5TelemetryBuilder {
|
|||
public ApacheHttpClient5Telemetry build() {
|
||||
ApacheHttpClient5HttpAttributesGetter httpAttributesGetter =
|
||||
ApacheHttpClient5HttpAttributesGetter.INSTANCE;
|
||||
SpanNameExtractor<? super ApacheHttpClient5Request> spanNameExtractor =
|
||||
spanNameExtractorTransformer.apply(httpSpanNameExtractorBuilder.build());
|
||||
|
||||
InstrumenterBuilder<ApacheHttpClient5Request, HttpResponse> builder =
|
||||
Instrumenter.<ApacheHttpClient5Request, HttpResponse>builder(
|
||||
openTelemetry, INSTRUMENTATION_NAME, httpSpanNameExtractorBuilder.build())
|
||||
openTelemetry, INSTRUMENTATION_NAME, spanNameExtractor)
|
||||
.setSpanStatusExtractor(HttpSpanStatusExtractor.create(httpAttributesGetter))
|
||||
.addAttributesExtractor(httpAttributesExtractorBuilder.build())
|
||||
.addAttributesExtractors(additionalExtractors)
|
||||
|
|
|
@ -18,6 +18,7 @@ import io.opentelemetry.instrumentation.api.incubator.semconv.http.HttpServerExp
|
|||
import io.opentelemetry.instrumentation.api.instrumenter.AttributesExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.InstrumenterBuilder;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.SpanNameExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.SpanStatusExtractor;
|
||||
import io.opentelemetry.instrumentation.api.semconv.http.HttpClientAttributesExtractor;
|
||||
import io.opentelemetry.instrumentation.api.semconv.http.HttpClientAttributesExtractorBuilder;
|
||||
|
@ -65,6 +66,12 @@ public final class ArmeriaTelemetryBuilder {
|
|||
HttpSpanNameExtractor.builder(ArmeriaHttpClientAttributesGetter.INSTANCE);
|
||||
private final HttpSpanNameExtractorBuilder<RequestContext> httpServerSpanNameExtractorBuilder =
|
||||
HttpSpanNameExtractor.builder(ArmeriaHttpServerAttributesGetter.INSTANCE);
|
||||
private Function<
|
||||
SpanNameExtractor<RequestContext>, ? extends SpanNameExtractor<? super RequestContext>>
|
||||
clientSpanNameExtractorTransformer = Function.identity();
|
||||
private Function<
|
||||
SpanNameExtractor<RequestContext>, ? extends SpanNameExtractor<? super RequestContext>>
|
||||
serverSpanNameExtractorTransformer = Function.identity();
|
||||
|
||||
private final HttpServerRouteBuilder<RequestContext> httpServerRouteBuilder =
|
||||
HttpServerRoute.builder(ArmeriaHttpServerAttributesGetter.INSTANCE);
|
||||
|
@ -212,18 +219,43 @@ public final class ArmeriaTelemetryBuilder {
|
|||
return this;
|
||||
}
|
||||
|
||||
/** Sets custom client {@link SpanNameExtractor} via transform function. */
|
||||
@CanIgnoreReturnValue
|
||||
public ArmeriaTelemetryBuilder setClientSpanNameExtractor(
|
||||
Function<
|
||||
SpanNameExtractor<RequestContext>,
|
||||
? extends SpanNameExtractor<? super RequestContext>>
|
||||
clientSpanNameExtractor) {
|
||||
this.clientSpanNameExtractorTransformer = clientSpanNameExtractor;
|
||||
return this;
|
||||
}
|
||||
|
||||
/** Sets custom server {@link SpanNameExtractor} via transform function. */
|
||||
@CanIgnoreReturnValue
|
||||
public ArmeriaTelemetryBuilder setServerSpanNameExtractor(
|
||||
Function<
|
||||
SpanNameExtractor<RequestContext>,
|
||||
? extends SpanNameExtractor<? super RequestContext>>
|
||||
serverSpanNameExtractor) {
|
||||
this.serverSpanNameExtractorTransformer = serverSpanNameExtractor;
|
||||
return this;
|
||||
}
|
||||
|
||||
public ArmeriaTelemetry build() {
|
||||
ArmeriaHttpClientAttributesGetter clientAttributesGetter =
|
||||
ArmeriaHttpClientAttributesGetter.INSTANCE;
|
||||
ArmeriaHttpServerAttributesGetter serverAttributesGetter =
|
||||
ArmeriaHttpServerAttributesGetter.INSTANCE;
|
||||
|
||||
SpanNameExtractor<? super RequestContext> clientSpanNameExtractor =
|
||||
clientSpanNameExtractorTransformer.apply(httpClientSpanNameExtractorBuilder.build());
|
||||
SpanNameExtractor<? super RequestContext> serverSpanNameExtractor =
|
||||
serverSpanNameExtractorTransformer.apply(httpServerSpanNameExtractorBuilder.build());
|
||||
|
||||
InstrumenterBuilder<ClientRequestContext, RequestLog> clientInstrumenterBuilder =
|
||||
Instrumenter.builder(
|
||||
openTelemetry, INSTRUMENTATION_NAME, httpClientSpanNameExtractorBuilder.build());
|
||||
Instrumenter.builder(openTelemetry, INSTRUMENTATION_NAME, clientSpanNameExtractor);
|
||||
InstrumenterBuilder<ServiceRequestContext, RequestLog> serverInstrumenterBuilder =
|
||||
Instrumenter.builder(
|
||||
openTelemetry, INSTRUMENTATION_NAME, httpServerSpanNameExtractorBuilder.build());
|
||||
Instrumenter.builder(openTelemetry, INSTRUMENTATION_NAME, serverSpanNameExtractor);
|
||||
|
||||
Stream.of(clientInstrumenterBuilder, serverInstrumenterBuilder)
|
||||
.forEach(instrumenter -> instrumenter.addAttributesExtractors(additionalExtractors));
|
||||
|
|
|
@ -9,6 +9,7 @@ import com.google.errorprone.annotations.CanIgnoreReturnValue;
|
|||
import io.opentelemetry.api.OpenTelemetry;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.AttributesExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.SpanNameExtractor;
|
||||
import io.opentelemetry.instrumentation.api.internal.HttpConstants;
|
||||
import io.opentelemetry.instrumentation.api.semconv.http.HttpClientAttributesExtractorBuilder;
|
||||
import io.opentelemetry.instrumentation.elasticsearch.rest.internal.ElasticsearchRestInstrumenterFactory;
|
||||
|
@ -17,6 +18,7 @@ import java.util.ArrayList;
|
|||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
import java.util.function.Function;
|
||||
import org.elasticsearch.client.Response;
|
||||
|
||||
public final class ElasticsearchRest7TelemetryBuilder {
|
||||
|
@ -27,6 +29,10 @@ public final class ElasticsearchRest7TelemetryBuilder {
|
|||
private final List<AttributesExtractor<ElasticsearchRestRequest, Response>> attributesExtractors =
|
||||
new ArrayList<>();
|
||||
private Set<String> knownMethods = HttpConstants.KNOWN_METHODS;
|
||||
private Function<
|
||||
SpanNameExtractor<ElasticsearchRestRequest>,
|
||||
? extends SpanNameExtractor<? super ElasticsearchRestRequest>>
|
||||
spanNameExtractorTransformer = Function.identity();
|
||||
|
||||
ElasticsearchRest7TelemetryBuilder(OpenTelemetry openTelemetry) {
|
||||
this.openTelemetry = openTelemetry;
|
||||
|
@ -62,6 +68,17 @@ public final class ElasticsearchRest7TelemetryBuilder {
|
|||
return this;
|
||||
}
|
||||
|
||||
/** Sets custom {@link SpanNameExtractor} via transform function. */
|
||||
@CanIgnoreReturnValue
|
||||
public ElasticsearchRest7TelemetryBuilder setSpanNameExtractor(
|
||||
Function<
|
||||
SpanNameExtractor<ElasticsearchRestRequest>,
|
||||
? extends SpanNameExtractor<? super ElasticsearchRestRequest>>
|
||||
spanNameExtractorTransformer) {
|
||||
this.spanNameExtractorTransformer = spanNameExtractorTransformer;
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a new {@link ElasticsearchRest7Telemetry} with the settings of this {@link
|
||||
* ElasticsearchRest7TelemetryBuilder}.
|
||||
|
@ -69,7 +86,12 @@ public final class ElasticsearchRest7TelemetryBuilder {
|
|||
public ElasticsearchRest7Telemetry build() {
|
||||
Instrumenter<ElasticsearchRestRequest, Response> instrumenter =
|
||||
ElasticsearchRestInstrumenterFactory.create(
|
||||
openTelemetry, INSTRUMENTATION_NAME, attributesExtractors, knownMethods, false);
|
||||
openTelemetry,
|
||||
INSTRUMENTATION_NAME,
|
||||
attributesExtractors,
|
||||
spanNameExtractorTransformer,
|
||||
knownMethods,
|
||||
false);
|
||||
|
||||
return new ElasticsearchRest7Telemetry(instrumenter);
|
||||
}
|
||||
|
|
|
@ -12,6 +12,7 @@ import io.opentelemetry.instrumentation.elasticsearch.rest.internal.Elasticsearc
|
|||
import io.opentelemetry.javaagent.bootstrap.internal.CommonConfig;
|
||||
import io.opentelemetry.javaagent.bootstrap.internal.InstrumentationConfig;
|
||||
import java.util.Collections;
|
||||
import java.util.function.Function;
|
||||
import org.elasticsearch.client.Response;
|
||||
|
||||
public final class ElasticsearchRestJavaagentInstrumenterFactory {
|
||||
|
@ -28,6 +29,7 @@ public final class ElasticsearchRestJavaagentInstrumenterFactory {
|
|||
GlobalOpenTelemetry.get(),
|
||||
instrumentationName,
|
||||
Collections.emptyList(),
|
||||
Function.identity(),
|
||||
CommonConfig.get().getKnownHttpRequestMethods(),
|
||||
CAPTURE_SEARCH_QUERY);
|
||||
}
|
||||
|
|
|
@ -10,8 +10,10 @@ import io.opentelemetry.instrumentation.api.incubator.semconv.db.DbClientAttribu
|
|||
import io.opentelemetry.instrumentation.api.instrumenter.AttributesExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.SpanKindExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.SpanNameExtractor;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
import java.util.function.Function;
|
||||
import org.elasticsearch.client.Response;
|
||||
|
||||
/**
|
||||
|
@ -26,17 +28,22 @@ public final class ElasticsearchRestInstrumenterFactory {
|
|||
OpenTelemetry openTelemetry,
|
||||
String instrumentationName,
|
||||
List<AttributesExtractor<ElasticsearchRestRequest, Response>> attributesExtractors,
|
||||
Function<
|
||||
SpanNameExtractor<ElasticsearchRestRequest>,
|
||||
? extends SpanNameExtractor<? super ElasticsearchRestRequest>>
|
||||
spanNameExtractorTransformer,
|
||||
Set<String> knownMethods,
|
||||
boolean captureSearchQuery) {
|
||||
ElasticsearchDbAttributesGetter dbClientAttributesGetter =
|
||||
new ElasticsearchDbAttributesGetter(captureSearchQuery);
|
||||
ElasticsearchClientAttributeExtractor esClientAtrributesExtractor =
|
||||
new ElasticsearchClientAttributeExtractor(knownMethods);
|
||||
ElasticsearchSpanNameExtractor nameExtractor =
|
||||
new ElasticsearchSpanNameExtractor(dbClientAttributesGetter);
|
||||
SpanNameExtractor<? super ElasticsearchRestRequest> spanNameExtractor =
|
||||
spanNameExtractorTransformer.apply(
|
||||
new ElasticsearchSpanNameExtractor(dbClientAttributesGetter));
|
||||
|
||||
return Instrumenter.<ElasticsearchRestRequest, Response>builder(
|
||||
openTelemetry, instrumentationName, nameExtractor)
|
||||
openTelemetry, instrumentationName, spanNameExtractor)
|
||||
.addAttributesExtractor(DbClientAttributesExtractor.create(dbClientAttributesGetter))
|
||||
.addAttributesExtractor(esClientAtrributesExtractor)
|
||||
.addAttributesExtractors(attributesExtractors)
|
||||
|
|
|
@ -37,14 +37,10 @@ public final class GrpcTelemetryBuilder {
|
|||
private final OpenTelemetry openTelemetry;
|
||||
@Nullable private String peerService;
|
||||
|
||||
@Nullable
|
||||
private Function<SpanNameExtractor<GrpcRequest>, ? extends SpanNameExtractor<? super GrpcRequest>>
|
||||
clientSpanNameExtractorTransformer;
|
||||
|
||||
@Nullable
|
||||
clientSpanNameExtractorTransformer = Function.identity();
|
||||
private Function<SpanNameExtractor<GrpcRequest>, ? extends SpanNameExtractor<? super GrpcRequest>>
|
||||
serverSpanNameExtractorTransformer;
|
||||
|
||||
serverSpanNameExtractorTransformer = Function.identity();
|
||||
private final List<AttributesExtractor<? super GrpcRequest, ? super Status>>
|
||||
additionalExtractors = new ArrayList<>();
|
||||
private final List<AttributesExtractor<? super GrpcRequest, ? super Status>>
|
||||
|
@ -149,19 +145,12 @@ public final class GrpcTelemetryBuilder {
|
|||
}
|
||||
|
||||
/** Returns a new {@link GrpcTelemetry} with the settings of this {@link GrpcTelemetryBuilder}. */
|
||||
@SuppressWarnings("deprecation") // using createForServerSide() for the old->stable semconv story
|
||||
public GrpcTelemetry build() {
|
||||
SpanNameExtractor<GrpcRequest> originalSpanNameExtractor = new GrpcSpanNameExtractor();
|
||||
|
||||
SpanNameExtractor<? super GrpcRequest> clientSpanNameExtractor = originalSpanNameExtractor;
|
||||
if (clientSpanNameExtractorTransformer != null) {
|
||||
clientSpanNameExtractor = clientSpanNameExtractorTransformer.apply(originalSpanNameExtractor);
|
||||
}
|
||||
|
||||
SpanNameExtractor<? super GrpcRequest> serverSpanNameExtractor = originalSpanNameExtractor;
|
||||
if (serverSpanNameExtractorTransformer != null) {
|
||||
serverSpanNameExtractor = serverSpanNameExtractorTransformer.apply(originalSpanNameExtractor);
|
||||
}
|
||||
SpanNameExtractor<? super GrpcRequest> clientSpanNameExtractor =
|
||||
clientSpanNameExtractorTransformer.apply(originalSpanNameExtractor);
|
||||
SpanNameExtractor<? super GrpcRequest> serverSpanNameExtractor =
|
||||
serverSpanNameExtractorTransformer.apply(originalSpanNameExtractor);
|
||||
|
||||
InstrumenterBuilder<GrpcRequest, Status> clientInstrumenterBuilder =
|
||||
Instrumenter.builder(openTelemetry, INSTRUMENTATION_NAME, clientSpanNameExtractor);
|
||||
|
|
|
@ -16,6 +16,7 @@ import io.opentelemetry.instrumentation.httpclient.internal.JavaHttpClientInstru
|
|||
import io.opentelemetry.javaagent.bootstrap.internal.CommonConfig;
|
||||
import java.net.http.HttpRequest;
|
||||
import java.net.http.HttpResponse;
|
||||
import java.util.function.Function;
|
||||
|
||||
public class JavaHttpClientSingletons {
|
||||
|
||||
|
@ -34,6 +35,7 @@ public class JavaHttpClientSingletons {
|
|||
.setCapturedResponseHeaders(CommonConfig.get().getClientResponseHeaders())
|
||||
.setKnownMethods(CommonConfig.get().getKnownHttpRequestMethods()),
|
||||
builder -> builder.setKnownMethods(CommonConfig.get().getKnownHttpRequestMethods()),
|
||||
Function.identity(),
|
||||
singletonList(
|
||||
HttpClientPeerServiceAttributesExtractor.create(
|
||||
JavaHttpClientAttributesGetter.INSTANCE,
|
||||
|
|
|
@ -9,6 +9,7 @@ import com.google.errorprone.annotations.CanIgnoreReturnValue;
|
|||
import io.opentelemetry.api.OpenTelemetry;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.AttributesExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.SpanNameExtractor;
|
||||
import io.opentelemetry.instrumentation.api.semconv.http.HttpClientAttributesExtractorBuilder;
|
||||
import io.opentelemetry.instrumentation.api.semconv.http.HttpSpanNameExtractorBuilder;
|
||||
import io.opentelemetry.instrumentation.httpclient.internal.HttpHeadersSetter;
|
||||
|
@ -19,6 +20,7 @@ import java.util.ArrayList;
|
|||
import java.util.List;
|
||||
import java.util.Set;
|
||||
import java.util.function.Consumer;
|
||||
import java.util.function.Function;
|
||||
|
||||
public final class JavaHttpClientTelemetryBuilder {
|
||||
|
||||
|
@ -30,6 +32,8 @@ public final class JavaHttpClientTelemetryBuilder {
|
|||
extractorConfigurer = builder -> {};
|
||||
private Consumer<HttpSpanNameExtractorBuilder<HttpRequest>> spanNameExtractorConfigurer =
|
||||
builder -> {};
|
||||
private Function<SpanNameExtractor<HttpRequest>, ? extends SpanNameExtractor<? super HttpRequest>>
|
||||
spanNameExtractorTransformer = Function.identity();
|
||||
private boolean emitExperimentalHttpClientMetrics = false;
|
||||
|
||||
JavaHttpClientTelemetryBuilder(OpenTelemetry openTelemetry) {
|
||||
|
@ -106,12 +110,22 @@ public final class JavaHttpClientTelemetryBuilder {
|
|||
return this;
|
||||
}
|
||||
|
||||
/** Sets custom {@link SpanNameExtractor} via transform function. */
|
||||
@CanIgnoreReturnValue
|
||||
public JavaHttpClientTelemetryBuilder setSpanNameExtractor(
|
||||
Function<SpanNameExtractor<HttpRequest>, ? extends SpanNameExtractor<? super HttpRequest>>
|
||||
spanNameExtractorTransformer) {
|
||||
this.spanNameExtractorTransformer = spanNameExtractorTransformer;
|
||||
return this;
|
||||
}
|
||||
|
||||
public JavaHttpClientTelemetry build() {
|
||||
Instrumenter<HttpRequest, HttpResponse<?>> instrumenter =
|
||||
JavaHttpClientInstrumenterFactory.createInstrumenter(
|
||||
openTelemetry,
|
||||
extractorConfigurer,
|
||||
spanNameExtractorConfigurer,
|
||||
spanNameExtractorTransformer,
|
||||
additionalExtractors,
|
||||
emitExperimentalHttpClientMetrics);
|
||||
|
||||
|
|
|
@ -12,6 +12,7 @@ import io.opentelemetry.instrumentation.api.instrumenter.AttributesExtractor;
|
|||
import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.InstrumenterBuilder;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.SpanKindExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.SpanNameExtractor;
|
||||
import io.opentelemetry.instrumentation.api.semconv.http.HttpClientAttributesExtractor;
|
||||
import io.opentelemetry.instrumentation.api.semconv.http.HttpClientAttributesExtractorBuilder;
|
||||
import io.opentelemetry.instrumentation.api.semconv.http.HttpClientMetrics;
|
||||
|
@ -22,6 +23,7 @@ import java.net.http.HttpRequest;
|
|||
import java.net.http.HttpResponse;
|
||||
import java.util.List;
|
||||
import java.util.function.Consumer;
|
||||
import java.util.function.Function;
|
||||
|
||||
/**
|
||||
* This class is internal and is hence not for public use. Its APIs are unstable and can change at
|
||||
|
@ -35,6 +37,8 @@ public final class JavaHttpClientInstrumenterFactory {
|
|||
Consumer<HttpClientAttributesExtractorBuilder<HttpRequest, HttpResponse<?>>>
|
||||
extractorConfigurer,
|
||||
Consumer<HttpSpanNameExtractorBuilder<HttpRequest>> spanNameExtractorConfigurer,
|
||||
Function<SpanNameExtractor<HttpRequest>, ? extends SpanNameExtractor<? super HttpRequest>>
|
||||
spanNameExtractorTransformer,
|
||||
List<AttributesExtractor<? super HttpRequest, ? super HttpResponse<?>>> additionalExtractors,
|
||||
boolean emitExperimentalHttpClientMetrics) {
|
||||
|
||||
|
@ -48,10 +52,12 @@ public final class JavaHttpClientInstrumenterFactory {
|
|||
HttpSpanNameExtractorBuilder<HttpRequest> httpSpanNameExtractorBuilder =
|
||||
HttpSpanNameExtractor.builder(httpAttributesGetter);
|
||||
spanNameExtractorConfigurer.accept(httpSpanNameExtractorBuilder);
|
||||
SpanNameExtractor<? super HttpRequest> spanNameExtractor =
|
||||
spanNameExtractorTransformer.apply(httpSpanNameExtractorBuilder.build());
|
||||
|
||||
InstrumenterBuilder<HttpRequest, HttpResponse<?>> builder =
|
||||
Instrumenter.<HttpRequest, HttpResponse<?>>builder(
|
||||
openTelemetry, INSTRUMENTATION_NAME, httpSpanNameExtractorBuilder.build())
|
||||
openTelemetry, INSTRUMENTATION_NAME, spanNameExtractor)
|
||||
.setSpanStatusExtractor(HttpSpanStatusExtractor.create(httpAttributesGetter))
|
||||
.addAttributesExtractor(httpAttributesExtractorBuilder.build())
|
||||
.addAttributesExtractors(additionalExtractors)
|
||||
|
|
|
@ -13,6 +13,7 @@ import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter;
|
|||
import io.opentelemetry.instrumentation.jetty.httpclient.v9_2.internal.JettyClientHttpAttributesGetter;
|
||||
import io.opentelemetry.instrumentation.jetty.httpclient.v9_2.internal.JettyClientInstrumenterFactory;
|
||||
import io.opentelemetry.javaagent.bootstrap.internal.CommonConfig;
|
||||
import java.util.function.Function;
|
||||
import org.eclipse.jetty.client.api.Request;
|
||||
import org.eclipse.jetty.client.api.Response;
|
||||
|
||||
|
@ -27,6 +28,7 @@ public class JettyHttpClientSingletons {
|
|||
.setCapturedResponseHeaders(CommonConfig.get().getClientResponseHeaders())
|
||||
.setKnownMethods(CommonConfig.get().getKnownHttpRequestMethods()),
|
||||
builder -> builder.setKnownMethods(CommonConfig.get().getKnownHttpRequestMethods()),
|
||||
Function.identity(),
|
||||
singletonList(
|
||||
HttpClientPeerServiceAttributesExtractor.create(
|
||||
JettyClientHttpAttributesGetter.INSTANCE,
|
||||
|
|
|
@ -8,6 +8,7 @@ package io.opentelemetry.instrumentation.jetty.httpclient.v9_2;
|
|||
import com.google.errorprone.annotations.CanIgnoreReturnValue;
|
||||
import io.opentelemetry.api.OpenTelemetry;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.AttributesExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.SpanNameExtractor;
|
||||
import io.opentelemetry.instrumentation.api.semconv.http.HttpClientAttributesExtractorBuilder;
|
||||
import io.opentelemetry.instrumentation.api.semconv.http.HttpSpanNameExtractorBuilder;
|
||||
import io.opentelemetry.instrumentation.jetty.httpclient.v9_2.internal.JettyClientInstrumenterFactory;
|
||||
|
@ -15,6 +16,7 @@ import java.util.ArrayList;
|
|||
import java.util.List;
|
||||
import java.util.Set;
|
||||
import java.util.function.Consumer;
|
||||
import java.util.function.Function;
|
||||
import org.eclipse.jetty.client.HttpClientTransport;
|
||||
import org.eclipse.jetty.client.api.Request;
|
||||
import org.eclipse.jetty.client.api.Response;
|
||||
|
@ -30,6 +32,8 @@ public final class JettyClientTelemetryBuilder {
|
|||
builder -> {};
|
||||
private Consumer<HttpSpanNameExtractorBuilder<Request>> spanNameExtractorConfigurer =
|
||||
builder -> {};
|
||||
private Function<SpanNameExtractor<Request>, ? extends SpanNameExtractor<? super Request>>
|
||||
spanNameExtractorTransformer = Function.identity();
|
||||
private boolean emitExperimentalHttpClientMetrics = false;
|
||||
private HttpClientTransport httpClientTransport;
|
||||
private SslContextFactory sslContextFactory;
|
||||
|
@ -121,6 +125,15 @@ public final class JettyClientTelemetryBuilder {
|
|||
return this;
|
||||
}
|
||||
|
||||
/** Sets custom {@link SpanNameExtractor} via transform function. */
|
||||
@CanIgnoreReturnValue
|
||||
public JettyClientTelemetryBuilder setSpanNameExtractor(
|
||||
Function<SpanNameExtractor<Request>, ? extends SpanNameExtractor<? super Request>>
|
||||
spanNameExtractorTransformer) {
|
||||
this.spanNameExtractorTransformer = spanNameExtractorTransformer;
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a new {@link JettyClientTelemetry} with the settings of this {@link
|
||||
* JettyClientTelemetryBuilder}.
|
||||
|
@ -132,6 +145,7 @@ public final class JettyClientTelemetryBuilder {
|
|||
openTelemetry,
|
||||
extractorConfigurer,
|
||||
spanNameExtractorConfigurer,
|
||||
spanNameExtractorTransformer,
|
||||
additionalExtractors,
|
||||
emitExperimentalHttpClientMetrics),
|
||||
sslContextFactory,
|
||||
|
|
|
@ -11,6 +11,7 @@ import io.opentelemetry.instrumentation.api.incubator.semconv.http.HttpExperimen
|
|||
import io.opentelemetry.instrumentation.api.instrumenter.AttributesExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.InstrumenterBuilder;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.SpanNameExtractor;
|
||||
import io.opentelemetry.instrumentation.api.semconv.http.HttpClientAttributesExtractor;
|
||||
import io.opentelemetry.instrumentation.api.semconv.http.HttpClientAttributesExtractorBuilder;
|
||||
import io.opentelemetry.instrumentation.api.semconv.http.HttpClientMetrics;
|
||||
|
@ -19,6 +20,7 @@ import io.opentelemetry.instrumentation.api.semconv.http.HttpSpanNameExtractorBu
|
|||
import io.opentelemetry.instrumentation.api.semconv.http.HttpSpanStatusExtractor;
|
||||
import java.util.List;
|
||||
import java.util.function.Consumer;
|
||||
import java.util.function.Function;
|
||||
import org.eclipse.jetty.client.api.Request;
|
||||
import org.eclipse.jetty.client.api.Response;
|
||||
|
||||
|
@ -34,6 +36,8 @@ public final class JettyClientInstrumenterFactory {
|
|||
OpenTelemetry openTelemetry,
|
||||
Consumer<HttpClientAttributesExtractorBuilder<Request, Response>> extractorConfigurer,
|
||||
Consumer<HttpSpanNameExtractorBuilder<Request>> spanNameExtractorConfigurer,
|
||||
Function<SpanNameExtractor<Request>, ? extends SpanNameExtractor<? super Request>>
|
||||
spanNameExtractorTransformer,
|
||||
List<AttributesExtractor<? super Request, ? super Response>> additionalExtractors,
|
||||
boolean emitExperimentalHttpClientMetrics) {
|
||||
|
||||
|
@ -46,10 +50,12 @@ public final class JettyClientInstrumenterFactory {
|
|||
HttpSpanNameExtractorBuilder<Request> httpSpanNameExtractorBuilder =
|
||||
HttpSpanNameExtractor.builder(httpAttributesGetter);
|
||||
spanNameExtractorConfigurer.accept(httpSpanNameExtractorBuilder);
|
||||
SpanNameExtractor<? super Request> spanNameExtractor =
|
||||
spanNameExtractorTransformer.apply(httpSpanNameExtractorBuilder.build());
|
||||
|
||||
InstrumenterBuilder<Request, Response> builder =
|
||||
Instrumenter.<Request, Response>builder(
|
||||
openTelemetry, INSTRUMENTATION_NAME, httpSpanNameExtractorBuilder.build())
|
||||
openTelemetry, INSTRUMENTATION_NAME, spanNameExtractor)
|
||||
.setSpanStatusExtractor(HttpSpanStatusExtractor.create(httpAttributesGetter))
|
||||
.addAttributesExtractor(httpAttributesExtractorBuilder.build())
|
||||
.addAttributesExtractors(additionalExtractors)
|
||||
|
|
|
@ -16,6 +16,7 @@ import io.opentelemetry.instrumentation.api.instrumenter.AttributesExtractor;
|
|||
import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.InstrumenterBuilder;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.SpanKindExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.SpanNameExtractor;
|
||||
import io.opentelemetry.instrumentation.api.semconv.http.HttpClientAttributesExtractor;
|
||||
import io.opentelemetry.instrumentation.api.semconv.http.HttpClientAttributesExtractorBuilder;
|
||||
import io.opentelemetry.instrumentation.api.semconv.http.HttpClientMetrics;
|
||||
|
@ -28,6 +29,7 @@ import io.opentelemetry.instrumentation.netty.common.internal.NettyConnectionReq
|
|||
import io.opentelemetry.instrumentation.netty.v4.common.HttpRequestAndChannel;
|
||||
import java.util.List;
|
||||
import java.util.function.Consumer;
|
||||
import java.util.function.Function;
|
||||
|
||||
/**
|
||||
* This class is internal and is hence not for public use. Its APIs are unstable and can change at
|
||||
|
@ -61,6 +63,10 @@ public final class NettyClientInstrumenterFactory {
|
|||
Consumer<HttpClientAttributesExtractorBuilder<HttpRequestAndChannel, HttpResponse>>
|
||||
extractorConfigurer,
|
||||
Consumer<HttpSpanNameExtractorBuilder<HttpRequestAndChannel>> spanNameExtractorConfigurer,
|
||||
Function<
|
||||
SpanNameExtractor<HttpRequestAndChannel>,
|
||||
? extends SpanNameExtractor<? super HttpRequestAndChannel>>
|
||||
spanNameExtractorTransformer,
|
||||
List<AttributesExtractor<HttpRequestAndChannel, HttpResponse>>
|
||||
additionalHttpAttributeExtractors) {
|
||||
NettyHttpClientAttributesGetter httpAttributesGetter = new NettyHttpClientAttributesGetter();
|
||||
|
@ -72,10 +78,12 @@ public final class NettyClientInstrumenterFactory {
|
|||
HttpSpanNameExtractorBuilder<HttpRequestAndChannel> httpSpanNameExtractorBuilder =
|
||||
HttpSpanNameExtractor.builder(httpAttributesGetter);
|
||||
spanNameExtractorConfigurer.accept(httpSpanNameExtractorBuilder);
|
||||
SpanNameExtractor<? super HttpRequestAndChannel> spanNameExtractor =
|
||||
spanNameExtractorTransformer.apply(httpSpanNameExtractorBuilder.build());
|
||||
|
||||
InstrumenterBuilder<HttpRequestAndChannel, HttpResponse> builder =
|
||||
Instrumenter.<HttpRequestAndChannel, HttpResponse>builder(
|
||||
openTelemetry, instrumentationName, httpSpanNameExtractorBuilder.build())
|
||||
openTelemetry, instrumentationName, spanNameExtractor)
|
||||
.setSpanStatusExtractor(HttpSpanStatusExtractor.create(httpAttributesGetter))
|
||||
.addAttributesExtractor(extractorBuilder.build())
|
||||
.addAttributesExtractor(
|
||||
|
|
|
@ -17,6 +17,7 @@ import io.opentelemetry.instrumentation.netty.v4.common.internal.client.NettySsl
|
|||
import io.opentelemetry.javaagent.bootstrap.internal.CommonConfig;
|
||||
import io.opentelemetry.javaagent.bootstrap.internal.InstrumentationConfig;
|
||||
import java.util.Collections;
|
||||
import java.util.function.Function;
|
||||
|
||||
public final class NettyClientSingletons {
|
||||
|
||||
|
@ -48,6 +49,7 @@ public final class NettyClientSingletons {
|
|||
.setCapturedResponseHeaders(CommonConfig.get().getClientResponseHeaders())
|
||||
.setKnownMethods(CommonConfig.get().getKnownHttpRequestMethods()),
|
||||
builder -> builder.setKnownMethods(CommonConfig.get().getKnownHttpRequestMethods()),
|
||||
Function.identity(),
|
||||
Collections.emptyList());
|
||||
CONNECTION_INSTRUMENTER = factory.createConnectionInstrumenter();
|
||||
SSL_INSTRUMENTER = factory.createSslInstrumenter();
|
||||
|
|
|
@ -18,6 +18,7 @@ import io.opentelemetry.instrumentation.netty.v4_1.internal.client.NettyClientHa
|
|||
import io.opentelemetry.javaagent.bootstrap.internal.CommonConfig;
|
||||
import io.opentelemetry.javaagent.bootstrap.internal.InstrumentationConfig;
|
||||
import java.util.Collections;
|
||||
import java.util.function.Function;
|
||||
|
||||
public final class NettyClientSingletons {
|
||||
|
||||
|
@ -50,6 +51,7 @@ public final class NettyClientSingletons {
|
|||
.setCapturedResponseHeaders(CommonConfig.get().getClientResponseHeaders())
|
||||
.setKnownMethods(CommonConfig.get().getKnownHttpRequestMethods()),
|
||||
builder -> builder.setKnownMethods(CommonConfig.get().getKnownHttpRequestMethods()),
|
||||
Function.identity(),
|
||||
Collections.emptyList());
|
||||
CONNECTION_INSTRUMENTER = factory.createConnectionInstrumenter();
|
||||
SSL_INSTRUMENTER = factory.createSslInstrumenter();
|
||||
|
|
|
@ -10,6 +10,7 @@ import io.netty.handler.codec.http.HttpResponse;
|
|||
import io.opentelemetry.api.OpenTelemetry;
|
||||
import io.opentelemetry.instrumentation.api.incubator.semconv.net.PeerServiceResolver;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.AttributesExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.SpanNameExtractor;
|
||||
import io.opentelemetry.instrumentation.api.semconv.http.HttpClientAttributesExtractorBuilder;
|
||||
import io.opentelemetry.instrumentation.api.semconv.http.HttpSpanNameExtractorBuilder;
|
||||
import io.opentelemetry.instrumentation.netty.v4.common.HttpRequestAndChannel;
|
||||
|
@ -20,6 +21,7 @@ import java.util.Collections;
|
|||
import java.util.List;
|
||||
import java.util.Set;
|
||||
import java.util.function.Consumer;
|
||||
import java.util.function.Function;
|
||||
|
||||
/** A builder of {@link NettyClientTelemetry}. */
|
||||
public final class NettyClientTelemetryBuilder {
|
||||
|
@ -32,6 +34,11 @@ public final class NettyClientTelemetryBuilder {
|
|||
extractorConfigurer = builder -> {};
|
||||
private Consumer<HttpSpanNameExtractorBuilder<HttpRequestAndChannel>>
|
||||
spanNameExtractorConfigurer = builder -> {};
|
||||
private Function<
|
||||
SpanNameExtractor<HttpRequestAndChannel>,
|
||||
? extends SpanNameExtractor<? super HttpRequestAndChannel>>
|
||||
spanNameExtractorTransformer = Function.identity();
|
||||
|
||||
private boolean emitExperimentalHttpClientMetrics = false;
|
||||
private boolean emitExperimentalHttpClientEvents = false;
|
||||
|
||||
|
@ -120,6 +127,17 @@ public final class NettyClientTelemetryBuilder {
|
|||
return this;
|
||||
}
|
||||
|
||||
/** Sets custom {@link SpanNameExtractor} via transform function. */
|
||||
@CanIgnoreReturnValue
|
||||
public NettyClientTelemetryBuilder setSpanNameExtractor(
|
||||
Function<
|
||||
SpanNameExtractor<HttpRequestAndChannel>,
|
||||
? extends SpanNameExtractor<? super HttpRequestAndChannel>>
|
||||
spanNameExtractorTransformer) {
|
||||
this.spanNameExtractorTransformer = spanNameExtractorTransformer;
|
||||
return this;
|
||||
}
|
||||
|
||||
/** Returns a new {@link NettyClientTelemetry} with the given configuration. */
|
||||
public NettyClientTelemetry build() {
|
||||
return new NettyClientTelemetry(
|
||||
|
@ -131,7 +149,10 @@ public final class NettyClientTelemetryBuilder {
|
|||
PeerServiceResolver.create(Collections.emptyMap()),
|
||||
emitExperimentalHttpClientMetrics)
|
||||
.createHttpInstrumenter(
|
||||
extractorConfigurer, spanNameExtractorConfigurer, additionalAttributesExtractors),
|
||||
extractorConfigurer,
|
||||
spanNameExtractorConfigurer,
|
||||
spanNameExtractorTransformer,
|
||||
additionalAttributesExtractors),
|
||||
emitExperimentalHttpClientEvents);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -18,6 +18,7 @@ import io.opentelemetry.instrumentation.okhttp.v3_0.internal.OkHttpAttributesGet
|
|||
import io.opentelemetry.instrumentation.okhttp.v3_0.internal.OkHttpInstrumenterFactory;
|
||||
import io.opentelemetry.instrumentation.okhttp.v3_0.internal.TracingInterceptor;
|
||||
import io.opentelemetry.javaagent.bootstrap.internal.CommonConfig;
|
||||
import java.util.function.Function;
|
||||
import okhttp3.Interceptor;
|
||||
import okhttp3.Request;
|
||||
import okhttp3.Response;
|
||||
|
@ -34,6 +35,7 @@ public final class OkHttp3Singletons {
|
|||
.setCapturedResponseHeaders(CommonConfig.get().getClientResponseHeaders())
|
||||
.setKnownMethods(CommonConfig.get().getKnownHttpRequestMethods()),
|
||||
builder -> builder.setKnownMethods(CommonConfig.get().getKnownHttpRequestMethods()),
|
||||
Function.identity(),
|
||||
singletonList(
|
||||
HttpClientPeerServiceAttributesExtractor.create(
|
||||
OkHttpAttributesGetter.INSTANCE, CommonConfig.get().getPeerServiceResolver())),
|
||||
|
|
|
@ -8,6 +8,7 @@ package io.opentelemetry.instrumentation.okhttp.v3_0;
|
|||
import com.google.errorprone.annotations.CanIgnoreReturnValue;
|
||||
import io.opentelemetry.api.OpenTelemetry;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.AttributesExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.SpanNameExtractor;
|
||||
import io.opentelemetry.instrumentation.api.semconv.http.HttpClientAttributesExtractorBuilder;
|
||||
import io.opentelemetry.instrumentation.api.semconv.http.HttpSpanNameExtractorBuilder;
|
||||
import io.opentelemetry.instrumentation.okhttp.v3_0.internal.OkHttpInstrumenterFactory;
|
||||
|
@ -15,6 +16,7 @@ import java.util.ArrayList;
|
|||
import java.util.List;
|
||||
import java.util.Set;
|
||||
import java.util.function.Consumer;
|
||||
import java.util.function.Function;
|
||||
import okhttp3.Request;
|
||||
import okhttp3.Response;
|
||||
|
||||
|
@ -28,6 +30,8 @@ public final class OkHttpTelemetryBuilder {
|
|||
builder -> {};
|
||||
private Consumer<HttpSpanNameExtractorBuilder<Request>> spanNameExtractorConfigurer =
|
||||
builder -> {};
|
||||
private Function<SpanNameExtractor<Request>, ? extends SpanNameExtractor<? super Request>>
|
||||
spanNameExtractorTransformer = Function.identity();
|
||||
private boolean emitExperimentalHttpClientMetrics = false;
|
||||
|
||||
OkHttpTelemetryBuilder(OpenTelemetry openTelemetry) {
|
||||
|
@ -104,6 +108,15 @@ public final class OkHttpTelemetryBuilder {
|
|||
return this;
|
||||
}
|
||||
|
||||
/** Sets custom {@link SpanNameExtractor} via transform function. */
|
||||
@CanIgnoreReturnValue
|
||||
public OkHttpTelemetryBuilder setSpanNameExtractor(
|
||||
Function<SpanNameExtractor<Request>, ? extends SpanNameExtractor<? super Request>>
|
||||
spanNameExtractorTransformer) {
|
||||
this.spanNameExtractorTransformer = spanNameExtractorTransformer;
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a new {@link OkHttpTelemetry} with the settings of this {@link OkHttpTelemetryBuilder}.
|
||||
*/
|
||||
|
@ -113,6 +126,7 @@ public final class OkHttpTelemetryBuilder {
|
|||
openTelemetry,
|
||||
extractorConfigurer,
|
||||
spanNameExtractorConfigurer,
|
||||
spanNameExtractorTransformer,
|
||||
additionalExtractors,
|
||||
emitExperimentalHttpClientMetrics),
|
||||
openTelemetry.getPropagators());
|
||||
|
|
|
@ -13,6 +13,7 @@ import io.opentelemetry.instrumentation.api.incubator.semconv.http.HttpExperimen
|
|||
import io.opentelemetry.instrumentation.api.instrumenter.AttributesExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.InstrumenterBuilder;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.SpanNameExtractor;
|
||||
import io.opentelemetry.instrumentation.api.semconv.http.HttpClientAttributesExtractor;
|
||||
import io.opentelemetry.instrumentation.api.semconv.http.HttpClientAttributesExtractorBuilder;
|
||||
import io.opentelemetry.instrumentation.api.semconv.http.HttpClientMetrics;
|
||||
|
@ -21,6 +22,7 @@ import io.opentelemetry.instrumentation.api.semconv.http.HttpSpanNameExtractorBu
|
|||
import io.opentelemetry.instrumentation.api.semconv.http.HttpSpanStatusExtractor;
|
||||
import java.util.List;
|
||||
import java.util.function.Consumer;
|
||||
import java.util.function.Function;
|
||||
import okhttp3.Request;
|
||||
import okhttp3.Response;
|
||||
|
||||
|
@ -36,6 +38,8 @@ public final class OkHttpInstrumenterFactory {
|
|||
OpenTelemetry openTelemetry,
|
||||
Consumer<HttpClientAttributesExtractorBuilder<Request, Response>> extractorConfigurer,
|
||||
Consumer<HttpSpanNameExtractorBuilder<Request>> spanNameExtractorConfigurer,
|
||||
Function<SpanNameExtractor<Request>, ? extends SpanNameExtractor<? super Request>>
|
||||
spanNameExtractorTransformer,
|
||||
List<AttributesExtractor<Request, Response>> additionalAttributesExtractors,
|
||||
boolean emitExperimentalHttpClientMetrics) {
|
||||
|
||||
|
@ -48,10 +52,12 @@ public final class OkHttpInstrumenterFactory {
|
|||
HttpSpanNameExtractorBuilder<Request> httpSpanNameExtractorBuilder =
|
||||
HttpSpanNameExtractor.builder(httpAttributesGetter);
|
||||
spanNameExtractorConfigurer.accept(httpSpanNameExtractorBuilder);
|
||||
SpanNameExtractor<? super Request> spanNameExtractor =
|
||||
spanNameExtractorTransformer.apply(httpSpanNameExtractorBuilder.build());
|
||||
|
||||
InstrumenterBuilder<Request, Response> builder =
|
||||
Instrumenter.<Request, Response>builder(
|
||||
openTelemetry, INSTRUMENTATION_NAME, httpSpanNameExtractorBuilder.build())
|
||||
openTelemetry, INSTRUMENTATION_NAME, spanNameExtractor)
|
||||
.setSpanStatusExtractor(HttpSpanStatusExtractor.create(httpAttributesGetter))
|
||||
.addAttributesExtractor(extractorBuilder.build())
|
||||
.addAttributesExtractors(additionalAttributesExtractors)
|
||||
|
|
|
@ -12,21 +12,24 @@ import io.opentelemetry.instrumentation.api.incubator.semconv.code.CodeAttribute
|
|||
import io.opentelemetry.instrumentation.api.instrumenter.AttributesExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.InstrumenterBuilder;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.SpanNameExtractor;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.function.Function;
|
||||
import org.quartz.JobExecutionContext;
|
||||
|
||||
/** A builder of {@link QuartzTelemetry}. */
|
||||
public final class QuartzTelemetryBuilder {
|
||||
|
||||
private static final String INSTRUMENTATION_NAME = "io.opentelemetry.quartz-2.0";
|
||||
|
||||
private final OpenTelemetry openTelemetry;
|
||||
|
||||
private final List<AttributesExtractor<? super JobExecutionContext, ? super Void>>
|
||||
additionalExtractors = new ArrayList<>();
|
||||
|
||||
private boolean captureExperimentalSpanAttributes;
|
||||
private Function<
|
||||
SpanNameExtractor<JobExecutionContext>,
|
||||
? extends SpanNameExtractor<? super JobExecutionContext>>
|
||||
spanNameExtractorTransformer = Function.identity();
|
||||
|
||||
QuartzTelemetryBuilder(OpenTelemetry openTelemetry) {
|
||||
this.openTelemetry = openTelemetry;
|
||||
|
@ -55,12 +58,26 @@ public final class QuartzTelemetryBuilder {
|
|||
return this;
|
||||
}
|
||||
|
||||
/** Sets custom {@link SpanNameExtractor} via transform function. */
|
||||
@CanIgnoreReturnValue
|
||||
public QuartzTelemetryBuilder setSpanNameExtractor(
|
||||
Function<
|
||||
SpanNameExtractor<JobExecutionContext>,
|
||||
? extends SpanNameExtractor<? super JobExecutionContext>>
|
||||
spanNameExtractorTransformer) {
|
||||
this.spanNameExtractorTransformer = spanNameExtractorTransformer;
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a new {@link QuartzTelemetry} with the settings of this {@link QuartzTelemetryBuilder}.
|
||||
*/
|
||||
public QuartzTelemetry build() {
|
||||
SpanNameExtractor<? super JobExecutionContext> spanNameExtractor =
|
||||
spanNameExtractorTransformer.apply(new QuartzSpanNameExtractor());
|
||||
|
||||
InstrumenterBuilder<JobExecutionContext, Void> instrumenter =
|
||||
Instrumenter.builder(openTelemetry, INSTRUMENTATION_NAME, new QuartzSpanNameExtractor());
|
||||
Instrumenter.builder(openTelemetry, INSTRUMENTATION_NAME, spanNameExtractor);
|
||||
|
||||
if (captureExperimentalSpanAttributes) {
|
||||
instrumenter.addAttributesExtractor(
|
||||
|
|
|
@ -8,14 +8,18 @@ package io.opentelemetry.instrumentation.r2dbc.v1_0;
|
|||
import com.google.errorprone.annotations.CanIgnoreReturnValue;
|
||||
import io.opentelemetry.api.OpenTelemetry;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.AttributesExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.SpanNameExtractor;
|
||||
import io.opentelemetry.instrumentation.r2dbc.v1_0.internal.DbExecution;
|
||||
import io.opentelemetry.instrumentation.r2dbc.v1_0.internal.R2dbcInstrumenterBuilder;
|
||||
import java.util.function.Function;
|
||||
|
||||
/** A builder of {@link R2dbcTelemetry}. */
|
||||
public final class R2dbcTelemetryBuilder {
|
||||
|
||||
private final R2dbcInstrumenterBuilder instrumenterBuilder;
|
||||
private boolean statementSanitizationEnabled = true;
|
||||
private Function<SpanNameExtractor<DbExecution>, ? extends SpanNameExtractor<? super DbExecution>>
|
||||
spanNameExtractorTransformer = Function.identity();
|
||||
|
||||
R2dbcTelemetryBuilder(OpenTelemetry openTelemetry) {
|
||||
instrumenterBuilder = new R2dbcInstrumenterBuilder(openTelemetry);
|
||||
|
@ -39,10 +43,20 @@ public final class R2dbcTelemetryBuilder {
|
|||
return this;
|
||||
}
|
||||
|
||||
/** Sets custom {@link SpanNameExtractor} via transform function. */
|
||||
@CanIgnoreReturnValue
|
||||
public R2dbcTelemetryBuilder setSpanNameExtractor(
|
||||
Function<SpanNameExtractor<DbExecution>, ? extends SpanNameExtractor<? super DbExecution>>
|
||||
spanNameExtractorTransformer) {
|
||||
this.spanNameExtractorTransformer = spanNameExtractorTransformer;
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a new {@link R2dbcTelemetry} with the settings of this {@link R2dbcTelemetryBuilder}.
|
||||
*/
|
||||
public R2dbcTelemetry build() {
|
||||
return new R2dbcTelemetry(instrumenterBuilder.build(statementSanitizationEnabled));
|
||||
return new R2dbcTelemetry(
|
||||
instrumenterBuilder.build(spanNameExtractorTransformer, statementSanitizationEnabled));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -12,9 +12,11 @@ import io.opentelemetry.instrumentation.api.incubator.semconv.db.SqlClientAttrib
|
|||
import io.opentelemetry.instrumentation.api.instrumenter.AttributesExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.SpanKindExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.SpanNameExtractor;
|
||||
import io.opentelemetry.instrumentation.api.semconv.network.ServerAttributesExtractor;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.function.Function;
|
||||
|
||||
/**
|
||||
* This class is internal and is hence not for public use. Its APIs are unstable and can change at
|
||||
|
@ -40,16 +42,22 @@ public final class R2dbcInstrumenterBuilder {
|
|||
return this;
|
||||
}
|
||||
|
||||
public Instrumenter<DbExecution, Void> build(boolean statementSanitizationEnabled) {
|
||||
public Instrumenter<DbExecution, Void> build(
|
||||
Function<SpanNameExtractor<DbExecution>, ? extends SpanNameExtractor<? super DbExecution>>
|
||||
spanNameExtractorTransformer,
|
||||
boolean statementSanitizationEnabled) {
|
||||
SpanNameExtractor<? super DbExecution> spanNameExtractor =
|
||||
spanNameExtractorTransformer.apply(
|
||||
DbClientSpanNameExtractor.create(R2dbcSqlAttributesGetter.INSTANCE));
|
||||
|
||||
return Instrumenter.<DbExecution, Void>builder(
|
||||
openTelemetry,
|
||||
INSTRUMENTATION_NAME,
|
||||
DbClientSpanNameExtractor.create(R2dbcSqlAttributesGetter.INSTANCE))
|
||||
openTelemetry, INSTRUMENTATION_NAME, spanNameExtractor)
|
||||
.addAttributesExtractor(
|
||||
SqlClientAttributesExtractor.builder(R2dbcSqlAttributesGetter.INSTANCE)
|
||||
.setStatementSanitizationEnabled(statementSanitizationEnabled)
|
||||
.build())
|
||||
.addAttributesExtractor(ServerAttributesExtractor.create(R2dbcNetAttributesGetter.INSTANCE))
|
||||
.addAttributesExtractors(additionalExtractors)
|
||||
.buildInstrumenter(SpanKindExtractor.alwaysClient());
|
||||
}
|
||||
}
|
||||
|
|
|
@ -13,6 +13,7 @@ import io.opentelemetry.instrumentation.api.incubator.semconv.http.HttpServerExp
|
|||
import io.opentelemetry.instrumentation.api.instrumenter.AttributesExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.InstrumenterBuilder;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.SpanNameExtractor;
|
||||
import io.opentelemetry.instrumentation.api.semconv.http.HttpClientAttributesExtractor;
|
||||
import io.opentelemetry.instrumentation.api.semconv.http.HttpClientAttributesExtractorBuilder;
|
||||
import io.opentelemetry.instrumentation.api.semconv.http.HttpClientMetrics;
|
||||
|
@ -27,6 +28,7 @@ import io.opentelemetry.instrumentation.api.semconv.http.HttpSpanStatusExtractor
|
|||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
import java.util.function.Function;
|
||||
import ratpack.http.Request;
|
||||
import ratpack.http.Response;
|
||||
import ratpack.http.client.HttpResponse;
|
||||
|
@ -53,6 +55,11 @@ public final class RatpackTelemetryBuilder {
|
|||
private final HttpSpanNameExtractorBuilder<Request> httpServerSpanNameExtractorBuilder =
|
||||
HttpSpanNameExtractor.builder(RatpackHttpAttributesGetter.INSTANCE);
|
||||
|
||||
private Function<SpanNameExtractor<RequestSpec>, ? extends SpanNameExtractor<? super RequestSpec>>
|
||||
clientSpanNameExtractorTransformer = Function.identity();
|
||||
private Function<SpanNameExtractor<Request>, ? extends SpanNameExtractor<? super Request>>
|
||||
serverSpanNameExtractorTransformer = Function.identity();
|
||||
|
||||
private final HttpServerRouteBuilder<Request> httpServerRouteBuilder =
|
||||
HttpServerRoute.builder(RatpackHttpAttributesGetter.INSTANCE);
|
||||
|
||||
|
@ -178,6 +185,24 @@ public final class RatpackTelemetryBuilder {
|
|||
return this;
|
||||
}
|
||||
|
||||
/** Sets custom client {@link SpanNameExtractor} via transform function. */
|
||||
@CanIgnoreReturnValue
|
||||
public RatpackTelemetryBuilder setClientSpanNameExtractor(
|
||||
Function<SpanNameExtractor<RequestSpec>, ? extends SpanNameExtractor<? super RequestSpec>>
|
||||
clientSpanNameExtractor) {
|
||||
this.clientSpanNameExtractorTransformer = clientSpanNameExtractor;
|
||||
return this;
|
||||
}
|
||||
|
||||
/** Sets custom server {@link SpanNameExtractor} via transform function. */
|
||||
@CanIgnoreReturnValue
|
||||
public RatpackTelemetryBuilder setServerSpanNameExtractor(
|
||||
Function<SpanNameExtractor<Request>, ? extends SpanNameExtractor<? super Request>>
|
||||
serverSpanNameExtractor) {
|
||||
this.serverSpanNameExtractorTransformer = serverSpanNameExtractor;
|
||||
return this;
|
||||
}
|
||||
|
||||
/** Returns a new {@link RatpackTelemetry} with the configuration of this builder. */
|
||||
public RatpackTelemetry build() {
|
||||
return new RatpackTelemetry(buildServerInstrumenter(), httpClientInstrumenter());
|
||||
|
@ -185,10 +210,12 @@ public final class RatpackTelemetryBuilder {
|
|||
|
||||
private Instrumenter<Request, Response> buildServerInstrumenter() {
|
||||
RatpackHttpAttributesGetter httpAttributes = RatpackHttpAttributesGetter.INSTANCE;
|
||||
SpanNameExtractor<? super Request> spanNameExtractor =
|
||||
serverSpanNameExtractorTransformer.apply(httpServerSpanNameExtractorBuilder.build());
|
||||
|
||||
InstrumenterBuilder<Request, Response> builder =
|
||||
Instrumenter.<Request, Response>builder(
|
||||
openTelemetry, INSTRUMENTATION_NAME, httpServerSpanNameExtractorBuilder.build())
|
||||
openTelemetry, INSTRUMENTATION_NAME, spanNameExtractor)
|
||||
.setSpanStatusExtractor(HttpSpanStatusExtractor.create(httpAttributes))
|
||||
.addAttributesExtractor(httpServerAttributesExtractorBuilder.build())
|
||||
.addAttributesExtractors(additionalExtractors)
|
||||
|
@ -204,10 +231,12 @@ public final class RatpackTelemetryBuilder {
|
|||
|
||||
private Instrumenter<RequestSpec, HttpResponse> httpClientInstrumenter() {
|
||||
RatpackHttpClientAttributesGetter httpAttributes = RatpackHttpClientAttributesGetter.INSTANCE;
|
||||
SpanNameExtractor<? super RequestSpec> spanNameExtractor =
|
||||
clientSpanNameExtractorTransformer.apply(httpClientSpanNameExtractorBuilder.build());
|
||||
|
||||
InstrumenterBuilder<RequestSpec, HttpResponse> builder =
|
||||
Instrumenter.<RequestSpec, HttpResponse>builder(
|
||||
openTelemetry, INSTRUMENTATION_NAME, httpClientSpanNameExtractorBuilder.build())
|
||||
openTelemetry, INSTRUMENTATION_NAME, spanNameExtractor)
|
||||
.setSpanStatusExtractor(HttpSpanStatusExtractor.create(httpAttributes))
|
||||
.addAttributesExtractor(httpClientAttributesExtractorBuilder.build())
|
||||
.addAttributesExtractors(additionalHttpClientExtractors)
|
||||
|
|
|
@ -12,6 +12,7 @@ import io.opentelemetry.instrumentation.api.incubator.semconv.http.HttpServerExp
|
|||
import io.opentelemetry.instrumentation.api.instrumenter.AttributesExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.InstrumenterBuilder;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.SpanNameExtractor;
|
||||
import io.opentelemetry.instrumentation.api.semconv.http.HttpServerAttributesExtractor;
|
||||
import io.opentelemetry.instrumentation.api.semconv.http.HttpServerAttributesExtractorBuilder;
|
||||
import io.opentelemetry.instrumentation.api.semconv.http.HttpServerMetrics;
|
||||
|
@ -23,6 +24,7 @@ import io.opentelemetry.instrumentation.api.semconv.http.HttpSpanStatusExtractor
|
|||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
import java.util.function.Function;
|
||||
import org.restlet.data.Request;
|
||||
import org.restlet.data.Response;
|
||||
|
||||
|
@ -39,6 +41,8 @@ public final class RestletTelemetryBuilder {
|
|||
HttpServerAttributesExtractor.builder(RestletHttpAttributesGetter.INSTANCE);
|
||||
private final HttpSpanNameExtractorBuilder<Request> httpSpanNameExtractorBuilder =
|
||||
HttpSpanNameExtractor.builder(RestletHttpAttributesGetter.INSTANCE);
|
||||
private Function<SpanNameExtractor<Request>, ? extends SpanNameExtractor<? super Request>>
|
||||
spanNameExtractorTransformer = Function.identity();
|
||||
private final HttpServerRouteBuilder<Request> httpServerRouteBuilder =
|
||||
HttpServerRoute.builder(RestletHttpAttributesGetter.INSTANCE);
|
||||
private boolean emitExperimentalHttpServerMetrics = false;
|
||||
|
@ -114,16 +118,27 @@ public final class RestletTelemetryBuilder {
|
|||
return this;
|
||||
}
|
||||
|
||||
/** Sets custom {@link SpanNameExtractor} via transform function. */
|
||||
@CanIgnoreReturnValue
|
||||
public RestletTelemetryBuilder setSpanNameExtractor(
|
||||
Function<SpanNameExtractor<Request>, ? extends SpanNameExtractor<? super Request>>
|
||||
spanNameExtractorTransformer) {
|
||||
this.spanNameExtractorTransformer = spanNameExtractorTransformer;
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a new {@link RestletTelemetry} with the settings of this {@link
|
||||
* RestletTelemetryBuilder}.
|
||||
*/
|
||||
public RestletTelemetry build() {
|
||||
RestletHttpAttributesGetter httpAttributesGetter = RestletHttpAttributesGetter.INSTANCE;
|
||||
SpanNameExtractor<? super Request> spanNameExtractor =
|
||||
spanNameExtractorTransformer.apply(httpSpanNameExtractorBuilder.build());
|
||||
|
||||
InstrumenterBuilder<Request, Response> builder =
|
||||
Instrumenter.<Request, Response>builder(
|
||||
openTelemetry, INSTRUMENTATION_NAME, httpSpanNameExtractorBuilder.build())
|
||||
openTelemetry, INSTRUMENTATION_NAME, spanNameExtractor)
|
||||
.setSpanStatusExtractor(HttpSpanStatusExtractor.create(httpAttributesGetter))
|
||||
.addAttributesExtractor(httpAttributesExtractorBuilder.build())
|
||||
.addAttributesExtractors(additionalExtractors)
|
||||
|
|
|
@ -9,6 +9,7 @@ import com.google.errorprone.annotations.CanIgnoreReturnValue;
|
|||
import io.opentelemetry.api.OpenTelemetry;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.AttributesExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.SpanNameExtractor;
|
||||
import io.opentelemetry.instrumentation.api.semconv.http.HttpServerAttributesExtractor;
|
||||
import io.opentelemetry.instrumentation.api.semconv.http.HttpServerAttributesExtractorBuilder;
|
||||
import io.opentelemetry.instrumentation.api.semconv.http.HttpServerRoute;
|
||||
|
@ -20,6 +21,7 @@ import io.opentelemetry.instrumentation.restlet.v2_0.internal.RestletInstrumente
|
|||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
import java.util.function.Function;
|
||||
import org.restlet.Request;
|
||||
import org.restlet.Response;
|
||||
|
||||
|
@ -34,9 +36,10 @@ public final class RestletTelemetryBuilder {
|
|||
HttpServerAttributesExtractor.builder(RestletHttpAttributesGetter.INSTANCE);
|
||||
private final HttpSpanNameExtractorBuilder<Request> httpSpanNameExtractorBuilder =
|
||||
HttpSpanNameExtractor.builder(RestletHttpAttributesGetter.INSTANCE);
|
||||
private Function<SpanNameExtractor<Request>, ? extends SpanNameExtractor<? super Request>>
|
||||
spanNameExtractorTransformer = Function.identity();
|
||||
private final HttpServerRouteBuilder<Request> httpServerRouteBuilder =
|
||||
HttpServerRoute.builder(RestletHttpAttributesGetter.INSTANCE);
|
||||
|
||||
private boolean emitExperimentalHttpServerMetrics = false;
|
||||
|
||||
RestletTelemetryBuilder(OpenTelemetry openTelemetry) {
|
||||
|
@ -110,16 +113,28 @@ public final class RestletTelemetryBuilder {
|
|||
return this;
|
||||
}
|
||||
|
||||
/** Sets custom {@link SpanNameExtractor} via transform function. */
|
||||
@CanIgnoreReturnValue
|
||||
public RestletTelemetryBuilder setSpanNameExtractor(
|
||||
Function<SpanNameExtractor<Request>, ? extends SpanNameExtractor<? super Request>>
|
||||
spanNameExtractorTransformer) {
|
||||
this.spanNameExtractorTransformer = spanNameExtractorTransformer;
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a new {@link RestletTelemetry} with the settings of this {@link
|
||||
* RestletTelemetryBuilder}.
|
||||
*/
|
||||
public RestletTelemetry build() {
|
||||
SpanNameExtractor<? super Request> spanNameExtractor =
|
||||
spanNameExtractorTransformer.apply(httpSpanNameExtractorBuilder.build());
|
||||
|
||||
Instrumenter<Request, Response> serverInstrumenter =
|
||||
RestletInstrumenterFactory.newServerInstrumenter(
|
||||
openTelemetry,
|
||||
httpAttributesExtractorBuilder.build(),
|
||||
httpSpanNameExtractorBuilder.build(),
|
||||
spanNameExtractor,
|
||||
httpServerRouteBuilder.build(),
|
||||
additionalExtractors,
|
||||
emitExperimentalHttpServerMetrics);
|
||||
|
|
|
@ -30,7 +30,7 @@ public final class RestletInstrumenterFactory {
|
|||
public static Instrumenter<Request, Response> newServerInstrumenter(
|
||||
OpenTelemetry openTelemetry,
|
||||
AttributesExtractor<Request, Response> httpServerAttributesExtractor,
|
||||
SpanNameExtractor<Request> httpServerSpanNameExtractor,
|
||||
SpanNameExtractor<? super Request> httpServerSpanNameExtractor,
|
||||
ContextCustomizer<Request> httpServerRoute,
|
||||
List<AttributesExtractor<Request, Response>> additionalExtractors,
|
||||
boolean emitExperimentalHttpServerMetrics) {
|
||||
|
|
|
@ -23,7 +23,6 @@ import java.util.ArrayList;
|
|||
import java.util.List;
|
||||
import java.util.Set;
|
||||
import java.util.function.Function;
|
||||
import javax.annotation.Nullable;
|
||||
import org.springframework.http.HttpRequest;
|
||||
import org.springframework.http.client.ClientHttpResponse;
|
||||
|
||||
|
@ -39,11 +38,9 @@ public final class SpringWebTelemetryBuilder {
|
|||
HttpClientAttributesExtractor.builder(SpringWebHttpAttributesGetter.INSTANCE);
|
||||
private final HttpSpanNameExtractorBuilder<HttpRequest> httpSpanNameExtractorBuilder =
|
||||
HttpSpanNameExtractor.builder(SpringWebHttpAttributesGetter.INSTANCE);
|
||||
private boolean emitExperimentalHttpClientMetrics = false;
|
||||
|
||||
@Nullable
|
||||
private Function<SpanNameExtractor<HttpRequest>, ? extends SpanNameExtractor<? super HttpRequest>>
|
||||
spanNameExtractorTransformer;
|
||||
spanNameExtractorTransformer = Function.identity();
|
||||
private boolean emitExperimentalHttpClientMetrics = false;
|
||||
|
||||
SpringWebTelemetryBuilder(OpenTelemetry openTelemetry) {
|
||||
this.openTelemetry = openTelemetry;
|
||||
|
@ -130,12 +127,8 @@ public final class SpringWebTelemetryBuilder {
|
|||
*/
|
||||
public SpringWebTelemetry build() {
|
||||
SpringWebHttpAttributesGetter httpAttributesGetter = SpringWebHttpAttributesGetter.INSTANCE;
|
||||
|
||||
SpanNameExtractor<HttpRequest> originalSpanNameExtractor = httpSpanNameExtractorBuilder.build();
|
||||
SpanNameExtractor<? super HttpRequest> spanNameExtractor = originalSpanNameExtractor;
|
||||
if (spanNameExtractorTransformer != null) {
|
||||
spanNameExtractor = spanNameExtractorTransformer.apply(originalSpanNameExtractor);
|
||||
}
|
||||
SpanNameExtractor<? super HttpRequest> spanNameExtractor =
|
||||
spanNameExtractorTransformer.apply(httpSpanNameExtractorBuilder.build());
|
||||
|
||||
InstrumenterBuilder<HttpRequest, ClientHttpResponse> builder =
|
||||
Instrumenter.<HttpRequest, ClientHttpResponse>builder(
|
||||
|
|
|
@ -15,6 +15,7 @@ import io.opentelemetry.instrumentation.spring.webflux.v5_3.internal.WebClientHt
|
|||
import io.opentelemetry.instrumentation.spring.webflux.v5_3.internal.WebClientTracingFilter;
|
||||
import io.opentelemetry.javaagent.bootstrap.internal.CommonConfig;
|
||||
import java.util.List;
|
||||
import java.util.function.Function;
|
||||
import org.springframework.web.reactive.function.client.ClientRequest;
|
||||
import org.springframework.web.reactive.function.client.ClientResponse;
|
||||
import org.springframework.web.reactive.function.client.ExchangeFilterFunction;
|
||||
|
@ -30,6 +31,7 @@ public final class WebClientHelper {
|
|||
.setCapturedResponseHeaders(CommonConfig.get().getClientResponseHeaders())
|
||||
.setKnownMethods(CommonConfig.get().getKnownHttpRequestMethods()),
|
||||
builder -> builder.setKnownMethods(CommonConfig.get().getKnownHttpRequestMethods()),
|
||||
Function.identity(),
|
||||
singletonList(
|
||||
HttpClientPeerServiceAttributesExtractor.create(
|
||||
WebClientHttpAttributesGetter.INSTANCE,
|
||||
|
|
|
@ -12,6 +12,7 @@ import io.opentelemetry.instrumentation.api.incubator.semconv.http.HttpServerExp
|
|||
import io.opentelemetry.instrumentation.api.instrumenter.AttributesExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.InstrumenterBuilder;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.SpanNameExtractor;
|
||||
import io.opentelemetry.instrumentation.api.semconv.http.HttpClientAttributesExtractorBuilder;
|
||||
import io.opentelemetry.instrumentation.api.semconv.http.HttpServerAttributesExtractor;
|
||||
import io.opentelemetry.instrumentation.api.semconv.http.HttpServerAttributesExtractorBuilder;
|
||||
|
@ -26,6 +27,7 @@ import java.util.ArrayList;
|
|||
import java.util.List;
|
||||
import java.util.Set;
|
||||
import java.util.function.Consumer;
|
||||
import java.util.function.Function;
|
||||
import org.springframework.web.reactive.function.client.ClientRequest;
|
||||
import org.springframework.web.reactive.function.client.ClientResponse;
|
||||
import org.springframework.web.server.ServerWebExchange;
|
||||
|
@ -49,6 +51,14 @@ public final class SpringWebfluxTelemetryBuilder {
|
|||
private final HttpServerRouteBuilder<ServerWebExchange> httpServerRouteBuilder =
|
||||
HttpServerRoute.builder(WebfluxServerHttpAttributesGetter.INSTANCE);
|
||||
|
||||
private Function<
|
||||
SpanNameExtractor<ClientRequest>, ? extends SpanNameExtractor<? super ClientRequest>>
|
||||
clientSpanNameExtractorTransformer = Function.identity();
|
||||
private Function<
|
||||
SpanNameExtractor<ServerWebExchange>,
|
||||
? extends SpanNameExtractor<? super ServerWebExchange>>
|
||||
serverSpanNameExtractorTransformer = Function.identity();
|
||||
|
||||
private Consumer<HttpClientAttributesExtractorBuilder<ClientRequest, ClientResponse>>
|
||||
clientExtractorConfigurer = builder -> {};
|
||||
private Consumer<HttpSpanNameExtractorBuilder<ClientRequest>> clientSpanNameExtractorConfigurer =
|
||||
|
@ -188,17 +198,37 @@ public final class SpringWebfluxTelemetryBuilder {
|
|||
return this;
|
||||
}
|
||||
|
||||
/** Sets custom client {@link SpanNameExtractor} via transform function. */
|
||||
@CanIgnoreReturnValue
|
||||
public SpringWebfluxTelemetryBuilder setClientSpanNameExtractor(
|
||||
Function<SpanNameExtractor<ClientRequest>, ? extends SpanNameExtractor<? super ClientRequest>>
|
||||
clientSpanNameExtractor) {
|
||||
this.clientSpanNameExtractorTransformer = clientSpanNameExtractor;
|
||||
return this;
|
||||
}
|
||||
|
||||
/** Sets custom server {@link SpanNameExtractor} via transform function. */
|
||||
@CanIgnoreReturnValue
|
||||
public SpringWebfluxTelemetryBuilder setServerSpanNameExtractor(
|
||||
Function<
|
||||
SpanNameExtractor<ServerWebExchange>,
|
||||
? extends SpanNameExtractor<? super ServerWebExchange>>
|
||||
serverSpanNameExtractor) {
|
||||
this.serverSpanNameExtractorTransformer = serverSpanNameExtractor;
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a new {@link SpringWebfluxTelemetry} with the settings of this {@link
|
||||
* SpringWebfluxTelemetryBuilder}.
|
||||
*/
|
||||
public SpringWebfluxTelemetry build() {
|
||||
|
||||
Instrumenter<ClientRequest, ClientResponse> clientInstrumenter =
|
||||
ClientInstrumenterFactory.create(
|
||||
openTelemetry,
|
||||
clientExtractorConfigurer,
|
||||
clientSpanNameExtractorConfigurer,
|
||||
clientSpanNameExtractorTransformer,
|
||||
clientAdditionalExtractors,
|
||||
emitExperimentalHttpClientTelemetry);
|
||||
|
||||
|
@ -211,10 +241,12 @@ public final class SpringWebfluxTelemetryBuilder {
|
|||
|
||||
private Instrumenter<ServerWebExchange, ServerWebExchange> buildServerInstrumenter() {
|
||||
WebfluxServerHttpAttributesGetter getter = WebfluxServerHttpAttributesGetter.INSTANCE;
|
||||
SpanNameExtractor<? super ServerWebExchange> spanNameExtractor =
|
||||
serverSpanNameExtractorTransformer.apply(httpServerSpanNameExtractorBuilder.build());
|
||||
|
||||
InstrumenterBuilder<ServerWebExchange, ServerWebExchange> builder =
|
||||
Instrumenter.<ServerWebExchange, ServerWebExchange>builder(
|
||||
openTelemetry, INSTRUMENTATION_NAME, httpServerSpanNameExtractorBuilder.build())
|
||||
openTelemetry, INSTRUMENTATION_NAME, spanNameExtractor)
|
||||
.setSpanStatusExtractor(HttpSpanStatusExtractor.create(getter))
|
||||
.addAttributesExtractor(httpServerAttributesExtractorBuilder.build())
|
||||
.addAttributesExtractors(serverAdditionalExtractors)
|
||||
|
|
|
@ -13,6 +13,7 @@ import io.opentelemetry.instrumentation.api.incubator.semconv.http.HttpExperimen
|
|||
import io.opentelemetry.instrumentation.api.instrumenter.AttributesExtractor;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.InstrumenterBuilder;
|
||||
import io.opentelemetry.instrumentation.api.instrumenter.SpanNameExtractor;
|
||||
import io.opentelemetry.instrumentation.api.semconv.http.HttpClientAttributesExtractor;
|
||||
import io.opentelemetry.instrumentation.api.semconv.http.HttpClientAttributesExtractorBuilder;
|
||||
import io.opentelemetry.instrumentation.api.semconv.http.HttpClientMetrics;
|
||||
|
@ -21,6 +22,7 @@ import io.opentelemetry.instrumentation.api.semconv.http.HttpSpanNameExtractorBu
|
|||
import io.opentelemetry.instrumentation.api.semconv.http.HttpSpanStatusExtractor;
|
||||
import java.util.List;
|
||||
import java.util.function.Consumer;
|
||||
import java.util.function.Function;
|
||||
import org.springframework.web.reactive.function.client.ClientRequest;
|
||||
import org.springframework.web.reactive.function.client.ClientResponse;
|
||||
|
||||
|
@ -39,6 +41,8 @@ public final class ClientInstrumenterFactory {
|
|||
Consumer<HttpClientAttributesExtractorBuilder<ClientRequest, ClientResponse>>
|
||||
extractorConfigurer,
|
||||
Consumer<HttpSpanNameExtractorBuilder<ClientRequest>> spanNameExtractorConfigurer,
|
||||
Function<SpanNameExtractor<ClientRequest>, ? extends SpanNameExtractor<? super ClientRequest>>
|
||||
spanNameExtractorTransformer,
|
||||
List<AttributesExtractor<ClientRequest, ClientResponse>> additionalExtractors,
|
||||
boolean emitExperimentalHttpClientTelemetry) {
|
||||
|
||||
|
@ -51,10 +55,12 @@ public final class ClientInstrumenterFactory {
|
|||
HttpSpanNameExtractorBuilder<ClientRequest> httpSpanNameExtractorBuilder =
|
||||
HttpSpanNameExtractor.builder(httpAttributesGetter);
|
||||
spanNameExtractorConfigurer.accept(httpSpanNameExtractorBuilder);
|
||||
SpanNameExtractor<? super ClientRequest> spanNameExtractor =
|
||||
spanNameExtractorTransformer.apply(httpSpanNameExtractorBuilder.build());
|
||||
|
||||
InstrumenterBuilder<ClientRequest, ClientResponse> clientBuilder =
|
||||
Instrumenter.<ClientRequest, ClientResponse>builder(
|
||||
openTelemetry, INSTRUMENTATION_NAME, httpSpanNameExtractorBuilder.build())
|
||||
openTelemetry, INSTRUMENTATION_NAME, spanNameExtractor)
|
||||
.setSpanStatusExtractor(HttpSpanStatusExtractor.create(httpAttributesGetter))
|
||||
.addAttributesExtractor(extractorBuilder.build())
|
||||
.addAttributesExtractors(additionalExtractors)
|
||||
|
|
|
@ -25,7 +25,6 @@ import java.util.ArrayList;
|
|||
import java.util.List;
|
||||
import java.util.Set;
|
||||
import java.util.function.Function;
|
||||
import javax.annotation.Nullable;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
|
||||
|
@ -44,13 +43,10 @@ public final class SpringWebMvcTelemetryBuilder {
|
|||
HttpSpanNameExtractor.builder(SpringWebMvcHttpAttributesGetter.INSTANCE);
|
||||
private final HttpServerRouteBuilder<HttpServletRequest> httpServerRouteBuilder =
|
||||
HttpServerRoute.builder(SpringWebMvcHttpAttributesGetter.INSTANCE);
|
||||
|
||||
@Nullable
|
||||
private Function<
|
||||
SpanNameExtractor<HttpServletRequest>,
|
||||
? extends SpanNameExtractor<? super HttpServletRequest>>
|
||||
spanNameExtractorTransformer;
|
||||
|
||||
spanNameExtractorTransformer = Function.identity();
|
||||
private boolean emitExperimentalHttpServerMetrics = false;
|
||||
|
||||
SpringWebMvcTelemetryBuilder(OpenTelemetry openTelemetry) {
|
||||
|
@ -142,13 +138,8 @@ public final class SpringWebMvcTelemetryBuilder {
|
|||
public SpringWebMvcTelemetry build() {
|
||||
SpringWebMvcHttpAttributesGetter httpAttributesGetter =
|
||||
SpringWebMvcHttpAttributesGetter.INSTANCE;
|
||||
|
||||
SpanNameExtractor<HttpServletRequest> originalSpanNameExtractor =
|
||||
httpSpanNameExtractorBuilder.build();
|
||||
SpanNameExtractor<? super HttpServletRequest> spanNameExtractor = originalSpanNameExtractor;
|
||||
if (spanNameExtractorTransformer != null) {
|
||||
spanNameExtractor = spanNameExtractorTransformer.apply(originalSpanNameExtractor);
|
||||
}
|
||||
SpanNameExtractor<? super HttpServletRequest> spanNameExtractor =
|
||||
spanNameExtractorTransformer.apply(httpSpanNameExtractorBuilder.build());
|
||||
|
||||
InstrumenterBuilder<HttpServletRequest, HttpServletResponse> builder =
|
||||
Instrumenter.<HttpServletRequest, HttpServletResponse>builder(
|
||||
|
|
|
@ -27,7 +27,6 @@ import java.util.ArrayList;
|
|||
import java.util.List;
|
||||
import java.util.Set;
|
||||
import java.util.function.Function;
|
||||
import javax.annotation.Nullable;
|
||||
|
||||
/** A builder of {@link SpringWebMvcTelemetry}. */
|
||||
public final class SpringWebMvcTelemetryBuilder {
|
||||
|
@ -44,13 +43,10 @@ public final class SpringWebMvcTelemetryBuilder {
|
|||
HttpSpanNameExtractor.builder(SpringWebMvcHttpAttributesGetter.INSTANCE);
|
||||
private final HttpServerRouteBuilder<HttpServletRequest> httpServerRouteBuilder =
|
||||
HttpServerRoute.builder(SpringWebMvcHttpAttributesGetter.INSTANCE);
|
||||
|
||||
@Nullable
|
||||
private Function<
|
||||
SpanNameExtractor<HttpServletRequest>,
|
||||
? extends SpanNameExtractor<? super HttpServletRequest>>
|
||||
spanNameExtractorTransformer;
|
||||
|
||||
spanNameExtractorTransformer = Function.identity();
|
||||
private boolean emitExperimentalHttpServerMetrics = false;
|
||||
|
||||
SpringWebMvcTelemetryBuilder(OpenTelemetry openTelemetry) {
|
||||
|
@ -142,13 +138,8 @@ public final class SpringWebMvcTelemetryBuilder {
|
|||
public SpringWebMvcTelemetry build() {
|
||||
SpringWebMvcHttpAttributesGetter httpAttributesGetter =
|
||||
SpringWebMvcHttpAttributesGetter.INSTANCE;
|
||||
|
||||
SpanNameExtractor<HttpServletRequest> originalSpanNameExtractor =
|
||||
httpSpanNameExtractorBuilder.build();
|
||||
SpanNameExtractor<? super HttpServletRequest> spanNameExtractor = originalSpanNameExtractor;
|
||||
if (spanNameExtractorTransformer != null) {
|
||||
spanNameExtractor = spanNameExtractorTransformer.apply(originalSpanNameExtractor);
|
||||
}
|
||||
SpanNameExtractor<? super HttpServletRequest> spanNameExtractor =
|
||||
spanNameExtractorTransformer.apply(httpSpanNameExtractorBuilder.build());
|
||||
|
||||
InstrumenterBuilder<HttpServletRequest, HttpServletResponse> builder =
|
||||
Instrumenter.<HttpServletRequest, HttpServletResponse>builder(
|
||||
|
|
Loading…
Reference in New Issue