From 42f07eedd8693504cb0d28a2c0ed8a8a3ae553e7 Mon Sep 17 00:00:00 2001 From: Mateusz Rzeszutek Date: Fri, 11 Aug 2023 15:04:52 +0200 Subject: [PATCH] Deprecate `NetServerAttributesExtractor` (#9156) --- .../http/HttpServerAttributesExtractor.java | 9 +- .../HttpServerAttributesExtractorBuilder.java | 13 +- .../http/HttpServerAttributesGetter.java | 7 +- .../net/NetServerAttributesExtractor.java | 4 + .../net/NetServerAttributesGetter.java | 4 + .../InternalNetServerAttributesExtractor.java | 10 +- .../network/ClientAttributesExtractor.java | 6 +- .../network/NetworkAttributesExtractor.java | 6 +- .../network/ServerAttributesExtractor.java | 29 +++- ...tAddressNetServerAttributesGetterTest.java | 1 + .../net/NetServerAttributesExtractorTest.java | 1 + ...ientAttributesExtractorOldSemconvTest.java | 91 ++++++++++++ ...workAttributesExtractorOldSemconvTest.java | 89 ++++++++++++ ...rverAttributesExtractorOldSemconvTest.java | 129 ++++++++++++++++++ ...verAttributesExtractorBothSemconvTest.java | 1 + ...rAttributesExtractorStableSemconvTest.java | 1 + ...ributesExtractorInetSocketAddressTest.java | 0 .../ClientAttributesExtractorTest.java | 0 .../NetworkAttributesExtractorTest.java | 0 ...ributesExtractorInetSocketAddressTest.java | 0 .../ServerAttributesExtractorTest.java | 0 ...> DubboNetworkServerAttributesGetter.java} | 29 ++-- .../v2_7/DubboTelemetryBuilder.java | 10 +- ...=> GrpcNetworkServerAttributesGetter.java} | 31 ++--- .../grpc/v1_6/GrpcTelemetryBuilder.java | 10 +- .../PulsarNetClientAttributesGetter.java | 5 - .../VertxSqlClientNetAttributesGetter.java | 6 - 27 files changed, 419 insertions(+), 73 deletions(-) create mode 100644 instrumentation-api-semconv/src/test/java/io/opentelemetry/instrumentation/api/instrumenter/network/ClientAttributesExtractorOldSemconvTest.java create mode 100644 instrumentation-api-semconv/src/test/java/io/opentelemetry/instrumentation/api/instrumenter/network/NetworkAttributesExtractorOldSemconvTest.java create mode 100644 instrumentation-api-semconv/src/test/java/io/opentelemetry/instrumentation/api/instrumenter/network/ServerAttributesExtractorOldSemconvTest.java rename instrumentation-api-semconv/src/{test => testStableHttpSemconv}/java/io/opentelemetry/instrumentation/api/instrumenter/network/ClientAttributesExtractorInetSocketAddressTest.java (100%) rename instrumentation-api-semconv/src/{test => testStableHttpSemconv}/java/io/opentelemetry/instrumentation/api/instrumenter/network/ClientAttributesExtractorTest.java (100%) rename instrumentation-api-semconv/src/{test => testStableHttpSemconv}/java/io/opentelemetry/instrumentation/api/instrumenter/network/NetworkAttributesExtractorTest.java (100%) rename instrumentation-api-semconv/src/{test => testStableHttpSemconv}/java/io/opentelemetry/instrumentation/api/instrumenter/network/ServerAttributesExtractorInetSocketAddressTest.java (100%) rename instrumentation-api-semconv/src/{test => testStableHttpSemconv}/java/io/opentelemetry/instrumentation/api/instrumenter/network/ServerAttributesExtractorTest.java (100%) rename instrumentation/apache-dubbo-2.7/library-autoconfigure/src/main/java/io/opentelemetry/instrumentation/apachedubbo/v2_7/{internal/DubboNetServerAttributesGetter.java => DubboNetworkServerAttributesGetter.java} (61%) rename instrumentation/grpc-1.6/library/src/main/java/io/opentelemetry/instrumentation/grpc/v1_6/{internal/GrpcNetServerAttributesGetter.java => GrpcNetworkServerAttributesGetter.java} (69%) diff --git a/instrumentation-api-semconv/src/main/java/io/opentelemetry/instrumentation/api/instrumenter/http/HttpServerAttributesExtractor.java b/instrumentation-api-semconv/src/main/java/io/opentelemetry/instrumentation/api/instrumenter/http/HttpServerAttributesExtractor.java index 5ae5f49aef..c9870bb927 100644 --- a/instrumentation-api-semconv/src/main/java/io/opentelemetry/instrumentation/api/instrumenter/http/HttpServerAttributesExtractor.java +++ b/instrumentation-api-semconv/src/main/java/io/opentelemetry/instrumentation/api/instrumenter/http/HttpServerAttributesExtractor.java @@ -10,7 +10,6 @@ import static io.opentelemetry.instrumentation.api.internal.AttributesExtractorU import io.opentelemetry.api.common.AttributesBuilder; import io.opentelemetry.context.Context; import io.opentelemetry.instrumentation.api.instrumenter.AttributesExtractor; -import io.opentelemetry.instrumentation.api.instrumenter.net.NetServerAttributesGetter; import io.opentelemetry.instrumentation.api.instrumenter.net.internal.InternalNetServerAttributesExtractor; import io.opentelemetry.instrumentation.api.instrumenter.network.internal.InternalClientAttributesExtractor; import io.opentelemetry.instrumentation.api.instrumenter.network.internal.InternalNetworkAttributesExtractor; @@ -52,7 +51,9 @@ public final class HttpServerAttributesExtractor @Deprecated public static AttributesExtractor create( HttpServerAttributesGetter httpAttributesGetter, - NetServerAttributesGetter netAttributesGetter) { + io.opentelemetry.instrumentation.api.instrumenter.net.NetServerAttributesGetter< + REQUEST, RESPONSE> + netAttributesGetter) { return builder(httpAttributesGetter, netAttributesGetter).build(); } @@ -76,7 +77,9 @@ public final class HttpServerAttributesExtractor @Deprecated public static HttpServerAttributesExtractorBuilder builder( HttpServerAttributesGetter httpAttributesGetter, - NetServerAttributesGetter netAttributesGetter) { + io.opentelemetry.instrumentation.api.instrumenter.net.NetServerAttributesGetter< + REQUEST, RESPONSE> + netAttributesGetter) { return new HttpServerAttributesExtractorBuilder<>(httpAttributesGetter, netAttributesGetter); } diff --git a/instrumentation-api-semconv/src/main/java/io/opentelemetry/instrumentation/api/instrumenter/http/HttpServerAttributesExtractorBuilder.java b/instrumentation-api-semconv/src/main/java/io/opentelemetry/instrumentation/api/instrumenter/http/HttpServerAttributesExtractorBuilder.java index 5eaf27591d..93b1028df7 100644 --- a/instrumentation-api-semconv/src/main/java/io/opentelemetry/instrumentation/api/instrumenter/http/HttpServerAttributesExtractorBuilder.java +++ b/instrumentation-api-semconv/src/main/java/io/opentelemetry/instrumentation/api/instrumenter/http/HttpServerAttributesExtractorBuilder.java @@ -10,7 +10,6 @@ import static java.util.Collections.emptyList; import com.google.errorprone.annotations.CanIgnoreReturnValue; import io.opentelemetry.context.Context; import io.opentelemetry.instrumentation.api.instrumenter.AttributesExtractor; -import io.opentelemetry.instrumentation.api.instrumenter.net.NetServerAttributesGetter; import io.opentelemetry.instrumentation.api.instrumenter.net.internal.InternalNetServerAttributesExtractor; import io.opentelemetry.instrumentation.api.instrumenter.network.internal.InternalClientAttributesExtractor; import io.opentelemetry.instrumentation.api.instrumenter.network.internal.InternalNetworkAttributesExtractor; @@ -28,7 +27,12 @@ import java.util.function.Function; public final class HttpServerAttributesExtractorBuilder { final HttpServerAttributesGetter httpAttributesGetter; - final NetServerAttributesGetter netAttributesGetter; + + @SuppressWarnings("deprecation") // using the net extractor for the old->stable semconv story + final io.opentelemetry.instrumentation.api.instrumenter.net.NetServerAttributesGetter< + REQUEST, RESPONSE> + netAttributesGetter; + final HttpAddressPortExtractor addressPortExtractor; List capturedRequestHeaders = emptyList(); List capturedResponseHeaders = emptyList(); @@ -37,7 +41,10 @@ public final class HttpServerAttributesExtractorBuilder { HttpServerAttributesExtractorBuilder( HttpServerAttributesGetter httpAttributesGetter, - NetServerAttributesGetter netAttributesGetter) { + @SuppressWarnings("deprecation") // using the net extractor for the old->stable semconv story + io.opentelemetry.instrumentation.api.instrumenter.net.NetServerAttributesGetter< + REQUEST, RESPONSE> + netAttributesGetter) { this.httpAttributesGetter = httpAttributesGetter; this.netAttributesGetter = netAttributesGetter; addressPortExtractor = new HttpAddressPortExtractor<>(httpAttributesGetter); diff --git a/instrumentation-api-semconv/src/main/java/io/opentelemetry/instrumentation/api/instrumenter/http/HttpServerAttributesGetter.java b/instrumentation-api-semconv/src/main/java/io/opentelemetry/instrumentation/api/instrumenter/http/HttpServerAttributesGetter.java index a1f7ef3e53..5837a493e1 100644 --- a/instrumentation-api-semconv/src/main/java/io/opentelemetry/instrumentation/api/instrumenter/http/HttpServerAttributesGetter.java +++ b/instrumentation-api-semconv/src/main/java/io/opentelemetry/instrumentation/api/instrumenter/http/HttpServerAttributesGetter.java @@ -5,7 +5,6 @@ package io.opentelemetry.instrumentation.api.instrumenter.http; -import io.opentelemetry.instrumentation.api.instrumenter.net.NetServerAttributesGetter; import io.opentelemetry.instrumentation.api.instrumenter.network.ClientAttributesGetter; import io.opentelemetry.instrumentation.api.instrumenter.network.NetworkAttributesGetter; import io.opentelemetry.instrumentation.api.instrumenter.network.ServerAttributesGetter; @@ -19,10 +18,14 @@ import javax.annotation.Nullable; * library/framework. It will be used by the {@link HttpServerAttributesExtractor} to obtain the * various HTTP server attributes in a type-generic way. */ +@SuppressWarnings( + "deprecation") // implementing the NetServerAttributesGetter for the old->stable semconv story; +// will be removed in 2.0 public interface HttpServerAttributesGetter extends HttpCommonAttributesGetter, UrlAttributesGetter, - NetServerAttributesGetter, + io.opentelemetry.instrumentation.api.instrumenter.net.NetServerAttributesGetter< + REQUEST, RESPONSE>, NetworkAttributesGetter, ServerAttributesGetter, ClientAttributesGetter { diff --git a/instrumentation-api-semconv/src/main/java/io/opentelemetry/instrumentation/api/instrumenter/net/NetServerAttributesExtractor.java b/instrumentation-api-semconv/src/main/java/io/opentelemetry/instrumentation/api/instrumenter/net/NetServerAttributesExtractor.java index fbeac56c01..0ae77a34b0 100644 --- a/instrumentation-api-semconv/src/main/java/io/opentelemetry/instrumentation/api/instrumenter/net/NetServerAttributesExtractor.java +++ b/instrumentation-api-semconv/src/main/java/io/opentelemetry/instrumentation/api/instrumenter/net/NetServerAttributesExtractor.java @@ -21,7 +21,11 @@ import javax.annotation.Nullable; * Extractor of Network * attributes. + * + * @deprecated Make sure that your instrumentation uses the extractors from the {@code ...network} + * package instead. This class will be removed in the 2.0 release. */ +@Deprecated public final class NetServerAttributesExtractor implements AttributesExtractor { diff --git a/instrumentation-api-semconv/src/main/java/io/opentelemetry/instrumentation/api/instrumenter/net/NetServerAttributesGetter.java b/instrumentation-api-semconv/src/main/java/io/opentelemetry/instrumentation/api/instrumenter/net/NetServerAttributesGetter.java index fe42893752..574e5ec1bc 100644 --- a/instrumentation-api-semconv/src/main/java/io/opentelemetry/instrumentation/api/instrumenter/net/NetServerAttributesGetter.java +++ b/instrumentation-api-semconv/src/main/java/io/opentelemetry/instrumentation/api/instrumenter/net/NetServerAttributesGetter.java @@ -19,7 +19,11 @@ import javax.annotation.Nullable; *

Instrumentation authors will create implementations of this interface for their specific * server library/framework. It will be used by the {@link NetServerAttributesExtractor} to obtain * the various network attributes in a type-generic way. + * + * @deprecated Make sure that your instrumentation implements the getters from the {@code + * ...network} package instead. This class will be removed in the 2.0 release. */ +@Deprecated public interface NetServerAttributesGetter extends NetworkAttributesGetter, ServerAttributesGetter, diff --git a/instrumentation-api-semconv/src/main/java/io/opentelemetry/instrumentation/api/instrumenter/net/internal/InternalNetServerAttributesExtractor.java b/instrumentation-api-semconv/src/main/java/io/opentelemetry/instrumentation/api/instrumenter/net/internal/InternalNetServerAttributesExtractor.java index 3feee1de5f..2661a104d5 100644 --- a/instrumentation-api-semconv/src/main/java/io/opentelemetry/instrumentation/api/instrumenter/net/internal/InternalNetServerAttributesExtractor.java +++ b/instrumentation-api-semconv/src/main/java/io/opentelemetry/instrumentation/api/instrumenter/net/internal/InternalNetServerAttributesExtractor.java @@ -8,7 +8,6 @@ package io.opentelemetry.instrumentation.api.instrumenter.net.internal; import static io.opentelemetry.instrumentation.api.internal.AttributesExtractorUtil.internalSet; import io.opentelemetry.api.common.AttributesBuilder; -import io.opentelemetry.instrumentation.api.instrumenter.net.NetServerAttributesGetter; import io.opentelemetry.instrumentation.api.instrumenter.network.internal.AddressAndPort; import io.opentelemetry.instrumentation.api.instrumenter.network.internal.FallbackAddressPortExtractor; import io.opentelemetry.semconv.trace.attributes.SemanticAttributes; @@ -17,14 +16,19 @@ import io.opentelemetry.semconv.trace.attributes.SemanticAttributes; * This class is internal and is hence not for public use. Its APIs are unstable and can change at * any time. */ +@SuppressWarnings("deprecation") // this class will be removed in the 2.0 version public final class InternalNetServerAttributesExtractor { - private final NetServerAttributesGetter getter; + private final io.opentelemetry.instrumentation.api.instrumenter.net.NetServerAttributesGetter< + REQUEST, RESPONSE> + getter; private final FallbackAddressPortExtractor fallbackAddressPortExtractor; private final boolean emitOldHttpAttributes; public InternalNetServerAttributesExtractor( - NetServerAttributesGetter getter, + io.opentelemetry.instrumentation.api.instrumenter.net.NetServerAttributesGetter< + REQUEST, RESPONSE> + getter, FallbackAddressPortExtractor fallbackAddressPortExtractor, boolean emitOldHttpAttributes) { this.getter = getter; diff --git a/instrumentation-api-semconv/src/main/java/io/opentelemetry/instrumentation/api/instrumenter/network/ClientAttributesExtractor.java b/instrumentation-api-semconv/src/main/java/io/opentelemetry/instrumentation/api/instrumenter/network/ClientAttributesExtractor.java index 9ca0ab202b..72342496e2 100644 --- a/instrumentation-api-semconv/src/main/java/io/opentelemetry/instrumentation/api/instrumenter/network/ClientAttributesExtractor.java +++ b/instrumentation-api-semconv/src/main/java/io/opentelemetry/instrumentation/api/instrumenter/network/ClientAttributesExtractor.java @@ -10,6 +10,7 @@ import io.opentelemetry.context.Context; import io.opentelemetry.instrumentation.api.instrumenter.AttributesExtractor; import io.opentelemetry.instrumentation.api.instrumenter.network.internal.FallbackAddressPortExtractor; import io.opentelemetry.instrumentation.api.instrumenter.network.internal.InternalClientAttributesExtractor; +import io.opentelemetry.instrumentation.api.internal.SemconvStability; import javax.annotation.Nullable; /** @@ -32,13 +33,12 @@ public final class ClientAttributesExtractor private final InternalClientAttributesExtractor internalExtractor; ClientAttributesExtractor(ClientAttributesGetter getter) { - // the ClientAttributesExtractor will always emit new semconv internalExtractor = new InternalClientAttributesExtractor<>( getter, FallbackAddressPortExtractor.noop(), - /* emitStableUrlAttributes= */ true, - /* emitOldHttpAttributes= */ false); + SemconvStability.emitStableHttpSemconv(), + SemconvStability.emitOldHttpSemconv()); } @Override diff --git a/instrumentation-api-semconv/src/main/java/io/opentelemetry/instrumentation/api/instrumenter/network/NetworkAttributesExtractor.java b/instrumentation-api-semconv/src/main/java/io/opentelemetry/instrumentation/api/instrumenter/network/NetworkAttributesExtractor.java index ed3de6712d..ec9e0ac298 100644 --- a/instrumentation-api-semconv/src/main/java/io/opentelemetry/instrumentation/api/instrumenter/network/NetworkAttributesExtractor.java +++ b/instrumentation-api-semconv/src/main/java/io/opentelemetry/instrumentation/api/instrumenter/network/NetworkAttributesExtractor.java @@ -10,6 +10,7 @@ import io.opentelemetry.context.Context; import io.opentelemetry.instrumentation.api.instrumenter.AttributesExtractor; import io.opentelemetry.instrumentation.api.instrumenter.network.internal.InternalNetworkAttributesExtractor; import io.opentelemetry.instrumentation.api.instrumenter.network.internal.NetworkTransportFilter; +import io.opentelemetry.instrumentation.api.internal.SemconvStability; import javax.annotation.Nullable; /** @@ -32,13 +33,12 @@ public final class NetworkAttributesExtractor private final InternalNetworkAttributesExtractor internalExtractor; NetworkAttributesExtractor(NetworkAttributesGetter getter) { - // the NetworkAttributesExtractor will always emit new semconv internalExtractor = new InternalNetworkAttributesExtractor<>( getter, NetworkTransportFilter.alwaysTrue(), - /* emitStableUrlAttributes= */ true, - /* emitOldHttpAttributes= */ false); + SemconvStability.emitStableHttpSemconv(), + SemconvStability.emitOldHttpSemconv()); } @Override diff --git a/instrumentation-api-semconv/src/main/java/io/opentelemetry/instrumentation/api/instrumenter/network/ServerAttributesExtractor.java b/instrumentation-api-semconv/src/main/java/io/opentelemetry/instrumentation/api/instrumenter/network/ServerAttributesExtractor.java index 0065121a01..f8788d26ac 100644 --- a/instrumentation-api-semconv/src/main/java/io/opentelemetry/instrumentation/api/instrumenter/network/ServerAttributesExtractor.java +++ b/instrumentation-api-semconv/src/main/java/io/opentelemetry/instrumentation/api/instrumenter/network/ServerAttributesExtractor.java @@ -10,6 +10,7 @@ import io.opentelemetry.context.Context; import io.opentelemetry.instrumentation.api.instrumenter.AttributesExtractor; import io.opentelemetry.instrumentation.api.instrumenter.network.internal.FallbackAddressPortExtractor; import io.opentelemetry.instrumentation.api.instrumenter.network.internal.InternalServerAttributesExtractor; +import io.opentelemetry.instrumentation.api.internal.SemconvStability; import javax.annotation.Nullable; /** @@ -26,22 +27,38 @@ public final class ServerAttributesExtractor */ public static ServerAttributesExtractor create( ServerAttributesGetter getter) { - return new ServerAttributesExtractor<>(getter); + return new ServerAttributesExtractor<>(getter, InternalServerAttributesExtractor.Mode.PEER); + } + + /** + * Returns a new {@link ServerAttributesExtractor} that will use the passed {@link + * ServerAttributesGetter}. + * + * @deprecated This method will be removed in the 2.0 release. It was only introduced to ease the + * transition from using the old {@code NetServerAttributesGetter} to the new {@code + * ...network} attribute getter classes. + */ + @Deprecated + public static + ServerAttributesExtractor createForServerSide( + ServerAttributesGetter getter) { + return new ServerAttributesExtractor<>(getter, InternalServerAttributesExtractor.Mode.HOST); } private final InternalServerAttributesExtractor internalExtractor; - ServerAttributesExtractor(ServerAttributesGetter getter) { + ServerAttributesExtractor( + ServerAttributesGetter getter, + InternalServerAttributesExtractor.Mode mode) { // the ServerAttributesExtractor will always emit new semconv internalExtractor = new InternalServerAttributesExtractor<>( getter, (port, request) -> true, FallbackAddressPortExtractor.noop(), - /* emitStableUrlAttributes= */ true, - /* emitOldHttpAttributes= */ false, - // this param does not matter when old semconv is off - InternalServerAttributesExtractor.Mode.HOST, + SemconvStability.emitStableHttpSemconv(), + SemconvStability.emitOldHttpSemconv(), + mode, /* captureServerSocketAttributes= */ true); } diff --git a/instrumentation-api-semconv/src/test/java/io/opentelemetry/instrumentation/api/instrumenter/net/InetSocketAddressNetServerAttributesGetterTest.java b/instrumentation-api-semconv/src/test/java/io/opentelemetry/instrumentation/api/instrumenter/net/InetSocketAddressNetServerAttributesGetterTest.java index fa6d8f0e15..ddc69bcf24 100644 --- a/instrumentation-api-semconv/src/test/java/io/opentelemetry/instrumentation/api/instrumenter/net/InetSocketAddressNetServerAttributesGetterTest.java +++ b/instrumentation-api-semconv/src/test/java/io/opentelemetry/instrumentation/api/instrumenter/net/InetSocketAddressNetServerAttributesGetterTest.java @@ -19,6 +19,7 @@ import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.junit.jupiter.MockitoExtension; +@SuppressWarnings("deprecation") // testing deprecated class @ExtendWith(MockitoExtension.class) class InetSocketAddressNetServerAttributesGetterTest { diff --git a/instrumentation-api-semconv/src/test/java/io/opentelemetry/instrumentation/api/instrumenter/net/NetServerAttributesExtractorTest.java b/instrumentation-api-semconv/src/test/java/io/opentelemetry/instrumentation/api/instrumenter/net/NetServerAttributesExtractorTest.java index d6d3dc4ab7..33c98333b2 100644 --- a/instrumentation-api-semconv/src/test/java/io/opentelemetry/instrumentation/api/instrumenter/net/NetServerAttributesExtractorTest.java +++ b/instrumentation-api-semconv/src/test/java/io/opentelemetry/instrumentation/api/instrumenter/net/NetServerAttributesExtractorTest.java @@ -21,6 +21,7 @@ import javax.annotation.Nullable; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; +@SuppressWarnings("deprecation") // testing deprecated class class NetServerAttributesExtractorTest { static class TestNetServerAttributesGetter diff --git a/instrumentation-api-semconv/src/test/java/io/opentelemetry/instrumentation/api/instrumenter/network/ClientAttributesExtractorOldSemconvTest.java b/instrumentation-api-semconv/src/test/java/io/opentelemetry/instrumentation/api/instrumenter/network/ClientAttributesExtractorOldSemconvTest.java new file mode 100644 index 0000000000..721cc16d8f --- /dev/null +++ b/instrumentation-api-semconv/src/test/java/io/opentelemetry/instrumentation/api/instrumenter/network/ClientAttributesExtractorOldSemconvTest.java @@ -0,0 +1,91 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.instrumentation.api.instrumenter.network; + +import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat; +import static java.util.Collections.emptyMap; +import static org.assertj.core.api.Assertions.entry; + +import io.opentelemetry.api.common.Attributes; +import io.opentelemetry.api.common.AttributesBuilder; +import io.opentelemetry.context.Context; +import io.opentelemetry.instrumentation.api.instrumenter.AttributesExtractor; +import io.opentelemetry.semconv.trace.attributes.SemanticAttributes; +import java.util.HashMap; +import java.util.Map; +import javax.annotation.Nullable; +import org.junit.jupiter.api.Test; + +class ClientAttributesExtractorOldSemconvTest { + + static class TestClientAttributesGetter + implements ClientAttributesGetter, Void> { + + @Nullable + @Override + public String getClientAddress(Map request) { + return request.get("address"); + } + + @Nullable + @Override + public Integer getClientPort(Map request) { + String value = request.get("port"); + return value == null ? null : Integer.parseInt(value); + } + + @Nullable + @Override + public String getClientSocketAddress(Map request, @Nullable Void response) { + return request.get("socketAddress"); + } + + @Nullable + @Override + public Integer getClientSocketPort(Map request, @Nullable Void response) { + String value = request.get("socketPort"); + return value == null ? null : Integer.parseInt(value); + } + } + + @Test + void allAttributes() { + Map request = new HashMap<>(); + request.put("address", "opentelemetry.io"); + request.put("port", "80"); + request.put("socketAddress", "1.2.3.4"); + request.put("socketPort", "8080"); + + AttributesExtractor, Void> extractor = + ClientAttributesExtractor.create(new TestClientAttributesGetter()); + + AttributesBuilder startAttributes = Attributes.builder(); + extractor.onStart(startAttributes, Context.root(), request); + assertThat(startAttributes.build()) + .containsOnly(entry(SemanticAttributes.HTTP_CLIENT_IP, "opentelemetry.io")); + + AttributesBuilder endAttributes = Attributes.builder(); + extractor.onEnd(endAttributes, Context.root(), request, null, null); + assertThat(endAttributes.build()) + .containsOnly( + entry(SemanticAttributes.NET_SOCK_PEER_ADDR, "1.2.3.4"), + entry(SemanticAttributes.NET_SOCK_PEER_PORT, 8080L)); + } + + @Test + void noAttributes() { + AttributesExtractor, Void> extractor = + ClientAttributesExtractor.create(new TestClientAttributesGetter()); + + AttributesBuilder startAttributes = Attributes.builder(); + extractor.onStart(startAttributes, Context.root(), emptyMap()); + assertThat(startAttributes.build()).isEmpty(); + + AttributesBuilder endAttributes = Attributes.builder(); + extractor.onEnd(endAttributes, Context.root(), emptyMap(), null, null); + assertThat(endAttributes.build()).isEmpty(); + } +} diff --git a/instrumentation-api-semconv/src/test/java/io/opentelemetry/instrumentation/api/instrumenter/network/NetworkAttributesExtractorOldSemconvTest.java b/instrumentation-api-semconv/src/test/java/io/opentelemetry/instrumentation/api/instrumenter/network/NetworkAttributesExtractorOldSemconvTest.java new file mode 100644 index 0000000000..3cac8ae3e7 --- /dev/null +++ b/instrumentation-api-semconv/src/test/java/io/opentelemetry/instrumentation/api/instrumenter/network/NetworkAttributesExtractorOldSemconvTest.java @@ -0,0 +1,89 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.instrumentation.api.instrumenter.network; + +import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat; +import static java.util.Collections.emptyMap; +import static org.assertj.core.api.Assertions.entry; + +import io.opentelemetry.api.common.Attributes; +import io.opentelemetry.api.common.AttributesBuilder; +import io.opentelemetry.context.Context; +import io.opentelemetry.instrumentation.api.instrumenter.AttributesExtractor; +import io.opentelemetry.semconv.trace.attributes.SemanticAttributes; +import java.util.HashMap; +import java.util.Map; +import javax.annotation.Nullable; +import org.junit.jupiter.api.Test; + +class NetworkAttributesExtractorOldSemconvTest { + + static class TestNetworkAttributesGetter + implements NetworkAttributesGetter, Void> { + + @Nullable + @Override + public String getNetworkTransport(Map request, @Nullable Void response) { + return request.get("transport"); + } + + @Nullable + @Override + public String getNetworkType(Map request, @Nullable Void response) { + return request.get("type"); + } + + @Nullable + @Override + public String getNetworkProtocolName(Map request, @Nullable Void response) { + return request.get("protocolName"); + } + + @Nullable + @Override + public String getNetworkProtocolVersion(Map request, @Nullable Void response) { + return request.get("protocolVersion"); + } + } + + @Test + void allAttributes() { + Map request = new HashMap<>(); + request.put("transport", "TcP"); + request.put("type", "IPv4"); + request.put("protocolName", "Http"); + request.put("protocolVersion", "1.1"); + + AttributesExtractor, Void> extractor = + NetworkAttributesExtractor.create(new TestNetworkAttributesGetter()); + + AttributesBuilder startAttributes = Attributes.builder(); + extractor.onStart(startAttributes, Context.root(), request); + assertThat(startAttributes.build()).isEmpty(); + + AttributesBuilder endAttributes = Attributes.builder(); + extractor.onEnd(endAttributes, Context.root(), request, null, null); + assertThat(endAttributes.build()) + .containsOnly( + // the NetworkAttributesExtractor can't emit old net.transport & net.sock.family + entry(SemanticAttributes.NET_PROTOCOL_NAME, "http"), + entry(SemanticAttributes.NET_PROTOCOL_VERSION, "1.1")); + } + + @Test + void noAttributes() { + AttributesExtractor, Void> extractor = + NetworkAttributesExtractor.create(new TestNetworkAttributesGetter()); + + AttributesBuilder startAttributes = Attributes.builder(); + extractor.onStart(startAttributes, Context.root(), emptyMap()); + assertThat(startAttributes.build()).isEmpty(); + + AttributesBuilder endAttributes = Attributes.builder(); + extractor.onEnd(endAttributes, Context.root(), emptyMap(), null, null); + assertThat(endAttributes.build()).isEmpty(); + } +} diff --git a/instrumentation-api-semconv/src/test/java/io/opentelemetry/instrumentation/api/instrumenter/network/ServerAttributesExtractorOldSemconvTest.java b/instrumentation-api-semconv/src/test/java/io/opentelemetry/instrumentation/api/instrumenter/network/ServerAttributesExtractorOldSemconvTest.java new file mode 100644 index 0000000000..b39d1fcac9 --- /dev/null +++ b/instrumentation-api-semconv/src/test/java/io/opentelemetry/instrumentation/api/instrumenter/network/ServerAttributesExtractorOldSemconvTest.java @@ -0,0 +1,129 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.instrumentation.api.instrumenter.network; + +import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat; +import static java.util.Collections.emptyMap; +import static org.assertj.core.api.Assertions.entry; + +import io.opentelemetry.api.common.Attributes; +import io.opentelemetry.api.common.AttributesBuilder; +import io.opentelemetry.context.Context; +import io.opentelemetry.instrumentation.api.instrumenter.AttributesExtractor; +import io.opentelemetry.semconv.trace.attributes.SemanticAttributes; +import java.util.HashMap; +import java.util.Map; +import javax.annotation.Nullable; +import org.junit.jupiter.api.Test; + +class ServerAttributesExtractorOldSemconvTest { + + static class TestServerAttributesGetter + implements ServerAttributesGetter, Void> { + + @Nullable + @Override + public String getServerAddress(Map request) { + return request.get("address"); + } + + @Nullable + @Override + public Integer getServerPort(Map request) { + String port = request.get("port"); + return port == null ? null : Integer.parseInt(port); + } + + @Nullable + @Override + public String getServerSocketDomain(Map request, @Nullable Void response) { + return request.get("socketDomain"); + } + + @Nullable + @Override + public String getServerSocketAddress(Map request, @Nullable Void response) { + return request.get("socketAddress"); + } + + @Nullable + @Override + public Integer getServerSocketPort(Map request, @Nullable Void response) { + String port = request.get("socketPort"); + return port == null ? null : Integer.parseInt(port); + } + } + + @Test + void allAttributes_peer() { + Map request = new HashMap<>(); + request.put("address", "opentelemetry.io"); + request.put("port", "80"); + request.put("socketDomain", "proxy.opentelemetry.io"); + request.put("socketAddress", "1.2.3.4"); + request.put("socketPort", "8080"); + + AttributesExtractor, Void> extractor = + ServerAttributesExtractor.create(new TestServerAttributesGetter()); + + AttributesBuilder startAttributes = Attributes.builder(); + extractor.onStart(startAttributes, Context.root(), request); + assertThat(startAttributes.build()) + .containsOnly( + entry(SemanticAttributes.NET_PEER_NAME, "opentelemetry.io"), + entry(SemanticAttributes.NET_PEER_PORT, 80L)); + + AttributesBuilder endAttributes = Attributes.builder(); + extractor.onEnd(endAttributes, Context.root(), request, null, null); + assertThat(endAttributes.build()) + .containsOnly( + entry(SemanticAttributes.NET_SOCK_PEER_NAME, "proxy.opentelemetry.io"), + entry(SemanticAttributes.NET_SOCK_PEER_ADDR, "1.2.3.4"), + entry(SemanticAttributes.NET_SOCK_PEER_PORT, 8080L)); + } + + @SuppressWarnings("deprecation") // need to test the old semconv too + @Test + void allAttributes_host() { + Map request = new HashMap<>(); + request.put("address", "opentelemetry.io"); + request.put("port", "80"); + request.put("socketDomain", "proxy.opentelemetry.io"); + request.put("socketAddress", "1.2.3.4"); + request.put("socketPort", "8080"); + + AttributesExtractor, Void> extractor = + ServerAttributesExtractor.createForServerSide(new TestServerAttributesGetter()); + + AttributesBuilder startAttributes = Attributes.builder(); + extractor.onStart(startAttributes, Context.root(), request); + assertThat(startAttributes.build()) + .containsOnly( + entry(SemanticAttributes.NET_HOST_NAME, "opentelemetry.io"), + entry(SemanticAttributes.NET_HOST_PORT, 80L)); + + AttributesBuilder endAttributes = Attributes.builder(); + extractor.onEnd(endAttributes, Context.root(), request, null, null); + assertThat(endAttributes.build()) + .containsOnly( + entry(SemanticAttributes.NET_SOCK_HOST_ADDR, "1.2.3.4"), + entry(SemanticAttributes.NET_SOCK_HOST_PORT, 8080L)); + } + + @Test + void noAttributes() { + AttributesExtractor, Void> extractor = + ServerAttributesExtractor.create(new TestServerAttributesGetter()); + + AttributesBuilder startAttributes = Attributes.builder(); + extractor.onStart(startAttributes, Context.root(), emptyMap()); + assertThat(startAttributes.build()).isEmpty(); + + AttributesBuilder endAttributes = Attributes.builder(); + extractor.onEnd(endAttributes, Context.root(), emptyMap(), null, null); + assertThat(endAttributes.build()).isEmpty(); + } +} diff --git a/instrumentation-api-semconv/src/testBothHttpSemconv/java/io/opentelemetry/instrumentation/api/instrumenter/net/NetServerAttributesExtractorBothSemconvTest.java b/instrumentation-api-semconv/src/testBothHttpSemconv/java/io/opentelemetry/instrumentation/api/instrumenter/net/NetServerAttributesExtractorBothSemconvTest.java index 51887c7cd1..fd276b5a49 100644 --- a/instrumentation-api-semconv/src/testBothHttpSemconv/java/io/opentelemetry/instrumentation/api/instrumenter/net/NetServerAttributesExtractorBothSemconvTest.java +++ b/instrumentation-api-semconv/src/testBothHttpSemconv/java/io/opentelemetry/instrumentation/api/instrumenter/net/NetServerAttributesExtractorBothSemconvTest.java @@ -20,6 +20,7 @@ import java.util.Map; import javax.annotation.Nullable; import org.junit.jupiter.api.Test; +@SuppressWarnings("deprecation") // testing deprecated class class NetServerAttributesExtractorBothSemconvTest { static class TestNetServerAttributesGetter diff --git a/instrumentation-api-semconv/src/testStableHttpSemconv/java/io/opentelemetry/instrumentation/api/instrumenter/net/NetServerAttributesExtractorStableSemconvTest.java b/instrumentation-api-semconv/src/testStableHttpSemconv/java/io/opentelemetry/instrumentation/api/instrumenter/net/NetServerAttributesExtractorStableSemconvTest.java index a16cdf23dd..301cad0649 100644 --- a/instrumentation-api-semconv/src/testStableHttpSemconv/java/io/opentelemetry/instrumentation/api/instrumenter/net/NetServerAttributesExtractorStableSemconvTest.java +++ b/instrumentation-api-semconv/src/testStableHttpSemconv/java/io/opentelemetry/instrumentation/api/instrumenter/net/NetServerAttributesExtractorStableSemconvTest.java @@ -19,6 +19,7 @@ import java.util.Map; import javax.annotation.Nullable; import org.junit.jupiter.api.Test; +@SuppressWarnings("deprecation") // testing deprecated class class NetServerAttributesExtractorStableSemconvTest { static class TestNetServerAttributesGetter diff --git a/instrumentation-api-semconv/src/test/java/io/opentelemetry/instrumentation/api/instrumenter/network/ClientAttributesExtractorInetSocketAddressTest.java b/instrumentation-api-semconv/src/testStableHttpSemconv/java/io/opentelemetry/instrumentation/api/instrumenter/network/ClientAttributesExtractorInetSocketAddressTest.java similarity index 100% rename from instrumentation-api-semconv/src/test/java/io/opentelemetry/instrumentation/api/instrumenter/network/ClientAttributesExtractorInetSocketAddressTest.java rename to instrumentation-api-semconv/src/testStableHttpSemconv/java/io/opentelemetry/instrumentation/api/instrumenter/network/ClientAttributesExtractorInetSocketAddressTest.java diff --git a/instrumentation-api-semconv/src/test/java/io/opentelemetry/instrumentation/api/instrumenter/network/ClientAttributesExtractorTest.java b/instrumentation-api-semconv/src/testStableHttpSemconv/java/io/opentelemetry/instrumentation/api/instrumenter/network/ClientAttributesExtractorTest.java similarity index 100% rename from instrumentation-api-semconv/src/test/java/io/opentelemetry/instrumentation/api/instrumenter/network/ClientAttributesExtractorTest.java rename to instrumentation-api-semconv/src/testStableHttpSemconv/java/io/opentelemetry/instrumentation/api/instrumenter/network/ClientAttributesExtractorTest.java diff --git a/instrumentation-api-semconv/src/test/java/io/opentelemetry/instrumentation/api/instrumenter/network/NetworkAttributesExtractorTest.java b/instrumentation-api-semconv/src/testStableHttpSemconv/java/io/opentelemetry/instrumentation/api/instrumenter/network/NetworkAttributesExtractorTest.java similarity index 100% rename from instrumentation-api-semconv/src/test/java/io/opentelemetry/instrumentation/api/instrumenter/network/NetworkAttributesExtractorTest.java rename to instrumentation-api-semconv/src/testStableHttpSemconv/java/io/opentelemetry/instrumentation/api/instrumenter/network/NetworkAttributesExtractorTest.java diff --git a/instrumentation-api-semconv/src/test/java/io/opentelemetry/instrumentation/api/instrumenter/network/ServerAttributesExtractorInetSocketAddressTest.java b/instrumentation-api-semconv/src/testStableHttpSemconv/java/io/opentelemetry/instrumentation/api/instrumenter/network/ServerAttributesExtractorInetSocketAddressTest.java similarity index 100% rename from instrumentation-api-semconv/src/test/java/io/opentelemetry/instrumentation/api/instrumenter/network/ServerAttributesExtractorInetSocketAddressTest.java rename to instrumentation-api-semconv/src/testStableHttpSemconv/java/io/opentelemetry/instrumentation/api/instrumenter/network/ServerAttributesExtractorInetSocketAddressTest.java diff --git a/instrumentation-api-semconv/src/test/java/io/opentelemetry/instrumentation/api/instrumenter/network/ServerAttributesExtractorTest.java b/instrumentation-api-semconv/src/testStableHttpSemconv/java/io/opentelemetry/instrumentation/api/instrumenter/network/ServerAttributesExtractorTest.java similarity index 100% rename from instrumentation-api-semconv/src/test/java/io/opentelemetry/instrumentation/api/instrumenter/network/ServerAttributesExtractorTest.java rename to instrumentation-api-semconv/src/testStableHttpSemconv/java/io/opentelemetry/instrumentation/api/instrumenter/network/ServerAttributesExtractorTest.java diff --git a/instrumentation/apache-dubbo-2.7/library-autoconfigure/src/main/java/io/opentelemetry/instrumentation/apachedubbo/v2_7/internal/DubboNetServerAttributesGetter.java b/instrumentation/apache-dubbo-2.7/library-autoconfigure/src/main/java/io/opentelemetry/instrumentation/apachedubbo/v2_7/DubboNetworkServerAttributesGetter.java similarity index 61% rename from instrumentation/apache-dubbo-2.7/library-autoconfigure/src/main/java/io/opentelemetry/instrumentation/apachedubbo/v2_7/internal/DubboNetServerAttributesGetter.java rename to instrumentation/apache-dubbo-2.7/library-autoconfigure/src/main/java/io/opentelemetry/instrumentation/apachedubbo/v2_7/DubboNetworkServerAttributesGetter.java index 613375a755..0d1bc51ace 100644 --- a/instrumentation/apache-dubbo-2.7/library-autoconfigure/src/main/java/io/opentelemetry/instrumentation/apachedubbo/v2_7/internal/DubboNetServerAttributesGetter.java +++ b/instrumentation/apache-dubbo-2.7/library-autoconfigure/src/main/java/io/opentelemetry/instrumentation/apachedubbo/v2_7/DubboNetworkServerAttributesGetter.java @@ -3,20 +3,17 @@ * SPDX-License-Identifier: Apache-2.0 */ -package io.opentelemetry.instrumentation.apachedubbo.v2_7.internal; +package io.opentelemetry.instrumentation.apachedubbo.v2_7; -import io.opentelemetry.instrumentation.apachedubbo.v2_7.DubboRequest; -import io.opentelemetry.instrumentation.api.instrumenter.net.NetServerAttributesGetter; +import io.opentelemetry.instrumentation.api.instrumenter.network.ClientAttributesGetter; +import io.opentelemetry.instrumentation.api.instrumenter.network.ServerAttributesGetter; import java.net.InetSocketAddress; import javax.annotation.Nullable; import org.apache.dubbo.rpc.Result; -/** - * This class is internal and is hence not for public use. Its APIs are unstable and can change at - * any time. - */ -public final class DubboNetServerAttributesGetter - implements NetServerAttributesGetter { +final class DubboNetworkServerAttributesGetter + implements ServerAttributesGetter, + ClientAttributesGetter { @Nullable @Override @@ -30,17 +27,17 @@ public final class DubboNetServerAttributesGetter return null; } - @Override - @Nullable - public InetSocketAddress getClientInetSocketAddress( - DubboRequest request, @Nullable Result result) { - return request.remoteAddress(); - } - @Nullable @Override public InetSocketAddress getServerInetSocketAddress( DubboRequest request, @Nullable Result result) { return request.localAddress(); } + + @Override + @Nullable + public InetSocketAddress getClientInetSocketAddress( + DubboRequest request, @Nullable Result result) { + return request.remoteAddress(); + } } diff --git a/instrumentation/apache-dubbo-2.7/library-autoconfigure/src/main/java/io/opentelemetry/instrumentation/apachedubbo/v2_7/DubboTelemetryBuilder.java b/instrumentation/apache-dubbo-2.7/library-autoconfigure/src/main/java/io/opentelemetry/instrumentation/apachedubbo/v2_7/DubboTelemetryBuilder.java index f20838fd74..f9d99301ab 100644 --- a/instrumentation/apache-dubbo-2.7/library-autoconfigure/src/main/java/io/opentelemetry/instrumentation/apachedubbo/v2_7/DubboTelemetryBuilder.java +++ b/instrumentation/apache-dubbo-2.7/library-autoconfigure/src/main/java/io/opentelemetry/instrumentation/apachedubbo/v2_7/DubboTelemetryBuilder.java @@ -8,13 +8,13 @@ package io.opentelemetry.instrumentation.apachedubbo.v2_7; import com.google.errorprone.annotations.CanIgnoreReturnValue; import io.opentelemetry.api.OpenTelemetry; import io.opentelemetry.instrumentation.apachedubbo.v2_7.internal.DubboNetClientAttributesGetter; -import io.opentelemetry.instrumentation.apachedubbo.v2_7.internal.DubboNetServerAttributesGetter; 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.net.NetClientAttributesExtractor; -import io.opentelemetry.instrumentation.api.instrumenter.net.NetServerAttributesExtractor; +import io.opentelemetry.instrumentation.api.instrumenter.network.ClientAttributesExtractor; +import io.opentelemetry.instrumentation.api.instrumenter.network.ServerAttributesExtractor; import io.opentelemetry.instrumentation.api.instrumenter.rpc.RpcClientAttributesExtractor; import io.opentelemetry.instrumentation.api.instrumenter.rpc.RpcServerAttributesExtractor; import io.opentelemetry.instrumentation.api.instrumenter.rpc.RpcSpanNameExtractor; @@ -57,18 +57,22 @@ public final class DubboTelemetryBuilder { /** * Returns a new {@link DubboTelemetry} with the settings of this {@link DubboTelemetryBuilder}. */ + @SuppressWarnings("deprecation") // using createForServerSide() for the old->stable semconv story public DubboTelemetry build() { DubboRpcAttributesGetter rpcAttributesGetter = DubboRpcAttributesGetter.INSTANCE; SpanNameExtractor spanNameExtractor = RpcSpanNameExtractor.create(rpcAttributesGetter); DubboNetClientAttributesGetter netClientAttributesGetter = new DubboNetClientAttributesGetter(); + DubboNetworkServerAttributesGetter netServerAttributesGetter = + new DubboNetworkServerAttributesGetter(); InstrumenterBuilder serverInstrumenterBuilder = Instrumenter.builder( openTelemetry, INSTRUMENTATION_NAME, spanNameExtractor) .addAttributesExtractor(RpcServerAttributesExtractor.create(rpcAttributesGetter)) .addAttributesExtractor( - NetServerAttributesExtractor.create(new DubboNetServerAttributesGetter())) + ServerAttributesExtractor.createForServerSide(netServerAttributesGetter)) + .addAttributesExtractor(ClientAttributesExtractor.create(netServerAttributesGetter)) .addAttributesExtractors(attributesExtractors); InstrumenterBuilder clientInstrumenterBuilder = diff --git a/instrumentation/grpc-1.6/library/src/main/java/io/opentelemetry/instrumentation/grpc/v1_6/internal/GrpcNetServerAttributesGetter.java b/instrumentation/grpc-1.6/library/src/main/java/io/opentelemetry/instrumentation/grpc/v1_6/GrpcNetworkServerAttributesGetter.java similarity index 69% rename from instrumentation/grpc-1.6/library/src/main/java/io/opentelemetry/instrumentation/grpc/v1_6/internal/GrpcNetServerAttributesGetter.java rename to instrumentation/grpc-1.6/library/src/main/java/io/opentelemetry/instrumentation/grpc/v1_6/GrpcNetworkServerAttributesGetter.java index be7875e6b8..3fd4406d90 100644 --- a/instrumentation/grpc-1.6/library/src/main/java/io/opentelemetry/instrumentation/grpc/v1_6/internal/GrpcNetServerAttributesGetter.java +++ b/instrumentation/grpc-1.6/library/src/main/java/io/opentelemetry/instrumentation/grpc/v1_6/GrpcNetworkServerAttributesGetter.java @@ -3,21 +3,18 @@ * SPDX-License-Identifier: Apache-2.0 */ -package io.opentelemetry.instrumentation.grpc.v1_6.internal; +package io.opentelemetry.instrumentation.grpc.v1_6; import io.grpc.Status; -import io.opentelemetry.instrumentation.api.instrumenter.net.NetServerAttributesGetter; -import io.opentelemetry.instrumentation.grpc.v1_6.GrpcRequest; +import io.opentelemetry.instrumentation.api.instrumenter.network.ClientAttributesGetter; +import io.opentelemetry.instrumentation.api.instrumenter.network.ServerAttributesGetter; import java.net.InetSocketAddress; import java.net.SocketAddress; import javax.annotation.Nullable; -/** - * This class is internal and is hence not for public use. Its APIs are unstable and can change at - * any time. - */ -public final class GrpcNetServerAttributesGetter - implements NetServerAttributesGetter { +final class GrpcNetworkServerAttributesGetter + implements ServerAttributesGetter, + ClientAttributesGetter { @Nullable @Override @@ -30,6 +27,14 @@ public final class GrpcNetServerAttributesGetter return grpcRequest.getLogicalPort(); } + @Nullable + @Override + public InetSocketAddress getServerInetSocketAddress( + GrpcRequest grpcRequest, @Nullable Status status) { + // TODO: later version introduces TRANSPORT_ATTR_LOCAL_ADDR, might be a good idea to use it + return null; + } + @Override @Nullable public InetSocketAddress getClientInetSocketAddress( @@ -40,12 +45,4 @@ public final class GrpcNetServerAttributesGetter } return null; } - - @Nullable - @Override - public InetSocketAddress getServerInetSocketAddress( - GrpcRequest grpcRequest, @Nullable Status status) { - // TODO: later version introduces TRANSPORT_ATTR_LOCAL_ADDR, might be a good idea to use it - return null; - } } diff --git a/instrumentation/grpc-1.6/library/src/main/java/io/opentelemetry/instrumentation/grpc/v1_6/GrpcTelemetryBuilder.java b/instrumentation/grpc-1.6/library/src/main/java/io/opentelemetry/instrumentation/grpc/v1_6/GrpcTelemetryBuilder.java index 5376cff084..309bb4fd48 100644 --- a/instrumentation/grpc-1.6/library/src/main/java/io/opentelemetry/instrumentation/grpc/v1_6/GrpcTelemetryBuilder.java +++ b/instrumentation/grpc-1.6/library/src/main/java/io/opentelemetry/instrumentation/grpc/v1_6/GrpcTelemetryBuilder.java @@ -14,13 +14,13 @@ 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.instrumenter.net.NetClientAttributesExtractor; -import io.opentelemetry.instrumentation.api.instrumenter.net.NetServerAttributesExtractor; +import io.opentelemetry.instrumentation.api.instrumenter.network.ClientAttributesExtractor; +import io.opentelemetry.instrumentation.api.instrumenter.network.ServerAttributesExtractor; import io.opentelemetry.instrumentation.api.instrumenter.rpc.RpcClientAttributesExtractor; import io.opentelemetry.instrumentation.api.instrumenter.rpc.RpcClientMetrics; import io.opentelemetry.instrumentation.api.instrumenter.rpc.RpcServerAttributesExtractor; import io.opentelemetry.instrumentation.api.instrumenter.rpc.RpcServerMetrics; import io.opentelemetry.instrumentation.grpc.v1_6.internal.GrpcNetClientAttributesGetter; -import io.opentelemetry.instrumentation.grpc.v1_6.internal.GrpcNetServerAttributesGetter; import io.opentelemetry.semconv.trace.attributes.SemanticAttributes; import java.util.ArrayList; import java.util.Collections; @@ -149,6 +149,7 @@ 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 originalSpanNameExtractor = new GrpcSpanNameExtractor(); @@ -175,6 +176,8 @@ public final class GrpcTelemetryBuilder { .addAttributesExtractors(additionalExtractors)); GrpcNetClientAttributesGetter netClientAttributesGetter = new GrpcNetClientAttributesGetter(); + GrpcNetworkServerAttributesGetter netServerAttributesGetter = + new GrpcNetworkServerAttributesGetter(); GrpcRpcAttributesGetter rpcAttributesGetter = GrpcRpcAttributesGetter.INSTANCE; clientInstrumenterBuilder @@ -188,7 +191,8 @@ public final class GrpcTelemetryBuilder { serverInstrumenterBuilder .addAttributesExtractor(RpcServerAttributesExtractor.create(rpcAttributesGetter)) .addAttributesExtractor( - NetServerAttributesExtractor.create(new GrpcNetServerAttributesGetter())) + ServerAttributesExtractor.createForServerSide(netServerAttributesGetter)) + .addAttributesExtractor(ClientAttributesExtractor.create(netServerAttributesGetter)) .addAttributesExtractor( new GrpcAttributesExtractor( GrpcRpcAttributesGetter.INSTANCE, capturedServerRequestMetadata)) diff --git a/instrumentation/pulsar/pulsar-2.8/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/pulsar/v2_8/telemetry/PulsarNetClientAttributesGetter.java b/instrumentation/pulsar/pulsar-2.8/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/pulsar/v2_8/telemetry/PulsarNetClientAttributesGetter.java index 11bbf09fcd..3ad7a927b1 100644 --- a/instrumentation/pulsar/pulsar-2.8/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/pulsar/v2_8/telemetry/PulsarNetClientAttributesGetter.java +++ b/instrumentation/pulsar/pulsar-2.8/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/pulsar/v2_8/telemetry/PulsarNetClientAttributesGetter.java @@ -10,11 +10,6 @@ import javax.annotation.Nullable; public final class PulsarNetClientAttributesGetter implements NetClientAttributesGetter { - @Nullable - @Override - public String getTransport(BasePulsarRequest request, @Nullable Void unused) { - return null; - } @Nullable @Override diff --git a/instrumentation/vertx/vertx-sql-client-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/vertx/v4_0/sql/VertxSqlClientNetAttributesGetter.java b/instrumentation/vertx/vertx-sql-client-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/vertx/v4_0/sql/VertxSqlClientNetAttributesGetter.java index 1fedb24cb6..c2ad69d277 100644 --- a/instrumentation/vertx/vertx-sql-client-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/vertx/v4_0/sql/VertxSqlClientNetAttributesGetter.java +++ b/instrumentation/vertx/vertx-sql-client-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/vertx/v4_0/sql/VertxSqlClientNetAttributesGetter.java @@ -12,12 +12,6 @@ public enum VertxSqlClientNetAttributesGetter implements NetClientAttributesGetter { INSTANCE; - @Nullable - @Override - public String getTransport(VertxSqlClientRequest request, @Nullable Void unused) { - return null; - } - @Nullable @Override public String getServerAddress(VertxSqlClientRequest request) {