From 461c870bb1bbdc41de332fa2ed1fce4422f115f0 Mon Sep 17 00:00:00 2001 From: ekalashnikov Date: Wed, 26 Jan 2022 22:54:58 +0700 Subject: [PATCH 1/6] Set custom gRPC client/server span name extractor --- .../grpc/v1_6/GrpcTracingBuilder.java | 37 +++++++++++++++++-- 1 file changed, 34 insertions(+), 3 deletions(-) diff --git a/instrumentation/grpc-1.6/library/src/main/java/io/opentelemetry/instrumentation/grpc/v1_6/GrpcTracingBuilder.java b/instrumentation/grpc-1.6/library/src/main/java/io/opentelemetry/instrumentation/grpc/v1_6/GrpcTracingBuilder.java index 5b267f82f7f8..446579593996 100644 --- a/instrumentation/grpc-1.6/library/src/main/java/io/opentelemetry/instrumentation/grpc/v1_6/GrpcTracingBuilder.java +++ b/instrumentation/grpc-1.6/library/src/main/java/io/opentelemetry/instrumentation/grpc/v1_6/GrpcTracingBuilder.java @@ -29,6 +29,8 @@ public final class GrpcTracingBuilder { private final OpenTelemetry openTelemetry; @Nullable private String peerService; + @Nullable private SpanNameExtractor clientSpanNameExtractor; + @Nullable private SpanNameExtractor serverSpanNameExtractor; private final List> additionalExtractors = new ArrayList<>(); @@ -49,9 +51,28 @@ public GrpcTracingBuilder addAttributeExtractor( return this; } + /** + * Sets custom client {@link SpanNameExtractor} + */ + public GrpcTracingBuilder setClientSpanNameExtractor( + SpanNameExtractor clientSpanNameExtractor) { + this.clientSpanNameExtractor = clientSpanNameExtractor; + return this; + } + + /** + * Sets custom server {@link SpanNameExtractor} + */ + public GrpcTracingBuilder setServerSpanNameExtractor( + SpanNameExtractor serverSpanNameExtractor) { + this.serverSpanNameExtractor = serverSpanNameExtractor; + return this; + } + /** Sets the {@code peer.service} attribute for http client spans. */ - public void setPeerService(String peerService) { + public GrpcTracingBuilder setPeerService(String peerService) { this.peerService = peerService; + return this; } /** @@ -67,10 +88,20 @@ public GrpcTracingBuilder setCaptureExperimentalSpanAttributes( /** Returns a new {@link GrpcTracing} with the settings of this {@link GrpcTracingBuilder}. */ public GrpcTracing build() { + SpanNameExtractor clientSpanNameExtractor = this.clientSpanNameExtractor; + if (clientSpanNameExtractor == null) { + clientSpanNameExtractor = new GrpcSpanNameExtractor(); + } + + SpanNameExtractor serverSpanNameExtractor = this.serverSpanNameExtractor; + if (serverSpanNameExtractor == null) { + serverSpanNameExtractor = new GrpcSpanNameExtractor(); + } + InstrumenterBuilder clientInstrumenterBuilder = - Instrumenter.builder(openTelemetry, INSTRUMENTATION_NAME, new GrpcSpanNameExtractor()); + Instrumenter.builder(openTelemetry, INSTRUMENTATION_NAME, clientSpanNameExtractor); InstrumenterBuilder serverInstrumenterBuilder = - Instrumenter.builder(openTelemetry, INSTRUMENTATION_NAME, new GrpcSpanNameExtractor()); + Instrumenter.builder(openTelemetry, INSTRUMENTATION_NAME, serverSpanNameExtractor); Stream.of(clientInstrumenterBuilder, serverInstrumenterBuilder) .forEach( From 4f221547389e9593929aad20200089d01a8f86af Mon Sep 17 00:00:00 2001 From: ekalashnikov Date: Wed, 26 Jan 2022 23:27:30 +0700 Subject: [PATCH 2/6] Fix imports --- .../instrumentation/grpc/v1_6/GrpcTracingBuilder.java | 1 + 1 file changed, 1 insertion(+) diff --git a/instrumentation/grpc-1.6/library/src/main/java/io/opentelemetry/instrumentation/grpc/v1_6/GrpcTracingBuilder.java b/instrumentation/grpc-1.6/library/src/main/java/io/opentelemetry/instrumentation/grpc/v1_6/GrpcTracingBuilder.java index 446579593996..07d0ef0c7ed4 100644 --- a/instrumentation/grpc-1.6/library/src/main/java/io/opentelemetry/instrumentation/grpc/v1_6/GrpcTracingBuilder.java +++ b/instrumentation/grpc-1.6/library/src/main/java/io/opentelemetry/instrumentation/grpc/v1_6/GrpcTracingBuilder.java @@ -12,6 +12,7 @@ import io.opentelemetry.instrumentation.api.instrumenter.InstrumenterBuilder; import io.opentelemetry.instrumentation.api.instrumenter.PeerServiceAttributesExtractor; import io.opentelemetry.instrumentation.api.instrumenter.SpanKindExtractor; +import io.opentelemetry.instrumentation.api.instrumenter.SpanNameExtractor; import io.opentelemetry.instrumentation.api.instrumenter.net.NetClientAttributesExtractor; import io.opentelemetry.instrumentation.api.instrumenter.net.NetServerAttributesExtractor; import io.opentelemetry.instrumentation.grpc.v1_6.internal.GrpcNetClientAttributesGetter; From f7485381ba3b1377d8d5481eeee42b6bb6f11095 Mon Sep 17 00:00:00 2001 From: ekalashnikov Date: Thu, 27 Jan 2022 09:11:30 +0700 Subject: [PATCH 3/6] Fix compilation --- .../instrumentation/grpc/v1_6/GrpcTracingBuilder.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/instrumentation/grpc-1.6/library/src/main/java/io/opentelemetry/instrumentation/grpc/v1_6/GrpcTracingBuilder.java b/instrumentation/grpc-1.6/library/src/main/java/io/opentelemetry/instrumentation/grpc/v1_6/GrpcTracingBuilder.java index 07d0ef0c7ed4..64eae88d1c81 100644 --- a/instrumentation/grpc-1.6/library/src/main/java/io/opentelemetry/instrumentation/grpc/v1_6/GrpcTracingBuilder.java +++ b/instrumentation/grpc-1.6/library/src/main/java/io/opentelemetry/instrumentation/grpc/v1_6/GrpcTracingBuilder.java @@ -30,8 +30,8 @@ public final class GrpcTracingBuilder { private final OpenTelemetry openTelemetry; @Nullable private String peerService; - @Nullable private SpanNameExtractor clientSpanNameExtractor; - @Nullable private SpanNameExtractor serverSpanNameExtractor; + @Nullable private SpanNameExtractor clientSpanNameExtractor; + @Nullable private SpanNameExtractor serverSpanNameExtractor; private final List> additionalExtractors = new ArrayList<>(); @@ -89,12 +89,12 @@ public GrpcTracingBuilder setCaptureExperimentalSpanAttributes( /** Returns a new {@link GrpcTracing} with the settings of this {@link GrpcTracingBuilder}. */ public GrpcTracing build() { - SpanNameExtractor clientSpanNameExtractor = this.clientSpanNameExtractor; + SpanNameExtractor clientSpanNameExtractor = this.clientSpanNameExtractor; if (clientSpanNameExtractor == null) { clientSpanNameExtractor = new GrpcSpanNameExtractor(); } - SpanNameExtractor serverSpanNameExtractor = this.serverSpanNameExtractor; + SpanNameExtractor serverSpanNameExtractor = this.serverSpanNameExtractor; if (serverSpanNameExtractor == null) { serverSpanNameExtractor = new GrpcSpanNameExtractor(); } From d092af4d7b02b0a37198828c74fb495fcdb6b979 Mon Sep 17 00:00:00 2001 From: ekalashnikov Date: Fri, 4 Feb 2022 11:37:28 +0700 Subject: [PATCH 4/6] Fix style rule --- .../instrumentation/grpc/v1_6/GrpcTracingBuilder.java | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/instrumentation/grpc-1.6/library/src/main/java/io/opentelemetry/instrumentation/grpc/v1_6/GrpcTracingBuilder.java b/instrumentation/grpc-1.6/library/src/main/java/io/opentelemetry/instrumentation/grpc/v1_6/GrpcTracingBuilder.java index 64eae88d1c81..374338247ac4 100644 --- a/instrumentation/grpc-1.6/library/src/main/java/io/opentelemetry/instrumentation/grpc/v1_6/GrpcTracingBuilder.java +++ b/instrumentation/grpc-1.6/library/src/main/java/io/opentelemetry/instrumentation/grpc/v1_6/GrpcTracingBuilder.java @@ -52,18 +52,14 @@ public GrpcTracingBuilder addAttributeExtractor( return this; } - /** - * Sets custom client {@link SpanNameExtractor} - */ + /** Sets custom client {@link SpanNameExtractor}. */ public GrpcTracingBuilder setClientSpanNameExtractor( SpanNameExtractor clientSpanNameExtractor) { this.clientSpanNameExtractor = clientSpanNameExtractor; return this; } - /** - * Sets custom server {@link SpanNameExtractor} - */ + /** Sets custom server {@link SpanNameExtractor}. */ public GrpcTracingBuilder setServerSpanNameExtractor( SpanNameExtractor serverSpanNameExtractor) { this.serverSpanNameExtractor = serverSpanNameExtractor; From 05aac61d72c281979e0e001b01d6f88811f14180 Mon Sep 17 00:00:00 2001 From: ekalashnikov Date: Thu, 17 Feb 2022 09:10:03 +0700 Subject: [PATCH 5/6] Update to use Functions instead --- .../grpc/v1_6/GrpcTracingBuilder.java | 35 +++++++++++-------- 1 file changed, 21 insertions(+), 14 deletions(-) diff --git a/instrumentation/grpc-1.6/library/src/main/java/io/opentelemetry/instrumentation/grpc/v1_6/GrpcTracingBuilder.java b/instrumentation/grpc-1.6/library/src/main/java/io/opentelemetry/instrumentation/grpc/v1_6/GrpcTracingBuilder.java index 374338247ac4..1e478e111603 100644 --- a/instrumentation/grpc-1.6/library/src/main/java/io/opentelemetry/instrumentation/grpc/v1_6/GrpcTracingBuilder.java +++ b/instrumentation/grpc-1.6/library/src/main/java/io/opentelemetry/instrumentation/grpc/v1_6/GrpcTracingBuilder.java @@ -20,6 +20,7 @@ import io.opentelemetry.semconv.trace.attributes.SemanticAttributes; import java.util.ArrayList; import java.util.List; +import java.util.function.Function; import java.util.stream.Stream; import javax.annotation.Nullable; @@ -30,8 +31,12 @@ public final class GrpcTracingBuilder { private final OpenTelemetry openTelemetry; @Nullable private String peerService; - @Nullable private SpanNameExtractor clientSpanNameExtractor; - @Nullable private SpanNameExtractor serverSpanNameExtractor; + @Nullable private Function< + SpanNameExtractor, ? extends SpanNameExtractor> + clientSpanNameExtractorTransformer; + @Nullable private Function< + SpanNameExtractor, ? extends SpanNameExtractor> + serverSpanNameExtractorTransformer; private final List> additionalExtractors = new ArrayList<>(); @@ -52,17 +57,17 @@ public GrpcTracingBuilder addAttributeExtractor( return this; } - /** Sets custom client {@link SpanNameExtractor}. */ + /** Sets custom client {@link SpanNameExtractor} via transform function. */ public GrpcTracingBuilder setClientSpanNameExtractor( - SpanNameExtractor clientSpanNameExtractor) { - this.clientSpanNameExtractor = clientSpanNameExtractor; + Function, ? extends SpanNameExtractor> clientSpanNameExtractor) { + this.clientSpanNameExtractorTransformer = clientSpanNameExtractor; return this; } - /** Sets custom server {@link SpanNameExtractor}. */ + /** Sets custom server {@link SpanNameExtractor} via transform function. */ public GrpcTracingBuilder setServerSpanNameExtractor( - SpanNameExtractor serverSpanNameExtractor) { - this.serverSpanNameExtractor = serverSpanNameExtractor; + Function, ? extends SpanNameExtractor> serverSpanNameExtractor) { + this.serverSpanNameExtractorTransformer = serverSpanNameExtractor; return this; } @@ -85,14 +90,16 @@ public GrpcTracingBuilder setCaptureExperimentalSpanAttributes( /** Returns a new {@link GrpcTracing} with the settings of this {@link GrpcTracingBuilder}. */ public GrpcTracing build() { - SpanNameExtractor clientSpanNameExtractor = this.clientSpanNameExtractor; - if (clientSpanNameExtractor == null) { - clientSpanNameExtractor = new GrpcSpanNameExtractor(); + SpanNameExtractor originalSpanNameExtractor = new GrpcSpanNameExtractor(); + + SpanNameExtractor clientSpanNameExtractor = originalSpanNameExtractor; + if (clientSpanNameExtractorTransformer != null) { + clientSpanNameExtractor = clientSpanNameExtractorTransformer.apply(originalSpanNameExtractor); } - SpanNameExtractor serverSpanNameExtractor = this.serverSpanNameExtractor; - if (serverSpanNameExtractor == null) { - serverSpanNameExtractor = new GrpcSpanNameExtractor(); + SpanNameExtractor serverSpanNameExtractor = originalSpanNameExtractor; + if (serverSpanNameExtractorTransformer != null) { + serverSpanNameExtractor = serverSpanNameExtractorTransformer.apply(originalSpanNameExtractor); } InstrumenterBuilder clientInstrumenterBuilder = From 91ab31db6785e5bf89a718d2348012f2573aeac0 Mon Sep 17 00:00:00 2001 From: ekalashnikov Date: Thu, 17 Feb 2022 09:36:42 +0700 Subject: [PATCH 6/6] Fix formatting --- .../grpc/v1_6/GrpcTracingBuilder.java | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/instrumentation/grpc-1.6/library/src/main/java/io/opentelemetry/instrumentation/grpc/v1_6/GrpcTracingBuilder.java b/instrumentation/grpc-1.6/library/src/main/java/io/opentelemetry/instrumentation/grpc/v1_6/GrpcTracingBuilder.java index 1e478e111603..ffd642cf9bb9 100644 --- a/instrumentation/grpc-1.6/library/src/main/java/io/opentelemetry/instrumentation/grpc/v1_6/GrpcTracingBuilder.java +++ b/instrumentation/grpc-1.6/library/src/main/java/io/opentelemetry/instrumentation/grpc/v1_6/GrpcTracingBuilder.java @@ -31,11 +31,13 @@ public final class GrpcTracingBuilder { private final OpenTelemetry openTelemetry; @Nullable private String peerService; - @Nullable private Function< - SpanNameExtractor, ? extends SpanNameExtractor> + + @Nullable + private Function, ? extends SpanNameExtractor> clientSpanNameExtractorTransformer; - @Nullable private Function< - SpanNameExtractor, ? extends SpanNameExtractor> + + @Nullable + private Function, ? extends SpanNameExtractor> serverSpanNameExtractorTransformer; private final List> @@ -59,14 +61,16 @@ public GrpcTracingBuilder addAttributeExtractor( /** Sets custom client {@link SpanNameExtractor} via transform function. */ public GrpcTracingBuilder setClientSpanNameExtractor( - Function, ? extends SpanNameExtractor> clientSpanNameExtractor) { + Function, ? extends SpanNameExtractor> + clientSpanNameExtractor) { this.clientSpanNameExtractorTransformer = clientSpanNameExtractor; return this; } /** Sets custom server {@link SpanNameExtractor} via transform function. */ public GrpcTracingBuilder setServerSpanNameExtractor( - Function, ? extends SpanNameExtractor> serverSpanNameExtractor) { + Function, ? extends SpanNameExtractor> + serverSpanNameExtractor) { this.serverSpanNameExtractorTransformer = serverSpanNameExtractor; return this; }