diff --git a/conventions/src/main/kotlin/io.opentelemetry.instrumentation.javaagent-testing.gradle.kts b/conventions/src/main/kotlin/io.opentelemetry.instrumentation.javaagent-testing.gradle.kts index bfeb0ccbd4f7..779f32a82178 100644 --- a/conventions/src/main/kotlin/io.opentelemetry.instrumentation.javaagent-testing.gradle.kts +++ b/conventions/src/main/kotlin/io.opentelemetry.instrumentation.javaagent-testing.gradle.kts @@ -94,7 +94,8 @@ class JavaagentTestArgumentsProvider( "-Dio.opentelemetry.javaagent.slf4j.simpleLogger.log.io.grpc.internal.ManagedChannelImplBuilder=INFO", "-Dio.opentelemetry.javaagent.slf4j.simpleLogger.log.io.perfmark.PerfMark=INFO", "-Dio.opentelemetry.javaagent.slf4j.simpleLogger.log.io.grpc.Context=INFO", - "-Dotel.java.experimental.span-attributes.copy-from-baggage.include=test-baggage-key-1,test-baggage-key-2" + "-Dotel.java.experimental.span-attributes.copy-from-baggage.include=test-baggage-key-1,test-baggage-key-2", + "-Dotel.instrumentation.common.peer-service-mapping=127.0.0.1=test-peer-service,localhost=test-peer-service,192.0.2.1=test-peer-service" ) } diff --git a/instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/semconv/http/HttpClientPeerServiceAttributesExtractor.java b/instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/semconv/http/HttpClientPeerServiceAttributesExtractor.java index 8e4a094b6480..34243b316641 100644 --- a/instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/semconv/http/HttpClientPeerServiceAttributesExtractor.java +++ b/instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/semconv/http/HttpClientPeerServiceAttributesExtractor.java @@ -12,6 +12,10 @@ import io.opentelemetry.instrumentation.api.incubator.semconv.net.internal.UrlParser; import io.opentelemetry.instrumentation.api.instrumenter.AttributesExtractor; import io.opentelemetry.instrumentation.api.semconv.http.HttpClientAttributesGetter; +import io.opentelemetry.instrumentation.api.semconv.http.internal.HostAddressAndPortExtractor; +import io.opentelemetry.instrumentation.api.semconv.network.internal.AddressAndPort; +import io.opentelemetry.instrumentation.api.semconv.network.internal.AddressAndPortExtractor; +import io.opentelemetry.instrumentation.api.semconv.network.internal.ServerAddressAndPortExtractor; import java.util.function.Supplier; import javax.annotation.Nullable; @@ -26,26 +30,33 @@ public final class HttpClientPeerServiceAttributesExtractor // copied from PeerIncubatingAttributes private static final AttributeKey PEER_SERVICE = AttributeKey.stringKey("peer.service"); + private final AddressAndPortExtractor addressAndPortExtractor; private final HttpClientAttributesGetter attributesGetter; private final PeerServiceResolver peerServiceResolver; // visible for tests HttpClientPeerServiceAttributesExtractor( + AddressAndPortExtractor addressAndPortExtractor, HttpClientAttributesGetter attributesGetter, PeerServiceResolver peerServiceResolver) { + this.addressAndPortExtractor = addressAndPortExtractor; this.attributesGetter = attributesGetter; this.peerServiceResolver = peerServiceResolver; } /** * Returns a new {@link HttpClientPeerServiceAttributesExtractor} that will use the passed {@code - * attributesGetter} instance to determine the value of the {@code peer.service} attribute. + * attributesGetter} to extract server address and port (with fallback to the HTTP Host header). */ public static HttpClientPeerServiceAttributesExtractor create( HttpClientAttributesGetter attributesGetter, PeerServiceResolver peerServiceResolver) { - return new HttpClientPeerServiceAttributesExtractor<>(attributesGetter, peerServiceResolver); + AddressAndPortExtractor addressAndPortExtractor = + new ServerAddressAndPortExtractor<>( + attributesGetter, new HostAddressAndPortExtractor<>(attributesGetter)); + return new HttpClientPeerServiceAttributesExtractor<>( + addressAndPortExtractor, attributesGetter, peerServiceResolver); } @Override @@ -65,10 +76,11 @@ public void onEnd( return; } - String serverAddress = attributesGetter.getServerAddress(request); - Integer serverPort = attributesGetter.getServerPort(request); + AddressAndPort addressAndPort = addressAndPortExtractor.extract(request); + Supplier pathSupplier = () -> getUrlPath(attributesGetter, request); - String peerService = mapToPeerService(serverAddress, serverPort, pathSupplier); + String peerService = + mapToPeerService(addressAndPort.getAddress(), addressAndPort.getPort(), pathSupplier); if (peerService != null) { attributes.put(PEER_SERVICE, peerService); } diff --git a/instrumentation-api-incubator/src/test/java/io/opentelemetry/instrumentation/api/incubator/semconv/http/HttpClientPeerServiceAttributesExtractorTest.java b/instrumentation-api-incubator/src/test/java/io/opentelemetry/instrumentation/api/incubator/semconv/http/HttpClientPeerServiceAttributesExtractorTest.java index c450a8add835..0661d4e9d2bf 100644 --- a/instrumentation-api-incubator/src/test/java/io/opentelemetry/instrumentation/api/incubator/semconv/http/HttpClientPeerServiceAttributesExtractorTest.java +++ b/instrumentation-api-incubator/src/test/java/io/opentelemetry/instrumentation/api/incubator/semconv/http/HttpClientPeerServiceAttributesExtractorTest.java @@ -6,10 +6,12 @@ package io.opentelemetry.instrumentation.api.incubator.semconv.http; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat; +import static java.util.Collections.singletonList; import static java.util.Collections.singletonMap; import static org.assertj.core.api.Assertions.entry; import static org.junit.jupiter.api.Assertions.assertTrue; import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.when; import io.opentelemetry.api.common.Attributes; @@ -36,7 +38,7 @@ void shouldNotSetAnyValueIfNetExtractorReturnsNulls() { PeerServiceResolver.create(singletonMap("1.2.3.4", "myService")); HttpClientPeerServiceAttributesExtractor underTest = - new HttpClientPeerServiceAttributesExtractor<>( + HttpClientPeerServiceAttributesExtractor.create( httpAttributesExtractor, peerServiceResolver); Context context = Context.root(); @@ -57,7 +59,7 @@ void shouldNotSetAnyValueIfPeerNameDoesNotMatch() { PeerServiceResolver.create(singletonMap("example.com", "myService")); HttpClientPeerServiceAttributesExtractor underTest = - new HttpClientPeerServiceAttributesExtractor<>( + HttpClientPeerServiceAttributesExtractor.create( httpAttributesExtractor, peerServiceResolver); when(httpAttributesExtractor.getServerAddress(any())).thenReturn("example2.com"); @@ -85,7 +87,7 @@ void shouldSetPeerNameIfItMatches() { PeerServiceResolver peerServiceResolver = PeerServiceResolver.create(peerServiceMapping); HttpClientPeerServiceAttributesExtractor underTest = - new HttpClientPeerServiceAttributesExtractor<>( + HttpClientPeerServiceAttributesExtractor.create( httpAttributesExtractor, peerServiceResolver); when(httpAttributesExtractor.getServerAddress(any())).thenReturn("example.com"); @@ -103,4 +105,34 @@ void shouldSetPeerNameIfItMatches() { assertThat(endAttributes.build()) .containsOnly(entry(PeerIncubatingAttributes.PEER_SERVICE, "myService")); } + + @Test + void shouldFallbackToHostHeaderWhenServerAddressIsNull() { + // given + PeerServiceResolver peerServiceResolver = + PeerServiceResolver.create(singletonMap("example.com", "myService")); + + HttpClientPeerServiceAttributesExtractor underTest = + HttpClientPeerServiceAttributesExtractor.create( + httpAttributesExtractor, peerServiceResolver); + + // server address is null, should fallback to Host header + when(httpAttributesExtractor.getServerAddress(any())).thenReturn(null); + when(httpAttributesExtractor.getServerPort(any())).thenReturn(null); + when(httpAttributesExtractor.getHttpRequestHeader(any(), eq("host"))) + .thenReturn(singletonList("example.com:8080")); + + Context context = Context.root(); + + // when + AttributesBuilder startAttributes = Attributes.builder(); + underTest.onStart(startAttributes, context, "request"); + AttributesBuilder endAttributes = Attributes.builder(); + underTest.onEnd(endAttributes, context, "request", "response", null); + + // then + assertThat(startAttributes.build()).isEmpty(); + assertThat(endAttributes.build()) + .containsOnly(entry(PeerIncubatingAttributes.PEER_SERVICE, "myService")); + } } diff --git a/instrumentation-api/src/main/java/io/opentelemetry/instrumentation/api/semconv/http/HostAddressAndPortExtractor.java b/instrumentation-api/src/main/java/io/opentelemetry/instrumentation/api/semconv/http/HostAddressAndPortExtractor.java deleted file mode 100644 index a9637d12a835..000000000000 --- a/instrumentation-api/src/main/java/io/opentelemetry/instrumentation/api/semconv/http/HostAddressAndPortExtractor.java +++ /dev/null @@ -1,36 +0,0 @@ -/* - * Copyright The OpenTelemetry Authors - * SPDX-License-Identifier: Apache-2.0 - */ - -package io.opentelemetry.instrumentation.api.semconv.http; - -import static io.opentelemetry.instrumentation.api.semconv.http.HeaderParsingHelper.setPort; -import static io.opentelemetry.instrumentation.api.semconv.http.HttpCommonAttributesExtractor.firstHeaderValue; - -import io.opentelemetry.instrumentation.api.semconv.network.internal.AddressAndPortExtractor; - -final class HostAddressAndPortExtractor implements AddressAndPortExtractor { - - private final HttpCommonAttributesGetter getter; - - HostAddressAndPortExtractor(HttpCommonAttributesGetter getter) { - this.getter = getter; - } - - @Override - public void extract(AddressPortSink sink, REQUEST request) { - String host = firstHeaderValue(getter.getHttpRequestHeader(request, "host")); - if (host == null) { - return; - } - - int hostHeaderSeparator = host.indexOf(':'); - if (hostHeaderSeparator == -1) { - sink.setAddress(host); - } else { - sink.setAddress(host.substring(0, hostHeaderSeparator)); - setPort(sink, host, hostHeaderSeparator + 1, host.length()); - } - } -} diff --git a/instrumentation-api/src/main/java/io/opentelemetry/instrumentation/api/semconv/http/HttpClientAttributesExtractorBuilder.java b/instrumentation-api/src/main/java/io/opentelemetry/instrumentation/api/semconv/http/HttpClientAttributesExtractorBuilder.java index db0a63a059c1..6a8cef9b6503 100644 --- a/instrumentation-api/src/main/java/io/opentelemetry/instrumentation/api/semconv/http/HttpClientAttributesExtractorBuilder.java +++ b/instrumentation-api/src/main/java/io/opentelemetry/instrumentation/api/semconv/http/HttpClientAttributesExtractorBuilder.java @@ -13,6 +13,7 @@ import io.opentelemetry.instrumentation.api.instrumenter.InstrumenterBuilder; import io.opentelemetry.instrumentation.api.internal.Experimental; import io.opentelemetry.instrumentation.api.internal.HttpConstants; +import io.opentelemetry.instrumentation.api.semconv.http.internal.HostAddressAndPortExtractor; import io.opentelemetry.instrumentation.api.semconv.network.internal.AddressAndPortExtractor; import io.opentelemetry.instrumentation.api.semconv.network.internal.InternalNetworkAttributesExtractor; import io.opentelemetry.instrumentation.api.semconv.network.internal.InternalServerAttributesExtractor; diff --git a/instrumentation-api/src/main/java/io/opentelemetry/instrumentation/api/semconv/http/internal/HostAddressAndPortExtractor.java b/instrumentation-api/src/main/java/io/opentelemetry/instrumentation/api/semconv/http/internal/HostAddressAndPortExtractor.java new file mode 100644 index 000000000000..5e29dbff7e8f --- /dev/null +++ b/instrumentation-api/src/main/java/io/opentelemetry/instrumentation/api/semconv/http/internal/HostAddressAndPortExtractor.java @@ -0,0 +1,59 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.instrumentation.api.semconv.http.internal; + +import io.opentelemetry.instrumentation.api.semconv.http.HttpCommonAttributesGetter; +import io.opentelemetry.instrumentation.api.semconv.network.internal.AddressAndPortExtractor; +import java.util.List; +import javax.annotation.Nullable; + +/** + * Extracts server address and port from the HTTP Host header. + * + *

This class is internal and is hence not for public use. Its APIs are unstable and can change + * at any time. + */ +public final class HostAddressAndPortExtractor + implements AddressAndPortExtractor { + + private final HttpCommonAttributesGetter getter; + + public HostAddressAndPortExtractor(HttpCommonAttributesGetter getter) { + this.getter = getter; + } + + @Override + public void extract(AddressPortSink sink, REQUEST request) { + String host = firstHeaderValue(getter.getHttpRequestHeader(request, "host")); + if (host == null) { + return; + } + + int hostHeaderSeparator = host.indexOf(':'); + if (hostHeaderSeparator == -1) { + sink.setAddress(host); + } else { + sink.setAddress(host.substring(0, hostHeaderSeparator)); + setPort(sink, host, hostHeaderSeparator + 1, host.length()); + } + } + + @Nullable + private static String firstHeaderValue(List values) { + return values.isEmpty() ? null : values.get(0); + } + + private static void setPort(AddressPortSink sink, String header, int start, int end) { + if (start == end) { + return; + } + try { + sink.setPort(Integer.parseInt(header.substring(start, end))); + } catch (NumberFormatException ignored) { + // malformed port, ignoring + } + } +} diff --git a/instrumentation-api/src/test/java/io/opentelemetry/instrumentation/api/semconv/http/HostAddressAndPortExtractorTest.java b/instrumentation-api/src/test/java/io/opentelemetry/instrumentation/api/semconv/http/internal/HostAddressAndPortExtractorTest.java similarity index 92% rename from instrumentation-api/src/test/java/io/opentelemetry/instrumentation/api/semconv/http/HostAddressAndPortExtractorTest.java rename to instrumentation-api/src/test/java/io/opentelemetry/instrumentation/api/semconv/http/internal/HostAddressAndPortExtractorTest.java index 57a3b45f6504..ad6c25fa737e 100644 --- a/instrumentation-api/src/test/java/io/opentelemetry/instrumentation/api/semconv/http/HostAddressAndPortExtractorTest.java +++ b/instrumentation-api/src/test/java/io/opentelemetry/instrumentation/api/semconv/http/internal/HostAddressAndPortExtractorTest.java @@ -3,7 +3,7 @@ * SPDX-License-Identifier: Apache-2.0 */ -package io.opentelemetry.instrumentation.api.semconv.http; +package io.opentelemetry.instrumentation.api.semconv.http.internal; import static java.util.Collections.emptyList; import static java.util.Collections.singletonList; @@ -12,6 +12,7 @@ import static org.mockito.Mockito.verifyNoMoreInteractions; import static org.mockito.Mockito.when; +import io.opentelemetry.instrumentation.api.semconv.http.HttpCommonAttributesGetter; import io.opentelemetry.instrumentation.api.semconv.network.internal.AddressAndPortExtractor; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; diff --git a/instrumentation/apache-dubbo-2.7/javaagent/src/testDubbo/java/io/opentelemetry/javaagent/instrumentation/apachedubbo/v2_7/DubboAgentTest.java b/instrumentation/apache-dubbo-2.7/javaagent/src/testDubbo/java/io/opentelemetry/javaagent/instrumentation/apachedubbo/v2_7/DubboAgentTest.java index 1a7e2fb42405..d8ffd3ccad4c 100644 --- a/instrumentation/apache-dubbo-2.7/javaagent/src/testDubbo/java/io/opentelemetry/javaagent/instrumentation/apachedubbo/v2_7/DubboAgentTest.java +++ b/instrumentation/apache-dubbo-2.7/javaagent/src/testDubbo/java/io/opentelemetry/javaagent/instrumentation/apachedubbo/v2_7/DubboAgentTest.java @@ -19,4 +19,9 @@ class DubboAgentTest extends AbstractDubboTest { protected InstrumentationExtension testing() { return testing; } + + @Override + protected boolean hasPeerService() { + return true; + } } diff --git a/instrumentation/apache-dubbo-2.7/javaagent/src/testDubbo/java/io/opentelemetry/javaagent/instrumentation/apachedubbo/v2_7/DubboAgentTraceChainTest.java b/instrumentation/apache-dubbo-2.7/javaagent/src/testDubbo/java/io/opentelemetry/javaagent/instrumentation/apachedubbo/v2_7/DubboAgentTraceChainTest.java index bf34ae8633fe..24e7a0ba4220 100644 --- a/instrumentation/apache-dubbo-2.7/javaagent/src/testDubbo/java/io/opentelemetry/javaagent/instrumentation/apachedubbo/v2_7/DubboAgentTraceChainTest.java +++ b/instrumentation/apache-dubbo-2.7/javaagent/src/testDubbo/java/io/opentelemetry/javaagent/instrumentation/apachedubbo/v2_7/DubboAgentTraceChainTest.java @@ -19,4 +19,9 @@ class DubboAgentTraceChainTest extends AbstractDubboTraceChainTest { protected InstrumentationExtension testing() { return testing; } + + @Override + protected boolean hasPeerService() { + return true; + } } diff --git a/instrumentation/apache-dubbo-2.7/library-autoconfigure/src/test/java/io/opentelemetry/instrumentation/apachedubbo/v2_7/DubboTest.java b/instrumentation/apache-dubbo-2.7/library-autoconfigure/src/test/java/io/opentelemetry/instrumentation/apachedubbo/v2_7/DubboTest.java index 84667a51e074..f1171267e165 100644 --- a/instrumentation/apache-dubbo-2.7/library-autoconfigure/src/test/java/io/opentelemetry/instrumentation/apachedubbo/v2_7/DubboTest.java +++ b/instrumentation/apache-dubbo-2.7/library-autoconfigure/src/test/java/io/opentelemetry/instrumentation/apachedubbo/v2_7/DubboTest.java @@ -18,4 +18,9 @@ class DubboTest extends AbstractDubboTest { protected InstrumentationExtension testing() { return testing; } + + @Override + protected boolean hasPeerService() { + return false; + } } diff --git a/instrumentation/apache-dubbo-2.7/library-autoconfigure/src/test/java/io/opentelemetry/instrumentation/apachedubbo/v2_7/DubboTraceChainTest.java b/instrumentation/apache-dubbo-2.7/library-autoconfigure/src/test/java/io/opentelemetry/instrumentation/apachedubbo/v2_7/DubboTraceChainTest.java index dab4e6f03150..24cbe3fe65b7 100644 --- a/instrumentation/apache-dubbo-2.7/library-autoconfigure/src/test/java/io/opentelemetry/instrumentation/apachedubbo/v2_7/DubboTraceChainTest.java +++ b/instrumentation/apache-dubbo-2.7/library-autoconfigure/src/test/java/io/opentelemetry/instrumentation/apachedubbo/v2_7/DubboTraceChainTest.java @@ -18,4 +18,9 @@ class DubboTraceChainTest extends AbstractDubboTraceChainTest { protected InstrumentationExtension testing() { return testing; } + + @Override + protected boolean hasPeerService() { + return false; + } } diff --git a/instrumentation/apache-dubbo-2.7/testing/src/main/java/io/opentelemetry/instrumentation/apachedubbo/v2_7/AbstractDubboTest.java b/instrumentation/apache-dubbo-2.7/testing/src/main/java/io/opentelemetry/instrumentation/apachedubbo/v2_7/AbstractDubboTest.java index 2590bef9ea1d..80958482ed53 100644 --- a/instrumentation/apache-dubbo-2.7/testing/src/main/java/io/opentelemetry/instrumentation/apachedubbo/v2_7/AbstractDubboTest.java +++ b/instrumentation/apache-dubbo-2.7/testing/src/main/java/io/opentelemetry/instrumentation/apachedubbo/v2_7/AbstractDubboTest.java @@ -14,6 +14,7 @@ import static io.opentelemetry.semconv.NetworkAttributes.NETWORK_TYPE; import static io.opentelemetry.semconv.ServerAttributes.SERVER_ADDRESS; import static io.opentelemetry.semconv.ServerAttributes.SERVER_PORT; +import static io.opentelemetry.semconv.incubating.PeerIncubatingAttributes.PEER_SERVICE; import static io.opentelemetry.semconv.incubating.RpcIncubatingAttributes.RPC_METHOD; import static io.opentelemetry.semconv.incubating.RpcIncubatingAttributes.RPC_SERVICE; import static io.opentelemetry.semconv.incubating.RpcIncubatingAttributes.RPC_SYSTEM; @@ -51,6 +52,8 @@ public abstract class AbstractDubboTest { protected abstract InstrumentationExtension testing(); + protected abstract boolean hasPeerService(); + @RegisterExtension static final AutoCleanupExtension cleanup = AutoCleanupExtension.create(); @BeforeAll @@ -141,6 +144,8 @@ void testApacheDubboBase() throws ReflectiveOperationException { RpcIncubatingAttributes.RpcSystemIncubatingValues.APACHE_DUBBO), equalTo(RPC_SERVICE, "org.apache.dubbo.rpc.service.GenericService"), equalTo(RPC_METHOD, "$invoke"), + equalTo( + PEER_SERVICE, hasPeerService() ? "test-peer-service" : null), equalTo(SERVER_ADDRESS, "localhost"), satisfies(SERVER_PORT, k -> k.isInstanceOf(Long.class)), satisfies( @@ -272,6 +277,8 @@ void testApacheDubboTest() RpcIncubatingAttributes.RpcSystemIncubatingValues.APACHE_DUBBO), equalTo(RPC_SERVICE, "org.apache.dubbo.rpc.service.GenericService"), equalTo(RPC_METHOD, "$invokeAsync"), + equalTo( + PEER_SERVICE, hasPeerService() ? "test-peer-service" : null), equalTo(SERVER_ADDRESS, "localhost"), satisfies(SERVER_PORT, k -> k.isInstanceOf(Long.class)), satisfies( diff --git a/instrumentation/apache-dubbo-2.7/testing/src/main/java/io/opentelemetry/instrumentation/apachedubbo/v2_7/AbstractDubboTraceChainTest.java b/instrumentation/apache-dubbo-2.7/testing/src/main/java/io/opentelemetry/instrumentation/apachedubbo/v2_7/AbstractDubboTraceChainTest.java index 16febc283e9a..8c1700d87639 100644 --- a/instrumentation/apache-dubbo-2.7/testing/src/main/java/io/opentelemetry/instrumentation/apachedubbo/v2_7/AbstractDubboTraceChainTest.java +++ b/instrumentation/apache-dubbo-2.7/testing/src/main/java/io/opentelemetry/instrumentation/apachedubbo/v2_7/AbstractDubboTraceChainTest.java @@ -15,6 +15,7 @@ import static io.opentelemetry.semconv.NetworkAttributes.NETWORK_TYPE; import static io.opentelemetry.semconv.ServerAttributes.SERVER_ADDRESS; import static io.opentelemetry.semconv.ServerAttributes.SERVER_PORT; +import static io.opentelemetry.semconv.incubating.PeerIncubatingAttributes.PEER_SERVICE; import static io.opentelemetry.semconv.incubating.RpcIncubatingAttributes.RPC_METHOD; import static io.opentelemetry.semconv.incubating.RpcIncubatingAttributes.RPC_SERVICE; import static io.opentelemetry.semconv.incubating.RpcIncubatingAttributes.RPC_SYSTEM; @@ -63,6 +64,8 @@ static void tearDown() { protected abstract InstrumentationExtension testing(); + protected abstract boolean hasPeerService(); + ReferenceConfig configureClient(int port) { ReferenceConfig reference = new ReferenceConfig<>(); reference.setInterface(HelloService.class); @@ -183,6 +186,8 @@ void testDubboChain() throws ReflectiveOperationException { RpcIncubatingAttributes.RpcSystemIncubatingValues.APACHE_DUBBO), equalTo(RPC_SERVICE, "org.apache.dubbo.rpc.service.GenericService"), equalTo(RPC_METHOD, "$invoke"), + equalTo( + PEER_SERVICE, hasPeerService() ? "test-peer-service" : null), equalTo(SERVER_ADDRESS, "localhost"), satisfies(SERVER_PORT, k -> k.isInstanceOf(Long.class)), satisfies( @@ -217,6 +222,8 @@ void testDubboChain() throws ReflectiveOperationException { RpcIncubatingAttributes.RpcSystemIncubatingValues.APACHE_DUBBO), equalTo(RPC_SERVICE, "org.apache.dubbo.rpc.service.GenericService"), equalTo(RPC_METHOD, "$invoke"), + equalTo( + PEER_SERVICE, hasPeerService() ? "test-peer-service" : null), equalTo(SERVER_ADDRESS, "localhost"), satisfies(SERVER_PORT, k -> k.isInstanceOf(Long.class)), satisfies( @@ -380,6 +387,8 @@ void testDubboChainInJvm() throws ReflectiveOperationException { RpcIncubatingAttributes.RpcSystemIncubatingValues.APACHE_DUBBO), equalTo(RPC_SERVICE, "org.apache.dubbo.rpc.service.GenericService"), equalTo(RPC_METHOD, "$invoke"), + equalTo( + PEER_SERVICE, hasPeerService() ? "test-peer-service" : null), equalTo(SERVER_ADDRESS, "localhost"), satisfies(SERVER_PORT, k -> k.isInstanceOf(Long.class)), satisfies( diff --git a/instrumentation/armeria/armeria-1.3/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/armeria/v1_3/ArmeriaHttp2Test.java b/instrumentation/armeria/armeria-1.3/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/armeria/v1_3/ArmeriaHttp2Test.java index 0c82f9730e70..949fca07c3d9 100644 --- a/instrumentation/armeria/armeria-1.3/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/armeria/v1_3/ArmeriaHttp2Test.java +++ b/instrumentation/armeria/armeria-1.3/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/armeria/v1_3/ArmeriaHttp2Test.java @@ -20,6 +20,7 @@ import static io.opentelemetry.semconv.UrlAttributes.URL_PATH; import static io.opentelemetry.semconv.UrlAttributes.URL_SCHEME; import static io.opentelemetry.semconv.UserAgentAttributes.USER_AGENT_ORIGINAL; +import static io.opentelemetry.semconv.incubating.PeerIncubatingAttributes.PEER_SERVICE; import static org.assertj.core.api.Assertions.assertThat; import com.linecorp.armeria.client.WebClient; @@ -79,7 +80,8 @@ void testHello() throws Exception { equalTo(SERVER_ADDRESS, "127.0.0.1"), equalTo(SERVER_PORT, server2.httpPort()), equalTo(NETWORK_PEER_ADDRESS, "127.0.0.1"), - satisfies(NETWORK_PEER_PORT, val -> val.isInstanceOf(Long.class))), + satisfies(NETWORK_PEER_PORT, val -> val.isInstanceOf(Long.class)), + equalTo(PEER_SERVICE, "test-peer-service")), span -> span.hasName("GET /") .hasKind(SpanKind.SERVER) @@ -109,7 +111,8 @@ void testHello() throws Exception { equalTo(SERVER_ADDRESS, "127.0.0.1"), equalTo(SERVER_PORT, server1.httpPort()), equalTo(NETWORK_PEER_ADDRESS, "127.0.0.1"), - satisfies(NETWORK_PEER_PORT, val -> val.isInstanceOf(Long.class))), + satisfies(NETWORK_PEER_PORT, val -> val.isInstanceOf(Long.class)), + equalTo(PEER_SERVICE, "test-peer-service")), span -> span.hasName("GET /") .hasKind(SpanKind.SERVER) diff --git a/instrumentation/elasticsearch/elasticsearch-api-client-7.16/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/elasticsearch/apiclient/ElasticsearchClientTest.java b/instrumentation/elasticsearch/elasticsearch-api-client-7.16/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/elasticsearch/apiclient/ElasticsearchClientTest.java index 686b55101a40..fd6bd66b7ae4 100644 --- a/instrumentation/elasticsearch/elasticsearch-api-client-7.16/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/elasticsearch/apiclient/ElasticsearchClientTest.java +++ b/instrumentation/elasticsearch/elasticsearch-api-client-7.16/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/elasticsearch/apiclient/ElasticsearchClientTest.java @@ -20,6 +20,7 @@ import static io.opentelemetry.semconv.incubating.DbIncubatingAttributes.DB_OPERATION_NAME; import static io.opentelemetry.semconv.incubating.DbIncubatingAttributes.DB_SYSTEM; import static io.opentelemetry.semconv.incubating.DbIncubatingAttributes.DB_SYSTEM_NAME; +import static io.opentelemetry.semconv.incubating.PeerIncubatingAttributes.PEER_SERVICE; import static org.assertj.core.api.Assertions.assertThat; import co.elastic.clients.elasticsearch.ElasticsearchAsyncClient; @@ -118,6 +119,7 @@ void elasticsearchStatus() throws IOException { equalTo(SERVER_PORT, httpHost.getPort()), equalTo(HTTP_REQUEST_METHOD, "GET"), equalTo(NETWORK_PROTOCOL_VERSION, "1.1"), + equalTo(PEER_SERVICE, "test-peer-service"), equalTo(URL_FULL, httpHost.toURI() + "/"), equalTo(HTTP_RESPONSE_STATUS_CODE, 200L)))); } @@ -159,6 +161,7 @@ void elasticsearchIndex() throws IOException { equalTo(SERVER_PORT, httpHost.getPort()), equalTo(HTTP_REQUEST_METHOD, "PUT"), equalTo(NETWORK_PROTOCOL_VERSION, "1.1"), + equalTo(PEER_SERVICE, "test-peer-service"), equalTo( URL_FULL, httpHost.toURI() + "/test-index/_doc/test-id?timeout=10s"), @@ -220,6 +223,7 @@ void elasticsearchStatusAsync() throws Exception { equalTo(SERVER_PORT, httpHost.getPort()), equalTo(HTTP_REQUEST_METHOD, "GET"), equalTo(NETWORK_PROTOCOL_VERSION, "1.1"), + equalTo(PEER_SERVICE, "test-peer-service"), equalTo(URL_FULL, httpHost.toURI() + "/"), equalTo(HTTP_RESPONSE_STATUS_CODE, 200L)), span -> diff --git a/instrumentation/elasticsearch/elasticsearch-rest-5.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/elasticsearch/rest/v5_0/ElasticsearchRest5Test.java b/instrumentation/elasticsearch/elasticsearch-rest-5.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/elasticsearch/rest/v5_0/ElasticsearchRest5Test.java index aee8594e8f2d..d6790a022017 100644 --- a/instrumentation/elasticsearch/elasticsearch-rest-5.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/elasticsearch/rest/v5_0/ElasticsearchRest5Test.java +++ b/instrumentation/elasticsearch/elasticsearch-rest-5.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/elasticsearch/rest/v5_0/ElasticsearchRest5Test.java @@ -16,6 +16,7 @@ import static io.opentelemetry.semconv.UrlAttributes.URL_FULL; import static io.opentelemetry.semconv.incubating.DbIncubatingAttributes.DB_SYSTEM; import static io.opentelemetry.semconv.incubating.DbIncubatingAttributes.DB_SYSTEM_NAME; +import static io.opentelemetry.semconv.incubating.PeerIncubatingAttributes.PEER_SERVICE; import static org.assertj.core.api.Assertions.assertThat; import com.fasterxml.jackson.databind.ObjectMapper; @@ -117,6 +118,7 @@ void elasticsearchStatus() throws IOException { equalTo(SERVER_PORT, httpHost.getPort()), equalTo(HTTP_REQUEST_METHOD, "GET"), equalTo(NETWORK_PROTOCOL_VERSION, "1.1"), + equalTo(PEER_SERVICE, "test-peer-service"), equalTo(URL_FULL, httpHost.toURI() + "/_cluster/health"), equalTo(HTTP_RESPONSE_STATUS_CODE, 200)))); @@ -191,6 +193,7 @@ public void onFailure(Exception e) { equalTo(SERVER_PORT, httpHost.getPort()), equalTo(HTTP_REQUEST_METHOD, "GET"), equalTo(NETWORK_PROTOCOL_VERSION, "1.1"), + equalTo(PEER_SERVICE, "test-peer-service"), equalTo(URL_FULL, httpHost.toURI() + "/_cluster/health"), equalTo(HTTP_RESPONSE_STATUS_CODE, 200)), span -> diff --git a/instrumentation/elasticsearch/elasticsearch-rest-6.4/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/elasticsearch/rest/v6_4/ElasticsearchRest6Test.java b/instrumentation/elasticsearch/elasticsearch-rest-6.4/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/elasticsearch/rest/v6_4/ElasticsearchRest6Test.java index 4acf889233a2..81739078a37b 100644 --- a/instrumentation/elasticsearch/elasticsearch-rest-6.4/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/elasticsearch/rest/v6_4/ElasticsearchRest6Test.java +++ b/instrumentation/elasticsearch/elasticsearch-rest-6.4/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/elasticsearch/rest/v6_4/ElasticsearchRest6Test.java @@ -16,6 +16,7 @@ import static io.opentelemetry.semconv.UrlAttributes.URL_FULL; import static io.opentelemetry.semconv.incubating.DbIncubatingAttributes.DB_SYSTEM; import static io.opentelemetry.semconv.incubating.DbIncubatingAttributes.DB_SYSTEM_NAME; +import static io.opentelemetry.semconv.incubating.PeerIncubatingAttributes.PEER_SERVICE; import static org.assertj.core.api.Assertions.assertThat; import com.fasterxml.jackson.databind.ObjectMapper; @@ -107,6 +108,7 @@ void elasticsearchStatus() throws IOException { equalTo(SERVER_PORT, httpHost.getPort()), equalTo(HTTP_REQUEST_METHOD, "GET"), equalTo(NETWORK_PROTOCOL_VERSION, "1.1"), + equalTo(PEER_SERVICE, "test-peer-service"), equalTo(URL_FULL, httpHost.toURI() + "/_cluster/health"), equalTo(HTTP_RESPONSE_STATUS_CODE, 200L)))); @@ -181,6 +183,7 @@ public void onFailure(Exception e) { equalTo(SERVER_PORT, httpHost.getPort()), equalTo(HTTP_REQUEST_METHOD, "GET"), equalTo(NETWORK_PROTOCOL_VERSION, "1.1"), + equalTo(PEER_SERVICE, "test-peer-service"), equalTo(URL_FULL, httpHost.toURI() + "/_cluster/health"), equalTo(HTTP_RESPONSE_STATUS_CODE, 200)), span -> diff --git a/instrumentation/elasticsearch/elasticsearch-rest-7.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/elasticsearch/rest/v7_0/ElasticsearchRest7Test.java b/instrumentation/elasticsearch/elasticsearch-rest-7.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/elasticsearch/rest/v7_0/ElasticsearchRest7Test.java index c4747bf7568a..86e0184e4de0 100644 --- a/instrumentation/elasticsearch/elasticsearch-rest-7.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/elasticsearch/rest/v7_0/ElasticsearchRest7Test.java +++ b/instrumentation/elasticsearch/elasticsearch-rest-7.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/elasticsearch/rest/v7_0/ElasticsearchRest7Test.java @@ -17,6 +17,7 @@ import static io.opentelemetry.semconv.UrlAttributes.URL_FULL; import static io.opentelemetry.semconv.incubating.DbIncubatingAttributes.DB_SYSTEM; import static io.opentelemetry.semconv.incubating.DbIncubatingAttributes.DB_SYSTEM_NAME; +import static io.opentelemetry.semconv.incubating.PeerIncubatingAttributes.PEER_SERVICE; import static org.assertj.core.api.Assertions.assertThat; import com.fasterxml.jackson.databind.ObjectMapper; @@ -108,6 +109,7 @@ void elasticsearchStatus() throws Exception { equalTo(SERVER_PORT, httpHost.getPort()), equalTo(HTTP_REQUEST_METHOD, "GET"), equalTo(NETWORK_PROTOCOL_VERSION, "1.1"), + equalTo(PEER_SERVICE, "test-peer-service"), equalTo(URL_FULL, httpHost.toURI() + "/_cluster/health"), equalTo(HTTP_RESPONSE_STATUS_CODE, 200L)))); @@ -185,6 +187,7 @@ public void onFailure(Exception e) { equalTo(SERVER_PORT, httpHost.getPort()), equalTo(HTTP_REQUEST_METHOD, "GET"), equalTo(NETWORK_PROTOCOL_VERSION, "1.1"), + equalTo(PEER_SERVICE, "test-peer-service"), equalTo(URL_FULL, httpHost.toURI() + "/_cluster/health"), equalTo(HTTP_RESPONSE_STATUS_CODE, 200L)), span -> diff --git a/instrumentation/google-http-client-1.19/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/googlehttpclient/AbstractGoogleHttpClientTest.java b/instrumentation/google-http-client-1.19/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/googlehttpclient/AbstractGoogleHttpClientTest.java index cde2e417cfb8..4ba3a8e2f432 100644 --- a/instrumentation/google-http-client-1.19/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/googlehttpclient/AbstractGoogleHttpClientTest.java +++ b/instrumentation/google-http-client-1.19/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/googlehttpclient/AbstractGoogleHttpClientTest.java @@ -15,6 +15,7 @@ import static io.opentelemetry.semconv.ServerAttributes.SERVER_ADDRESS; import static io.opentelemetry.semconv.ServerAttributes.SERVER_PORT; import static io.opentelemetry.semconv.UrlAttributes.URL_FULL; +import static io.opentelemetry.semconv.incubating.PeerIncubatingAttributes.PEER_SERVICE; import com.google.api.client.http.GenericUrl; import com.google.api.client.http.HttpRequest; @@ -111,7 +112,8 @@ void errorTracesWhenExceptionIsNotThrown() throws Exception { equalTo(URL_FULL, uri.toString()), equalTo(HTTP_REQUEST_METHOD, "GET"), equalTo(HTTP_RESPONSE_STATUS_CODE, 500), - equalTo(ERROR_TYPE, "500"))); + equalTo(ERROR_TYPE, "500"), + equalTo(PEER_SERVICE, "test-peer-service"))); testing.waitAndAssertTraces( trace -> diff --git a/instrumentation/hibernate/hibernate-reactive-1.0/hibernate-reactive-2.0-testing/src/main/java/io/opentelemetry/javaagent/instrumentation/hibernate/reactive/v2_0/AbstractHibernateReactiveTest.java b/instrumentation/hibernate/hibernate-reactive-1.0/hibernate-reactive-2.0-testing/src/main/java/io/opentelemetry/javaagent/instrumentation/hibernate/reactive/v2_0/AbstractHibernateReactiveTest.java index 75313bb9a294..3cdb34456c5b 100644 --- a/instrumentation/hibernate/hibernate-reactive-1.0/hibernate-reactive-2.0-testing/src/main/java/io/opentelemetry/javaagent/instrumentation/hibernate/reactive/v2_0/AbstractHibernateReactiveTest.java +++ b/instrumentation/hibernate/hibernate-reactive-1.0/hibernate-reactive-2.0-testing/src/main/java/io/opentelemetry/javaagent/instrumentation/hibernate/reactive/v2_0/AbstractHibernateReactiveTest.java @@ -5,6 +5,7 @@ package io.opentelemetry.javaagent.instrumentation.hibernate.reactive.v2_0; +import static io.opentelemetry.api.common.AttributeKey.stringKey; import static io.opentelemetry.instrumentation.api.internal.SemconvStability.emitStableDatabaseSemconv; import static io.opentelemetry.instrumentation.testing.junit.db.SemconvStabilityUtil.maybeStable; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; @@ -304,7 +305,8 @@ private void assertTrace() { equalTo(maybeStable(DB_OPERATION), "SELECT"), equalTo(maybeStable(DB_SQL_TABLE), "Value"), equalTo(SERVER_ADDRESS, host), - equalTo(SERVER_PORT, port)), + equalTo(SERVER_PORT, port), + equalTo(stringKey("peer.service"), "test-peer-service")), span -> span.hasName("callback") .hasKind(SpanKind.INTERNAL) diff --git a/instrumentation/hibernate/hibernate-reactive-1.0/javaagent/src/hibernateReactive1Test/java/io/opentelemetry/javaagent/instrumentation/hibernate/reactive/v1_0/HibernateReactiveTest.java b/instrumentation/hibernate/hibernate-reactive-1.0/javaagent/src/hibernateReactive1Test/java/io/opentelemetry/javaagent/instrumentation/hibernate/reactive/v1_0/HibernateReactiveTest.java index 46f35502e2b0..4079319ff5b8 100644 --- a/instrumentation/hibernate/hibernate-reactive-1.0/javaagent/src/hibernateReactive1Test/java/io/opentelemetry/javaagent/instrumentation/hibernate/reactive/v1_0/HibernateReactiveTest.java +++ b/instrumentation/hibernate/hibernate-reactive-1.0/javaagent/src/hibernateReactive1Test/java/io/opentelemetry/javaagent/instrumentation/hibernate/reactive/v1_0/HibernateReactiveTest.java @@ -15,6 +15,7 @@ import static io.opentelemetry.semconv.incubating.DbIncubatingAttributes.DB_SQL_TABLE; import static io.opentelemetry.semconv.incubating.DbIncubatingAttributes.DB_STATEMENT; import static io.opentelemetry.semconv.incubating.DbIncubatingAttributes.DB_USER; +import static io.opentelemetry.semconv.incubating.PeerIncubatingAttributes.PEER_SERVICE; import io.opentelemetry.api.trace.Span; import io.opentelemetry.api.trace.SpanKind; @@ -314,6 +315,7 @@ private static void assertTrace() { "select value0_.id as id1_0_0_, value0_.name as name2_0_0_ from Value value0_ where value0_.id=$1"), equalTo(maybeStable(DB_OPERATION), "SELECT"), equalTo(maybeStable(DB_SQL_TABLE), "Value"), + equalTo(PEER_SERVICE, "test-peer-service"), equalTo(SERVER_ADDRESS, host), equalTo(SERVER_PORT, port)), span -> diff --git a/instrumentation/http-url-connection/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/httpurlconnection/HttpUrlConnectionTest.java b/instrumentation/http-url-connection/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/httpurlconnection/HttpUrlConnectionTest.java index cb5c87f0057c..482394f522b3 100644 --- a/instrumentation/http-url-connection/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/httpurlconnection/HttpUrlConnectionTest.java +++ b/instrumentation/http-url-connection/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/httpurlconnection/HttpUrlConnectionTest.java @@ -17,6 +17,7 @@ import static io.opentelemetry.semconv.ServerAttributes.SERVER_ADDRESS; import static io.opentelemetry.semconv.ServerAttributes.SERVER_PORT; import static io.opentelemetry.semconv.UrlAttributes.URL_FULL; +import static io.opentelemetry.semconv.incubating.PeerIncubatingAttributes.PEER_SERVICE; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.catchThrowable; @@ -130,7 +131,8 @@ public void traceRequest(boolean useCache) throws IOException { equalTo(SERVER_PORT, url.getPort()), equalTo(URL_FULL, url.toString()), equalTo(HTTP_REQUEST_METHOD, "GET"), - equalTo(HTTP_RESPONSE_STATUS_CODE, STATUS))); + equalTo(HTTP_RESPONSE_STATUS_CODE, STATUS), + equalTo(PEER_SERVICE, "test-peer-service"))); testing.waitAndAssertTraces( trace -> @@ -175,7 +177,8 @@ public void testBrokenApiUsage() throws IOException { equalTo(SERVER_PORT, url.getPort()), equalTo(URL_FULL, url.toString()), equalTo(HTTP_REQUEST_METHOD, "GET"), - equalTo(HTTP_RESPONSE_STATUS_CODE, STATUS))); + equalTo(HTTP_RESPONSE_STATUS_CODE, STATUS), + equalTo(PEER_SERVICE, "test-peer-service"))); testing.waitAndAssertTraces( trace -> @@ -226,7 +229,8 @@ public void testPostRequest() throws IOException { equalTo(SERVER_PORT, url.getPort()), equalTo(URL_FULL, url.toString()), equalTo(HTTP_REQUEST_METHOD, "POST"), - equalTo(HTTP_RESPONSE_STATUS_CODE, STATUS))); + equalTo(HTTP_RESPONSE_STATUS_CODE, STATUS), + equalTo(PEER_SERVICE, "test-peer-service"))); testing.waitAndAssertTraces( trace -> @@ -279,7 +283,8 @@ public void getOutputStreamShouldTransformGetIntoPost() throws IOException { equalTo(SERVER_PORT, url.getPort()), equalTo(URL_FULL, url.toString()), equalTo(HTTP_REQUEST_METHOD, "POST"), - equalTo(HTTP_RESPONSE_STATUS_CODE, STATUS))); + equalTo(HTTP_RESPONSE_STATUS_CODE, STATUS), + equalTo(PEER_SERVICE, "test-peer-service"))); testing.waitAndAssertTraces( trace -> @@ -321,7 +326,8 @@ public void traceRequestWithConnectionFailure(String scheme) { equalTo(SERVER_PORT, PortUtils.UNUSABLE_PORT), equalTo(URL_FULL, uri), equalTo(HTTP_REQUEST_METHOD, "GET"), - equalTo(ERROR_TYPE, "java.net.ConnectException"))); + equalTo(ERROR_TYPE, "java.net.ConnectException"), + equalTo(PEER_SERVICE, "test-peer-service"))); testing.waitAndAssertTraces( trace -> diff --git a/instrumentation/java-http-client/testing/src/main/java/io/opentelemetry/instrumentation/javahttpclient/AbstractJavaHttpClientTest.java b/instrumentation/java-http-client/testing/src/main/java/io/opentelemetry/instrumentation/javahttpclient/AbstractJavaHttpClientTest.java index 2003da846f94..3060c299231c 100644 --- a/instrumentation/java-http-client/testing/src/main/java/io/opentelemetry/instrumentation/javahttpclient/AbstractJavaHttpClientTest.java +++ b/instrumentation/java-http-client/testing/src/main/java/io/opentelemetry/instrumentation/javahttpclient/AbstractJavaHttpClientTest.java @@ -171,7 +171,7 @@ void cancelRequest() throws InterruptedException { .hasKind(SpanKind.CLIENT) .hasParent(trace.getSpan(0)) .hasStatus(StatusData.error()) - .hasAttributesSatisfyingExactly( + .hasAttributesSatisfying( equalTo(UrlAttributes.URL_FULL, uri.toString()), equalTo(ServerAttributes.SERVER_ADDRESS, uri.getHost()), equalTo(ServerAttributes.SERVER_PORT, uri.getPort()), diff --git a/instrumentation/jdbc/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/jdbc/test/JdbcInstrumentationTest.java b/instrumentation/jdbc/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/jdbc/test/JdbcInstrumentationTest.java index e369d0854bca..673512409336 100644 --- a/instrumentation/jdbc/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/jdbc/test/JdbcInstrumentationTest.java +++ b/instrumentation/jdbc/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/jdbc/test/JdbcInstrumentationTest.java @@ -25,6 +25,7 @@ import static io.opentelemetry.semconv.incubating.DbIncubatingAttributes.DB_STATEMENT; import static io.opentelemetry.semconv.incubating.DbIncubatingAttributes.DB_SYSTEM; import static io.opentelemetry.semconv.incubating.DbIncubatingAttributes.DB_USER; +import static io.opentelemetry.semconv.incubating.PeerIncubatingAttributes.PEER_SERVICE; import static java.util.Arrays.asList; import static org.junit.jupiter.api.Assumptions.assumeTrue; @@ -1108,6 +1109,7 @@ void testGetClientInfoException(String query) throws SQLException { equalTo( DB_CONNECTION_STRING, emitStableDatabaseSemconv() ? null : "testdb://localhost"), + equalTo(PEER_SERVICE, "test-peer-service"), equalTo(SERVER_ADDRESS, "localhost")))); } @@ -1194,6 +1196,7 @@ void testProduceProperSpanName( equalTo(maybeStable(DB_STATEMENT), sanitizedQuery), equalTo(maybeStable(DB_OPERATION), operation), equalTo(maybeStable(DB_SQL_TABLE), table), + equalTo(PEER_SERVICE, "test-peer-service"), equalTo(SERVER_ADDRESS, "localhost")))); } @@ -1317,6 +1320,7 @@ void testHandleRecursiveStatements( equalTo(maybeStable(DB_STATEMENT), "SELECT * FROM table"), equalTo(maybeStable(DB_OPERATION), "SELECT"), equalTo(maybeStable(DB_SQL_TABLE), "table"), + equalTo(PEER_SERVICE, "test-peer-service"), equalTo(SERVER_ADDRESS, "localhost")))); } diff --git a/instrumentation/jedis/jedis-1.4/testing/src/main/java/io/opentelemetry/javaagent/instrumentation/jedis/AbstractJedisTest.java b/instrumentation/jedis/jedis-1.4/testing/src/main/java/io/opentelemetry/javaagent/instrumentation/jedis/AbstractJedisTest.java index ac11a14363a8..40e0d93e60fe 100644 --- a/instrumentation/jedis/jedis-1.4/testing/src/main/java/io/opentelemetry/javaagent/instrumentation/jedis/AbstractJedisTest.java +++ b/instrumentation/jedis/jedis-1.4/testing/src/main/java/io/opentelemetry/javaagent/instrumentation/jedis/AbstractJedisTest.java @@ -12,6 +12,7 @@ import static io.opentelemetry.semconv.incubating.DbIncubatingAttributes.DB_OPERATION; import static io.opentelemetry.semconv.incubating.DbIncubatingAttributes.DB_STATEMENT; import static io.opentelemetry.semconv.incubating.DbIncubatingAttributes.DB_SYSTEM; +import static io.opentelemetry.semconv.incubating.PeerIncubatingAttributes.PEER_SERVICE; import static org.assertj.core.api.Assertions.assertThat; import io.opentelemetry.api.trace.SpanKind; @@ -72,6 +73,7 @@ void setCommand() { equalTo(maybeStable(DB_SYSTEM), "redis"), equalTo(maybeStable(DB_STATEMENT), "SET foo ?"), equalTo(maybeStable(DB_OPERATION), "SET"), + equalTo(PEER_SERVICE, "test-peer-service"), equalTo(SERVER_ADDRESS, host), equalTo(SERVER_PORT, port)))); } @@ -93,6 +95,7 @@ void getCommand() { equalTo(maybeStable(DB_SYSTEM), "redis"), equalTo(maybeStable(DB_STATEMENT), "SET foo ?"), equalTo(maybeStable(DB_OPERATION), "SET"), + equalTo(PEER_SERVICE, "test-peer-service"), equalTo(SERVER_ADDRESS, host), equalTo(SERVER_PORT, port))), trace -> @@ -104,6 +107,7 @@ void getCommand() { equalTo(maybeStable(DB_SYSTEM), "redis"), equalTo(maybeStable(DB_STATEMENT), "GET foo"), equalTo(maybeStable(DB_OPERATION), "GET"), + equalTo(PEER_SERVICE, "test-peer-service"), equalTo(SERVER_ADDRESS, host), equalTo(SERVER_PORT, port)))); } @@ -125,6 +129,7 @@ void commandWithNoArguments() { equalTo(maybeStable(DB_SYSTEM), "redis"), equalTo(maybeStable(DB_STATEMENT), "SET foo ?"), equalTo(maybeStable(DB_OPERATION), "SET"), + equalTo(PEER_SERVICE, "test-peer-service"), equalTo(SERVER_ADDRESS, host), equalTo(SERVER_PORT, port))), trace -> @@ -136,6 +141,7 @@ void commandWithNoArguments() { equalTo(maybeStable(DB_SYSTEM), "redis"), equalTo(maybeStable(DB_STATEMENT), "RANDOMKEY"), equalTo(maybeStable(DB_OPERATION), "RANDOMKEY"), + equalTo(PEER_SERVICE, "test-peer-service"), equalTo(SERVER_ADDRESS, host), equalTo(SERVER_PORT, port)))); } diff --git a/instrumentation/jedis/jedis-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/jedis/v3_0/Jedis30ClientTest.java b/instrumentation/jedis/jedis-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/jedis/v3_0/Jedis30ClientTest.java index cd66b86ca897..f7651d0e9f11 100644 --- a/instrumentation/jedis/jedis-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/jedis/v3_0/Jedis30ClientTest.java +++ b/instrumentation/jedis/jedis-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/jedis/v3_0/Jedis30ClientTest.java @@ -19,6 +19,7 @@ import static io.opentelemetry.semconv.incubating.DbIncubatingAttributes.DB_OPERATION; import static io.opentelemetry.semconv.incubating.DbIncubatingAttributes.DB_STATEMENT; import static io.opentelemetry.semconv.incubating.DbIncubatingAttributes.DB_SYSTEM; +import static io.opentelemetry.semconv.incubating.PeerIncubatingAttributes.PEER_SERVICE; import static org.assertj.core.api.Assertions.assertThat; import io.opentelemetry.api.trace.SpanKind; @@ -86,6 +87,7 @@ void setCommand() { equalTo(maybeStable(DB_SYSTEM), "redis"), equalTo(maybeStable(DB_STATEMENT), "SET foo ?"), equalTo(maybeStable(DB_OPERATION), "SET"), + equalTo(PEER_SERVICE, "test-peer-service"), equalTo(SERVER_ADDRESS, host), equalTo(SERVER_PORT, port), equalTo(NETWORK_TYPE, "ipv4"), @@ -120,6 +122,7 @@ void getCommand() { equalTo(maybeStable(DB_SYSTEM), "redis"), equalTo(maybeStable(DB_STATEMENT), "SET foo ?"), equalTo(maybeStable(DB_OPERATION), "SET"), + equalTo(PEER_SERVICE, "test-peer-service"), equalTo(SERVER_ADDRESS, host), equalTo(SERVER_PORT, port), equalTo(NETWORK_TYPE, "ipv4"), @@ -134,6 +137,7 @@ void getCommand() { equalTo(maybeStable(DB_SYSTEM), "redis"), equalTo(maybeStable(DB_STATEMENT), "GET foo"), equalTo(maybeStable(DB_OPERATION), "GET"), + equalTo(PEER_SERVICE, "test-peer-service"), equalTo(SERVER_ADDRESS, host), equalTo(SERVER_PORT, port), equalTo(NETWORK_TYPE, "ipv4"), @@ -158,6 +162,7 @@ void commandWithNoArguments() { equalTo(maybeStable(DB_SYSTEM), "redis"), equalTo(maybeStable(DB_STATEMENT), "SET foo ?"), equalTo(maybeStable(DB_OPERATION), "SET"), + equalTo(PEER_SERVICE, "test-peer-service"), equalTo(SERVER_ADDRESS, host), equalTo(SERVER_PORT, port), equalTo(NETWORK_TYPE, "ipv4"), @@ -172,6 +177,7 @@ void commandWithNoArguments() { equalTo(maybeStable(DB_SYSTEM), "redis"), equalTo(maybeStable(DB_STATEMENT), "RANDOMKEY"), equalTo(maybeStable(DB_OPERATION), "RANDOMKEY"), + equalTo(PEER_SERVICE, "test-peer-service"), equalTo(SERVER_ADDRESS, host), equalTo(SERVER_PORT, port), equalTo(NETWORK_TYPE, "ipv4"), diff --git a/instrumentation/kubernetes-client-7.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/kubernetesclient/KubernetesClientTest.java b/instrumentation/kubernetes-client-7.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/kubernetesclient/KubernetesClientTest.java index f8096f955a9f..3dcdec9b92b8 100644 --- a/instrumentation/kubernetes-client-7.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/kubernetesclient/KubernetesClientTest.java +++ b/instrumentation/kubernetes-client-7.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/kubernetesclient/KubernetesClientTest.java @@ -13,6 +13,7 @@ import static io.opentelemetry.semconv.ServerAttributes.SERVER_ADDRESS; import static io.opentelemetry.semconv.ServerAttributes.SERVER_PORT; import static io.opentelemetry.semconv.UrlAttributes.URL_FULL; +import static io.opentelemetry.semconv.incubating.PeerIncubatingAttributes.PEER_SERVICE; import static org.assertj.core.api.Assertions.assertThat; import io.kubernetes.client.openapi.ApiCallback; @@ -89,6 +90,7 @@ void synchronousCall() throws ApiException { equalTo(HTTP_RESPONSE_STATUS_CODE, 200), equalTo(SERVER_ADDRESS, "127.0.0.1"), equalTo(SERVER_PORT, mockWebServer.httpPort()), + equalTo(PEER_SERVICE, "test-peer-service"), equalTo( AttributeKey.stringKey("kubernetes-client.namespace"), "namespace"), equalTo(AttributeKey.stringKey("kubernetes-client.name"), "name")))); @@ -136,6 +138,7 @@ void handleErrorsInSyncCall() { equalTo(HTTP_RESPONSE_STATUS_CODE, 451), equalTo(SERVER_ADDRESS, "127.0.0.1"), equalTo(SERVER_PORT, mockWebServer.httpPort()), + equalTo(PEER_SERVICE, "test-peer-service"), equalTo(ERROR_TYPE, "451"), equalTo( AttributeKey.stringKey("kubernetes-client.namespace"), "namespace"), @@ -190,6 +193,7 @@ public void onSuccess( equalTo(HTTP_RESPONSE_STATUS_CODE, 200), equalTo(SERVER_ADDRESS, "127.0.0.1"), equalTo(SERVER_PORT, mockWebServer.httpPort()), + equalTo(PEER_SERVICE, "test-peer-service"), equalTo( AttributeKey.stringKey("kubernetes-client.namespace"), "namespace"), equalTo(AttributeKey.stringKey("kubernetes-client.name"), "name")), @@ -251,6 +255,7 @@ public void onFailure( equalTo(HTTP_RESPONSE_STATUS_CODE, 451), equalTo(SERVER_ADDRESS, "127.0.0.1"), equalTo(SERVER_PORT, mockWebServer.httpPort()), + equalTo(PEER_SERVICE, "test-peer-service"), equalTo(ERROR_TYPE, "451"), equalTo( AttributeKey.stringKey("kubernetes-client.namespace"), "namespace"), diff --git a/instrumentation/kubernetes-client-7.0/javaagent/src/version20Test/java/io/opentelemetry/javaagent/instrumentation/kubernetesclient/KubernetesClientVer20Test.java b/instrumentation/kubernetes-client-7.0/javaagent/src/version20Test/java/io/opentelemetry/javaagent/instrumentation/kubernetesclient/KubernetesClientVer20Test.java index 40aaad78c44b..0a89e46650ea 100644 --- a/instrumentation/kubernetes-client-7.0/javaagent/src/version20Test/java/io/opentelemetry/javaagent/instrumentation/kubernetesclient/KubernetesClientVer20Test.java +++ b/instrumentation/kubernetes-client-7.0/javaagent/src/version20Test/java/io/opentelemetry/javaagent/instrumentation/kubernetesclient/KubernetesClientVer20Test.java @@ -13,6 +13,7 @@ import static io.opentelemetry.semconv.ServerAttributes.SERVER_ADDRESS; import static io.opentelemetry.semconv.ServerAttributes.SERVER_PORT; import static io.opentelemetry.semconv.UrlAttributes.URL_FULL; +import static io.opentelemetry.semconv.incubating.PeerIncubatingAttributes.PEER_SERVICE; import static org.assertj.core.api.Assertions.assertThat; import io.kubernetes.client.openapi.ApiCallback; @@ -93,6 +94,7 @@ void synchronousCall() throws ApiException { equalTo(HTTP_RESPONSE_STATUS_CODE, 200), equalTo(SERVER_ADDRESS, "127.0.0.1"), equalTo(SERVER_PORT, mockWebServer.httpPort()), + equalTo(PEER_SERVICE, "test-peer-service"), equalTo( AttributeKey.stringKey("kubernetes-client.namespace"), "namespace"), equalTo(AttributeKey.stringKey("kubernetes-client.name"), "name")))); @@ -141,6 +143,7 @@ void handleErrorsInSyncCall() { equalTo(SERVER_ADDRESS, "127.0.0.1"), equalTo(SERVER_PORT, mockWebServer.httpPort()), equalTo(ERROR_TYPE, "451"), + equalTo(PEER_SERVICE, "test-peer-service"), equalTo( AttributeKey.stringKey("kubernetes-client.namespace"), "namespace"), equalTo(AttributeKey.stringKey("kubernetes-client.name"), "name")))); @@ -193,6 +196,7 @@ public void onSuccess( equalTo(HTTP_RESPONSE_STATUS_CODE, 200), equalTo(SERVER_ADDRESS, "127.0.0.1"), equalTo(SERVER_PORT, mockWebServer.httpPort()), + equalTo(PEER_SERVICE, "test-peer-service"), equalTo( AttributeKey.stringKey("kubernetes-client.namespace"), "namespace"), equalTo(AttributeKey.stringKey("kubernetes-client.name"), "name")), @@ -254,6 +258,7 @@ public void onFailure( equalTo(SERVER_ADDRESS, "127.0.0.1"), equalTo(SERVER_PORT, mockWebServer.httpPort()), equalTo(ERROR_TYPE, "451"), + equalTo(PEER_SERVICE, "test-peer-service"), equalTo( AttributeKey.stringKey("kubernetes-client.namespace"), "namespace"), equalTo(AttributeKey.stringKey("kubernetes-client.name"), "name")), diff --git a/instrumentation/lettuce/lettuce-4.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/lettuce/v4_0/LettuceAsyncClientTest.java b/instrumentation/lettuce/lettuce-4.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/lettuce/v4_0/LettuceAsyncClientTest.java index 976b555b0172..77e8523cbe6c 100644 --- a/instrumentation/lettuce/lettuce-4.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/lettuce/v4_0/LettuceAsyncClientTest.java +++ b/instrumentation/lettuce/lettuce-4.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/lettuce/v4_0/LettuceAsyncClientTest.java @@ -13,6 +13,7 @@ import static io.opentelemetry.semconv.ServerAttributes.SERVER_PORT; import static io.opentelemetry.semconv.incubating.DbIncubatingAttributes.DB_OPERATION; import static io.opentelemetry.semconv.incubating.DbIncubatingAttributes.DB_SYSTEM; +import static io.opentelemetry.semconv.incubating.PeerIncubatingAttributes.PEER_SERVICE; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.catchException; import static org.assertj.core.api.Assertions.catchThrowable; @@ -154,7 +155,8 @@ void testConnectUsingGetOnConnectionFuture() { .hasAttributesSatisfyingExactly( equalTo(SERVER_ADDRESS, host), equalTo(SERVER_PORT, port), - equalTo(maybeStable(DB_SYSTEM), "redis")))); + equalTo(maybeStable(DB_SYSTEM), "redis"), + equalTo(PEER_SERVICE, "test-peer-service")))); } @Test @@ -182,7 +184,8 @@ void testExceptionInsideTheConnectionFuture() { .hasAttributesSatisfyingExactly( equalTo(SERVER_ADDRESS, host), equalTo(SERVER_PORT, incorrectPort), - equalTo(maybeStable(DB_SYSTEM), "redis")))); + equalTo(maybeStable(DB_SYSTEM), "redis"), + equalTo(PEER_SERVICE, "test-peer-service")))); } @Test diff --git a/instrumentation/lettuce/lettuce-4.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/lettuce/v4_0/LettuceSyncClientTest.java b/instrumentation/lettuce/lettuce-4.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/lettuce/v4_0/LettuceSyncClientTest.java index af620f9ee2ca..1e12e8fa6a1c 100644 --- a/instrumentation/lettuce/lettuce-4.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/lettuce/v4_0/LettuceSyncClientTest.java +++ b/instrumentation/lettuce/lettuce-4.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/lettuce/v4_0/LettuceSyncClientTest.java @@ -11,6 +11,7 @@ import static io.opentelemetry.semconv.ServerAttributes.SERVER_PORT; import static io.opentelemetry.semconv.incubating.DbIncubatingAttributes.DB_OPERATION; import static io.opentelemetry.semconv.incubating.DbIncubatingAttributes.DB_SYSTEM; +import static io.opentelemetry.semconv.incubating.PeerIncubatingAttributes.PEER_SERVICE; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.catchException; @@ -126,7 +127,8 @@ void testConnect() { .hasAttributesSatisfyingExactly( equalTo(SERVER_ADDRESS, host), equalTo(SERVER_PORT, port), - equalTo(maybeStable(DB_SYSTEM), "redis")))); + equalTo(maybeStable(DB_SYSTEM), "redis"), + equalTo(PEER_SERVICE, "test-peer-service")))); } @Test @@ -149,7 +151,8 @@ void testConnectException() { .hasAttributesSatisfyingExactly( equalTo(SERVER_ADDRESS, host), equalTo(SERVER_PORT, incorrectPort), - equalTo(maybeStable(DB_SYSTEM), "redis")))); + equalTo(maybeStable(DB_SYSTEM), "redis"), + equalTo(PEER_SERVICE, "test-peer-service")))); } @Test diff --git a/instrumentation/lettuce/lettuce-5.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/lettuce/v5_0/LettuceAsyncClientTest.java b/instrumentation/lettuce/lettuce-5.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/lettuce/v5_0/LettuceAsyncClientTest.java index 215cfc86f275..1469b0c41fbb 100644 --- a/instrumentation/lettuce/lettuce-5.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/lettuce/v5_0/LettuceAsyncClientTest.java +++ b/instrumentation/lettuce/lettuce-5.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/lettuce/v5_0/LettuceAsyncClientTest.java @@ -15,6 +15,7 @@ import static io.opentelemetry.semconv.incubating.DbIncubatingAttributes.DB_OPERATION; import static io.opentelemetry.semconv.incubating.DbIncubatingAttributes.DB_STATEMENT; import static io.opentelemetry.semconv.incubating.DbIncubatingAttributes.DB_SYSTEM; +import static io.opentelemetry.semconv.incubating.PeerIncubatingAttributes.PEER_SERVICE; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.catchException; import static org.assertj.core.api.Assertions.catchThrowable; @@ -126,7 +127,8 @@ void testConnectUsingGetOnConnectionFuture() throws ExecutionException, Interrup .hasAttributesSatisfyingExactly( equalTo(SERVER_ADDRESS, host), equalTo(SERVER_PORT, port), - equalTo(maybeStable(DB_SYSTEM), "redis")))); + equalTo(maybeStable(DB_SYSTEM), "redis"), + equalTo(PEER_SERVICE, "test-peer-service")))); } @SuppressWarnings("deprecation") // RedisURI constructor @@ -157,7 +159,8 @@ void testConnectExceptionInsideTheConnectionFuture() { .hasAttributesSatisfyingExactly( equalTo(SERVER_ADDRESS, host), equalTo(SERVER_PORT, incorrectPort), - equalTo(maybeStable(DB_SYSTEM), "redis")) + equalTo(maybeStable(DB_SYSTEM), "redis"), + equalTo(PEER_SERVICE, "test-peer-service")) .hasEventsSatisfyingExactly( event -> event diff --git a/instrumentation/lettuce/lettuce-5.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/lettuce/v5_0/LettuceSyncClientTest.java b/instrumentation/lettuce/lettuce-5.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/lettuce/v5_0/LettuceSyncClientTest.java index 50cdd3698a1d..5a6391ed05e6 100644 --- a/instrumentation/lettuce/lettuce-5.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/lettuce/v5_0/LettuceSyncClientTest.java +++ b/instrumentation/lettuce/lettuce-5.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/lettuce/v5_0/LettuceSyncClientTest.java @@ -13,6 +13,7 @@ import static io.opentelemetry.semconv.incubating.DbIncubatingAttributes.DB_OPERATION; import static io.opentelemetry.semconv.incubating.DbIncubatingAttributes.DB_STATEMENT; import static io.opentelemetry.semconv.incubating.DbIncubatingAttributes.DB_SYSTEM; +import static io.opentelemetry.semconv.incubating.PeerIncubatingAttributes.PEER_SERVICE; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.catchException; @@ -95,7 +96,8 @@ void testConnect() { .hasAttributesSatisfyingExactly( equalTo(SERVER_ADDRESS, host), equalTo(SERVER_PORT, port), - equalTo(maybeStable(DB_SYSTEM), "redis")))); + equalTo(maybeStable(DB_SYSTEM), "redis"), + equalTo(PEER_SERVICE, "test-peer-service")))); } @Test @@ -117,7 +119,8 @@ void testConnectException() { .hasAttributesSatisfyingExactly( equalTo(SERVER_ADDRESS, host), equalTo(SERVER_PORT, incorrectPort), - equalTo(maybeStable(DB_SYSTEM), "redis")) + equalTo(maybeStable(DB_SYSTEM), "redis"), + equalTo(PEER_SERVICE, "test-peer-service")) .hasEventsSatisfyingExactly( event -> event diff --git a/instrumentation/netty/netty-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v4_0/client/NettyClientSingletons.java b/instrumentation/netty/netty-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v4_0/client/NettyClientSingletons.java index a95f60f52f69..c5854f4e7583 100644 --- a/instrumentation/netty/netty-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v4_0/client/NettyClientSingletons.java +++ b/instrumentation/netty/netty-4.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v4_0/client/NettyClientSingletons.java @@ -44,7 +44,8 @@ public final class NettyClientSingletons { enabledOrErrorOnly(connectionTelemetryEnabled), enabledOrErrorOnly(sslTelemetryEnabled)); INSTRUMENTER = factory.instrumenter(); - CONNECTION_INSTRUMENTER = factory.createConnectionInstrumenter(); + CONNECTION_INSTRUMENTER = + factory.createConnectionInstrumenter(AgentCommonConfig.get().getPeerServiceResolver()); SSL_INSTRUMENTER = factory.createSslInstrumenter(); } diff --git a/instrumentation/netty/netty-4.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/netty/v4_0/client/Netty40ClientSslTest.java b/instrumentation/netty/netty-4.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/netty/v4_0/client/Netty40ClientSslTest.java index be462f55337f..88ecaf00e40a 100644 --- a/instrumentation/netty/netty-4.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/netty/v4_0/client/Netty40ClientSslTest.java +++ b/instrumentation/netty/netty-4.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/netty/v4_0/client/Netty40ClientSslTest.java @@ -15,6 +15,7 @@ import static io.opentelemetry.semconv.NetworkAttributes.NETWORK_TYPE; import static io.opentelemetry.semconv.ServerAttributes.SERVER_ADDRESS; import static io.opentelemetry.semconv.ServerAttributes.SERVER_PORT; +import static io.opentelemetry.semconv.incubating.PeerIncubatingAttributes.PEER_SERVICE; import static org.assertj.core.api.Assertions.catchThrowable; import io.netty.bootstrap.Bootstrap; @@ -98,6 +99,7 @@ public void shouldFailSslHandshake() { span.hasAttributesSatisfyingExactly( equalTo(NETWORK_TRANSPORT, "tcp"), equalTo(NETWORK_TYPE, "ipv4"), + equalTo(PEER_SERVICE, "test-peer-service"), equalTo(SERVER_ADDRESS, uri.getHost()), equalTo(SERVER_PORT, uri.getPort()), equalTo(NETWORK_PEER_PORT, uri.getPort()), @@ -178,6 +180,7 @@ public void shouldSuccessfullyEstablishSslHandshake() throws Exception { span.hasAttributesSatisfyingExactly( equalTo(NETWORK_TRANSPORT, "tcp"), equalTo(NETWORK_TYPE, "ipv4"), + equalTo(PEER_SERVICE, "test-peer-service"), equalTo(SERVER_ADDRESS, uri.getHost()), equalTo(SERVER_PORT, uri.getPort()), equalTo(NETWORK_PEER_PORT, uri.getPort()), diff --git a/instrumentation/netty/netty-4.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/netty/v4_0/client/Netty40ConnectionSpanTest.java b/instrumentation/netty/netty-4.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/netty/v4_0/client/Netty40ConnectionSpanTest.java index b049e177db47..ba64730f9ca0 100644 --- a/instrumentation/netty/netty-4.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/netty/v4_0/client/Netty40ConnectionSpanTest.java +++ b/instrumentation/netty/netty-4.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/netty/v4_0/client/Netty40ConnectionSpanTest.java @@ -16,6 +16,7 @@ import static io.opentelemetry.semconv.NetworkAttributes.NETWORK_TYPE; import static io.opentelemetry.semconv.ServerAttributes.SERVER_ADDRESS; import static io.opentelemetry.semconv.ServerAttributes.SERVER_PORT; +import static io.opentelemetry.semconv.incubating.PeerIncubatingAttributes.PEER_SERVICE; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.catchThrowable; @@ -108,6 +109,7 @@ void successfulRequest() throws Exception { span.hasAttributesSatisfyingExactly( equalTo(NETWORK_TRANSPORT, "tcp"), equalTo(NETWORK_TYPE, "ipv4"), + equalTo(PEER_SERVICE, "test-peer-service"), equalTo(SERVER_ADDRESS, uri.getHost()), equalTo(SERVER_PORT, uri.getPort()), equalTo(NETWORK_PEER_PORT, uri.getPort()), diff --git a/instrumentation/netty/netty-4.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v4_1/NettyClientSingletons.java b/instrumentation/netty/netty-4.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v4_1/NettyClientSingletons.java index 1f689af81c53..1a568c9ef09d 100644 --- a/instrumentation/netty/netty-4.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v4_1/NettyClientSingletons.java +++ b/instrumentation/netty/netty-4.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/netty/v4_1/NettyClientSingletons.java @@ -45,7 +45,8 @@ public final class NettyClientSingletons { enabledOrErrorOnly(connectionTelemetryEnabled), enabledOrErrorOnly(sslTelemetryEnabled)); INSTRUMENTER = factory.instrumenter(); - CONNECTION_INSTRUMENTER = factory.createConnectionInstrumenter(); + CONNECTION_INSTRUMENTER = + factory.createConnectionInstrumenter(AgentCommonConfig.get().getPeerServiceResolver()); SSL_INSTRUMENTER = factory.createSslInstrumenter(); CLIENT_HANDLER_FACTORY = new NettyClientHandlerFactory( diff --git a/instrumentation/netty/netty-4.1/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/netty/v4_1/Netty41ClientSslTest.java b/instrumentation/netty/netty-4.1/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/netty/v4_1/Netty41ClientSslTest.java index 08a4f5350128..17392b266862 100644 --- a/instrumentation/netty/netty-4.1/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/netty/v4_1/Netty41ClientSslTest.java +++ b/instrumentation/netty/netty-4.1/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/netty/v4_1/Netty41ClientSslTest.java @@ -13,6 +13,7 @@ import static io.opentelemetry.semconv.NetworkAttributes.NETWORK_TYPE; import static io.opentelemetry.semconv.ServerAttributes.SERVER_ADDRESS; import static io.opentelemetry.semconv.ServerAttributes.SERVER_PORT; +import static io.opentelemetry.semconv.incubating.PeerIncubatingAttributes.PEER_SERVICE; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.catchThrowable; @@ -143,7 +144,8 @@ public void testFailSslHandshake() throws Exception { .hasParent(trace.getSpan(0)) .hasAttributesSatisfyingExactly( equalTo(SERVER_ADDRESS, uri.getHost()), - equalTo(SERVER_PORT, uri.getPort())), + equalTo(SERVER_PORT, uri.getPort()), + equalTo(PEER_SERVICE, "test-peer-service")), span -> span.hasName("CONNECT") .hasKind(SpanKind.INTERNAL) @@ -154,7 +156,8 @@ public void testFailSslHandshake() throws Exception { equalTo(SERVER_ADDRESS, uri.getHost()), equalTo(SERVER_PORT, uri.getPort()), equalTo(NETWORK_PEER_PORT, uri.getPort()), - equalTo(NETWORK_PEER_ADDRESS, "127.0.0.1")), + equalTo(NETWORK_PEER_ADDRESS, "127.0.0.1"), + equalTo(PEER_SERVICE, "test-peer-service")), span -> span.hasName("SSL handshake") .hasKind(SpanKind.INTERNAL) @@ -211,7 +214,8 @@ public void testSuccessSslHandshake() throws Exception { .hasParent(trace.getSpan(0)) .hasAttributesSatisfyingExactly( equalTo(SERVER_ADDRESS, uri.getHost()), - equalTo(SERVER_PORT, uri.getPort())), + equalTo(SERVER_PORT, uri.getPort()), + equalTo(PEER_SERVICE, "test-peer-service")), span -> span.hasName("CONNECT") .hasKind(SpanKind.INTERNAL) @@ -222,7 +226,8 @@ public void testSuccessSslHandshake() throws Exception { equalTo(SERVER_ADDRESS, uri.getHost()), equalTo(SERVER_PORT, uri.getPort()), equalTo(NETWORK_PEER_PORT, uri.getPort()), - equalTo(NETWORK_PEER_ADDRESS, "127.0.0.1")), + equalTo(NETWORK_PEER_ADDRESS, "127.0.0.1"), + equalTo(PEER_SERVICE, "test-peer-service")), span -> span.hasName("SSL handshake") .hasKind(SpanKind.INTERNAL) diff --git a/instrumentation/netty/netty-4.1/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/netty/v4_1/Netty41ConnectionSpanTest.java b/instrumentation/netty/netty-4.1/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/netty/v4_1/Netty41ConnectionSpanTest.java index c9a9fdeec41a..6db6d36d1432 100644 --- a/instrumentation/netty/netty-4.1/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/netty/v4_1/Netty41ConnectionSpanTest.java +++ b/instrumentation/netty/netty-4.1/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/netty/v4_1/Netty41ConnectionSpanTest.java @@ -13,6 +13,7 @@ import static io.opentelemetry.semconv.NetworkAttributes.NETWORK_TYPE; import static io.opentelemetry.semconv.ServerAttributes.SERVER_ADDRESS; import static io.opentelemetry.semconv.ServerAttributes.SERVER_PORT; +import static io.opentelemetry.semconv.incubating.PeerIncubatingAttributes.PEER_SERVICE; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.catchThrowable; @@ -126,7 +127,8 @@ void testSuccessfulRequest() throws Exception { .hasParent(trace.getSpan(0)) .hasAttributesSatisfyingExactly( equalTo(SERVER_ADDRESS, uri.getHost()), - equalTo(SERVER_PORT, uri.getPort())), + equalTo(SERVER_PORT, uri.getPort()), + equalTo(PEER_SERVICE, "test-peer-service")), span -> span.hasName("CONNECT") .hasKind(SpanKind.INTERNAL) @@ -137,7 +139,8 @@ void testSuccessfulRequest() throws Exception { equalTo(SERVER_ADDRESS, uri.getHost()), equalTo(SERVER_PORT, uri.getPort()), equalTo(NETWORK_PEER_PORT, uri.getPort()), - equalTo(NETWORK_PEER_ADDRESS, "127.0.0.1")), + equalTo(NETWORK_PEER_ADDRESS, "127.0.0.1"), + equalTo(PEER_SERVICE, "test-peer-service")), span -> span.hasName("GET").hasKind(SpanKind.CLIENT).hasParent(trace.getSpan(0)), span -> span.hasName("test-http-server") @@ -167,7 +170,8 @@ void testFailingRequest() throws Exception { .hasParent(trace.getSpan(0)) .hasAttributesSatisfyingExactly( equalTo(SERVER_ADDRESS, uri.getHost()), - equalTo(SERVER_PORT, uri.getPort())), + equalTo(SERVER_PORT, uri.getPort()), + equalTo(PEER_SERVICE, "test-peer-service")), span -> span.hasName("CONNECT") .hasKind(SpanKind.INTERNAL) @@ -195,6 +199,7 @@ void testFailingRequest() throws Exception { k -> k.satisfiesAnyOf( v -> assertThat(v).isEqualTo("127.0.0.1"), - v -> assertThat(v).isNull()))))); + v -> assertThat(v).isNull())), + equalTo(PEER_SERVICE, "test-peer-service")))); } } diff --git a/instrumentation/netty/netty-common-4.0/library/src/main/java/io/opentelemetry/instrumentation/netty/common/v4_0/internal/client/NettyClientInstrumenterFactory.java b/instrumentation/netty/netty-common-4.0/library/src/main/java/io/opentelemetry/instrumentation/netty/common/v4_0/internal/client/NettyClientInstrumenterFactory.java index b906cb041b93..c02d376ba8fd 100644 --- a/instrumentation/netty/netty-common-4.0/library/src/main/java/io/opentelemetry/instrumentation/netty/common/v4_0/internal/client/NettyClientInstrumenterFactory.java +++ b/instrumentation/netty/netty-common-4.0/library/src/main/java/io/opentelemetry/instrumentation/netty/common/v4_0/internal/client/NettyClientInstrumenterFactory.java @@ -8,6 +8,8 @@ import io.netty.channel.Channel; import io.netty.handler.codec.http.HttpResponse; import io.opentelemetry.instrumentation.api.incubator.builder.internal.DefaultHttpClientInstrumenterBuilder; +import io.opentelemetry.instrumentation.api.incubator.semconv.http.HttpClientPeerServiceAttributesExtractor; +import io.opentelemetry.instrumentation.api.incubator.semconv.net.PeerServiceResolver; import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter; import io.opentelemetry.instrumentation.api.instrumenter.InstrumenterBuilder; import io.opentelemetry.instrumentation.api.instrumenter.SpanKindExtractor; @@ -16,6 +18,7 @@ import io.opentelemetry.instrumentation.api.semconv.network.ServerAttributesExtractor; import io.opentelemetry.instrumentation.netty.common.internal.NettyConnectionRequest; import io.opentelemetry.instrumentation.netty.common.v4_0.HttpRequestAndChannel; +import javax.annotation.Nullable; /** * This class is internal and is hence not for public use. Its APIs are unstable and can change at @@ -40,7 +43,8 @@ public Instrumenter instrumenter() { return builder.build(); } - public NettyConnectionInstrumenter createConnectionInstrumenter() { + public NettyConnectionInstrumenter createConnectionInstrumenter( + @Nullable PeerServiceResolver peerServiceResolver) { if (connectionTelemetryState == NettyConnectionInstrumentationFlag.DISABLED) { return NoopConnectionInstrumenter.INSTANCE; } @@ -64,6 +68,11 @@ public NettyConnectionInstrumenter createConnectionInstrumenter() { builder.addAttributesExtractor(HttpClientAttributesExtractor.create(getter)); } + if (peerServiceResolver != null) { + builder.addAttributesExtractor( + HttpClientPeerServiceAttributesExtractor.create(getter, peerServiceResolver)); + } + Instrumenter instrumenter = builder.buildInstrumenter( connectionTelemetryFullyEnabled diff --git a/instrumentation/opensearch/opensearch-java-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/opensearch/v3_0/AbstractOpenSearchTest.java b/instrumentation/opensearch/opensearch-java-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/opensearch/v3_0/AbstractOpenSearchTest.java index 2dd524e1ac96..63d522fe8c36 100644 --- a/instrumentation/opensearch/opensearch-java-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/opensearch/v3_0/AbstractOpenSearchTest.java +++ b/instrumentation/opensearch/opensearch-java-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/opensearch/v3_0/AbstractOpenSearchTest.java @@ -19,6 +19,7 @@ import static io.opentelemetry.semconv.incubating.DbIncubatingAttributes.DB_OPERATION; import static io.opentelemetry.semconv.incubating.DbIncubatingAttributes.DB_STATEMENT; import static io.opentelemetry.semconv.incubating.DbIncubatingAttributes.DB_SYSTEM; +import static io.opentelemetry.semconv.incubating.PeerIncubatingAttributes.PEER_SERVICE; import static org.assertj.core.api.Assertions.assertThat; import io.opentelemetry.api.trace.SpanKind; @@ -105,7 +106,8 @@ void shouldGetStatusWithTraces() throws IOException { equalTo(SERVER_PORT, httpHost.getPort()), equalTo(HTTP_REQUEST_METHOD, "GET"), equalTo(URL_FULL, httpHost + "/_cluster/health"), - equalTo(HTTP_RESPONSE_STATUS_CODE, 200L)))); + equalTo(HTTP_RESPONSE_STATUS_CODE, 200L), + equalTo(PEER_SERVICE, "test-peer-service")))); } @Test @@ -151,7 +153,8 @@ void shouldGetStatusAsyncWithTraces() throws Exception { equalTo(SERVER_PORT, httpHost.getPort()), equalTo(HTTP_REQUEST_METHOD, "GET"), equalTo(URL_FULL, httpHost + "/_cluster/health"), - equalTo(HTTP_RESPONSE_STATUS_CODE, 200L)), + equalTo(HTTP_RESPONSE_STATUS_CODE, 200L), + equalTo(PEER_SERVICE, "test-peer-service")), span -> span.hasName("callback") .hasKind(SpanKind.INTERNAL) diff --git a/instrumentation/opensearch/opensearch-java-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/opensearch/v3_0/OpenSearchAwsSdk2TransportTest.java b/instrumentation/opensearch/opensearch-java-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/opensearch/v3_0/OpenSearchAwsSdk2TransportTest.java index b97b6f97aaa8..13999ba6ad43 100644 --- a/instrumentation/opensearch/opensearch-java-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/opensearch/v3_0/OpenSearchAwsSdk2TransportTest.java +++ b/instrumentation/opensearch/opensearch-java-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/opensearch/v3_0/OpenSearchAwsSdk2TransportTest.java @@ -18,6 +18,7 @@ import static io.opentelemetry.semconv.incubating.DbIncubatingAttributes.DB_OPERATION; import static io.opentelemetry.semconv.incubating.DbIncubatingAttributes.DB_STATEMENT; import static io.opentelemetry.semconv.incubating.DbIncubatingAttributes.DB_SYSTEM; +import static io.opentelemetry.semconv.incubating.PeerIncubatingAttributes.PEER_SERVICE; import static org.assertj.core.api.Assertions.assertThat; import io.opentelemetry.api.trace.SpanKind; @@ -200,7 +201,8 @@ void shouldGetStatusAsyncWithTraces() throws Exception { NETWORK_PEER_PORT, httpHost.getPort()), // Netty 4.1 Instrumentation collects // NETWORK_PEER_PORT - equalTo(HTTP_RESPONSE_STATUS_CODE, 200L)), + equalTo(HTTP_RESPONSE_STATUS_CODE, 200L), + equalTo(PEER_SERVICE, "test-peer-service")), span -> span.hasName("callback") .hasKind(SpanKind.INTERNAL) diff --git a/instrumentation/opensearch/opensearch-rest-common/testing/src/main/java/io/opentelemetry/javaagent/instrumentation/opensearch/rest/AbstractOpenSearchRestTest.java b/instrumentation/opensearch/opensearch-rest-common/testing/src/main/java/io/opentelemetry/javaagent/instrumentation/opensearch/rest/AbstractOpenSearchRestTest.java index e86b67342630..70e48d04de5e 100644 --- a/instrumentation/opensearch/opensearch-rest-common/testing/src/main/java/io/opentelemetry/javaagent/instrumentation/opensearch/rest/AbstractOpenSearchRestTest.java +++ b/instrumentation/opensearch/opensearch-rest-common/testing/src/main/java/io/opentelemetry/javaagent/instrumentation/opensearch/rest/AbstractOpenSearchRestTest.java @@ -19,6 +19,7 @@ import static io.opentelemetry.semconv.incubating.DbIncubatingAttributes.DB_OPERATION; import static io.opentelemetry.semconv.incubating.DbIncubatingAttributes.DB_STATEMENT; import static io.opentelemetry.semconv.incubating.DbIncubatingAttributes.DB_SYSTEM; +import static io.opentelemetry.semconv.incubating.PeerIncubatingAttributes.PEER_SERVICE; import static org.assertj.core.api.Assertions.assertThat; import io.opentelemetry.api.trace.SpanKind; @@ -99,6 +100,7 @@ void shouldGetStatusWithTraces() throws IOException { equalTo(SERVER_ADDRESS, httpHost.getHost()), equalTo(SERVER_PORT, httpHost.getPort()), equalTo(HTTP_REQUEST_METHOD, "GET"), + equalTo(PEER_SERVICE, "test-peer-service"), equalTo(URL_FULL, httpHost + "/_cluster/health"), equalTo(HTTP_RESPONSE_STATUS_CODE, 200L)))); } @@ -169,6 +171,7 @@ public void onFailure(Exception e) { equalTo(SERVER_ADDRESS, httpHost.getHost()), equalTo(SERVER_PORT, httpHost.getPort()), equalTo(HTTP_REQUEST_METHOD, "GET"), + equalTo(PEER_SERVICE, "test-peer-service"), equalTo(URL_FULL, httpHost + "/_cluster/health"), equalTo(HTTP_RESPONSE_STATUS_CODE, 200L)), span -> diff --git a/instrumentation/r2dbc-1.0/library/src/test/java/io/opentelemetry/instrumentation/r2dbc/v1_0/R2dbcStatementTest.java b/instrumentation/r2dbc-1.0/library/src/test/java/io/opentelemetry/instrumentation/r2dbc/v1_0/R2dbcStatementTest.java index 6e57459ee1e9..019bfb535afa 100644 --- a/instrumentation/r2dbc-1.0/library/src/test/java/io/opentelemetry/instrumentation/r2dbc/v1_0/R2dbcStatementTest.java +++ b/instrumentation/r2dbc-1.0/library/src/test/java/io/opentelemetry/instrumentation/r2dbc/v1_0/R2dbcStatementTest.java @@ -5,11 +5,16 @@ package io.opentelemetry.instrumentation.r2dbc.v1_0; +import io.opentelemetry.instrumentation.api.incubator.semconv.net.PeerServiceAttributesExtractor; +import io.opentelemetry.instrumentation.api.incubator.semconv.net.PeerServiceResolver; +import io.opentelemetry.instrumentation.r2dbc.v1_0.internal.R2dbcNetAttributesGetter; import io.opentelemetry.instrumentation.reactor.v3_1.ContextPropagationOperator; import io.opentelemetry.instrumentation.testing.junit.InstrumentationExtension; import io.opentelemetry.instrumentation.testing.junit.LibraryInstrumentationExtension; import io.r2dbc.spi.ConnectionFactory; import io.r2dbc.spi.ConnectionFactoryOptions; +import java.util.HashMap; +import java.util.Map; import org.junit.jupiter.api.AfterAll; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.extension.RegisterExtension; @@ -39,7 +44,17 @@ void stop() { @Override protected ConnectionFactory createProxyConnectionFactory( ConnectionFactoryOptions connectionFactoryOptions) { - return R2dbcTelemetry.create(testing.getOpenTelemetry()) + // Create peer service mapping for testing + Map peerServiceMapping = new HashMap<>(); + peerServiceMapping.put("127.0.0.1", "test-peer-service"); + peerServiceMapping.put("localhost", "test-peer-service"); + peerServiceMapping.put("192.0.2.1", "test-peer-service"); + + return R2dbcTelemetry.builder(testing.getOpenTelemetry()) + .addAttributesExtractor( + PeerServiceAttributesExtractor.create( + R2dbcNetAttributesGetter.INSTANCE, PeerServiceResolver.create(peerServiceMapping))) + .build() .wrapConnectionFactory( super.createProxyConnectionFactory(connectionFactoryOptions), connectionFactoryOptions); } diff --git a/instrumentation/r2dbc-1.0/testing/src/main/java/io/opentelemetry/instrumentation/r2dbc/v1_0/AbstractR2dbcStatementTest.java b/instrumentation/r2dbc-1.0/testing/src/main/java/io/opentelemetry/instrumentation/r2dbc/v1_0/AbstractR2dbcStatementTest.java index 6c8e5477e460..8c5751af1aeb 100644 --- a/instrumentation/r2dbc-1.0/testing/src/main/java/io/opentelemetry/instrumentation/r2dbc/v1_0/AbstractR2dbcStatementTest.java +++ b/instrumentation/r2dbc-1.0/testing/src/main/java/io/opentelemetry/instrumentation/r2dbc/v1_0/AbstractR2dbcStatementTest.java @@ -17,6 +17,7 @@ import static io.opentelemetry.semconv.incubating.DbIncubatingAttributes.DB_STATEMENT; import static io.opentelemetry.semconv.incubating.DbIncubatingAttributes.DB_SYSTEM; import static io.opentelemetry.semconv.incubating.DbIncubatingAttributes.DB_USER; +import static io.opentelemetry.semconv.incubating.PeerIncubatingAttributes.PEER_SERVICE; import static io.r2dbc.spi.ConnectionFactoryOptions.CONNECT_TIMEOUT; import static io.r2dbc.spi.ConnectionFactoryOptions.DATABASE; import static io.r2dbc.spi.ConnectionFactoryOptions.DRIVER; @@ -181,6 +182,7 @@ void testQueries(Parameter parameter) { equalTo(maybeStable(DB_STATEMENT), parameter.expectedStatement), equalTo(maybeStable(DB_OPERATION), parameter.operation), equalTo(maybeStable(DB_SQL_TABLE), parameter.table), + equalTo(PEER_SERVICE, "test-peer-service"), equalTo(SERVER_ADDRESS, container.getHost()), equalTo(SERVER_PORT, port)), span -> diff --git a/instrumentation/reactor/reactor-netty/reactor-netty-0.9/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/reactornetty/v0_9/ReactorNettyConnectionSpanTest.java b/instrumentation/reactor/reactor-netty/reactor-netty-0.9/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/reactornetty/v0_9/ReactorNettyConnectionSpanTest.java index d6789865c1ee..6f613cc937f5 100644 --- a/instrumentation/reactor/reactor-netty/reactor-netty-0.9/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/reactornetty/v0_9/ReactorNettyConnectionSpanTest.java +++ b/instrumentation/reactor/reactor-netty/reactor-netty-0.9/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/reactornetty/v0_9/ReactorNettyConnectionSpanTest.java @@ -16,6 +16,7 @@ import static io.opentelemetry.semconv.NetworkAttributes.NETWORK_TYPE; import static io.opentelemetry.semconv.ServerAttributes.SERVER_ADDRESS; import static io.opentelemetry.semconv.ServerAttributes.SERVER_PORT; +import static io.opentelemetry.semconv.incubating.PeerIncubatingAttributes.PEER_SERVICE; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.catchThrowable; @@ -82,7 +83,8 @@ void testSuccessfulRequest() { .hasParent(trace.getSpan(0)) .hasAttributesSatisfyingExactly( equalTo(SERVER_ADDRESS, "localhost"), - equalTo(SERVER_PORT, server.httpPort())), + equalTo(SERVER_PORT, server.httpPort()), + equalTo(PEER_SERVICE, "test-peer-service")), span -> span.hasName("CONNECT") .hasKind(INTERNAL) @@ -93,7 +95,8 @@ void testSuccessfulRequest() { equalTo(SERVER_ADDRESS, "localhost"), equalTo(SERVER_PORT, server.httpPort()), equalTo(NETWORK_PEER_ADDRESS, "127.0.0.1"), - satisfies(NETWORK_PEER_PORT, AbstractLongAssert::isNotNegative)), + satisfies(NETWORK_PEER_PORT, AbstractLongAssert::isNotNegative), + equalTo(PEER_SERVICE, "test-peer-service")), span -> span.hasName("GET").hasKind(CLIENT).hasParent(trace.getSpan(0)), span -> span.hasName("test-http-server").hasKind(SERVER).hasParent(trace.getSpan(3)))); @@ -140,7 +143,8 @@ void testFailingRequest() { .hasParent(trace.getSpan(0)) .hasAttributesSatisfyingExactly( equalTo(SERVER_ADDRESS, "localhost"), - equalTo(SERVER_PORT, PortUtils.UNUSABLE_PORT)), + equalTo(SERVER_PORT, PortUtils.UNUSABLE_PORT), + equalTo(PEER_SERVICE, "test-peer-service")), span -> span.hasName("CONNECT") .hasKind(INTERNAL) @@ -155,6 +159,7 @@ void testFailingRequest() { satisfies(NETWORK_PEER_ADDRESS, val -> val.isIn(null, "127.0.0.1")), satisfies( NETWORK_PEER_PORT, - val -> val.isIn(null, (long) PortUtils.UNUSABLE_PORT))))); + val -> val.isIn(null, (long) PortUtils.UNUSABLE_PORT)), + equalTo(PEER_SERVICE, "test-peer-service")))); } } diff --git a/instrumentation/reactor/reactor-netty/reactor-netty-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/reactornetty/v1_0/ReactorNettySingletons.java b/instrumentation/reactor/reactor-netty/reactor-netty-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/reactornetty/v1_0/ReactorNettySingletons.java index a16f5ff4736d..c8283e86c062 100644 --- a/instrumentation/reactor/reactor-netty/reactor-netty-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/reactornetty/v1_0/ReactorNettySingletons.java +++ b/instrumentation/reactor/reactor-netty/reactor-netty-1.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/reactornetty/v1_0/ReactorNettySingletons.java @@ -55,7 +55,9 @@ public final class ReactorNettySingletons { ? NettyConnectionInstrumentationFlag.ENABLED : NettyConnectionInstrumentationFlag.DISABLED, NettyConnectionInstrumentationFlag.DISABLED); - CONNECTION_INSTRUMENTER = instrumenterFactory.createConnectionInstrumenter(); + CONNECTION_INSTRUMENTER = + instrumenterFactory.createConnectionInstrumenter( + AgentCommonConfig.get().getPeerServiceResolver()); } public static Instrumenter instrumenter() { diff --git a/instrumentation/reactor/reactor-netty/reactor-netty-1.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/reactornetty/v1_0/AbstractReactorNettyHttpClientTest.java b/instrumentation/reactor/reactor-netty/reactor-netty-1.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/reactornetty/v1_0/AbstractReactorNettyHttpClientTest.java index eeaf01d24c6c..ad04f0574153 100644 --- a/instrumentation/reactor/reactor-netty/reactor-netty-1.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/reactornetty/v1_0/AbstractReactorNettyHttpClientTest.java +++ b/instrumentation/reactor/reactor-netty/reactor-netty-1.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/reactornetty/v1_0/AbstractReactorNettyHttpClientTest.java @@ -16,6 +16,7 @@ import static io.opentelemetry.semconv.ServerAttributes.SERVER_ADDRESS; import static io.opentelemetry.semconv.ServerAttributes.SERVER_PORT; import static io.opentelemetry.semconv.UrlAttributes.URL_FULL; +import static io.opentelemetry.semconv.incubating.PeerIncubatingAttributes.PEER_SERVICE; import static org.assertj.core.api.Assertions.catchThrowable; import io.netty.handler.codec.http.HttpMethod; @@ -315,7 +316,8 @@ void shouldEndSpanOnMonoTimeout() { equalTo(URL_FULL, uri.toString()), equalTo(SERVER_ADDRESS, "localhost"), equalTo(SERVER_PORT, uri.getPort()), - equalTo(ERROR_TYPE, "cancelled")), + equalTo(ERROR_TYPE, "cancelled"), + equalTo(PEER_SERVICE, "test-peer-service")), span -> span.hasName("test-http-server") .hasKind(SpanKind.SERVER) diff --git a/instrumentation/reactor/reactor-netty/reactor-netty-1.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/reactornetty/v1_0/ReactorNettyBaseUrlOnlyTest.java b/instrumentation/reactor/reactor-netty/reactor-netty-1.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/reactornetty/v1_0/ReactorNettyBaseUrlOnlyTest.java index d3585128b12c..03ed5e2fc8f5 100644 --- a/instrumentation/reactor/reactor-netty/reactor-netty-1.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/reactornetty/v1_0/ReactorNettyBaseUrlOnlyTest.java +++ b/instrumentation/reactor/reactor-netty/reactor-netty-1.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/reactornetty/v1_0/ReactorNettyBaseUrlOnlyTest.java @@ -19,6 +19,7 @@ import static io.opentelemetry.semconv.ServerAttributes.SERVER_ADDRESS; import static io.opentelemetry.semconv.ServerAttributes.SERVER_PORT; import static io.opentelemetry.semconv.UrlAttributes.URL_FULL; +import static io.opentelemetry.semconv.incubating.PeerIncubatingAttributes.PEER_SERVICE; import static org.assertj.core.api.Assertions.assertThat; import io.opentelemetry.api.GlobalOpenTelemetry; @@ -119,6 +120,7 @@ void testSuccessfulRequest() { equalTo(URL_FULL, uri + "/"), equalTo(HTTP_RESPONSE_STATUS_CODE, 200), equalTo(NETWORK_PROTOCOL_VERSION, "1.1"), + equalTo(PEER_SERVICE, "test-peer-service"), equalTo(SERVER_ADDRESS, "localhost"), equalTo(SERVER_PORT, server.httpPort()), equalTo(NETWORK_PEER_ADDRESS, "127.0.0.1"), diff --git a/instrumentation/reactor/reactor-netty/reactor-netty-1.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/reactornetty/v1_0/ReactorNettyClientSslTest.java b/instrumentation/reactor/reactor-netty/reactor-netty-1.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/reactornetty/v1_0/ReactorNettyClientSslTest.java index 1083e860b29a..43a0c6fef59d 100644 --- a/instrumentation/reactor/reactor-netty/reactor-netty-1.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/reactornetty/v1_0/ReactorNettyClientSslTest.java +++ b/instrumentation/reactor/reactor-netty/reactor-netty-1.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/reactornetty/v1_0/ReactorNettyClientSslTest.java @@ -26,6 +26,7 @@ import static io.opentelemetry.semconv.ServerAttributes.SERVER_ADDRESS; import static io.opentelemetry.semconv.ServerAttributes.SERVER_PORT; import static io.opentelemetry.semconv.UrlAttributes.URL_FULL; +import static io.opentelemetry.semconv.incubating.PeerIncubatingAttributes.PEER_SERVICE; import static org.assertj.core.api.Assertions.catchThrowable; import io.netty.handler.ssl.SslContextBuilder; @@ -104,6 +105,7 @@ void shouldFailSslHandshake() throws SSLException { .hasAttributesSatisfyingExactly( equalTo(HTTP_REQUEST_METHOD, "GET"), equalTo(URL_FULL, uri), + equalTo(PEER_SERVICE, "test-peer-service"), equalTo(SERVER_ADDRESS, "localhost"), equalTo(SERVER_PORT, server.httpsPort()), equalTo(ERROR_TYPE, SSLHandshakeException.class.getCanonicalName())), @@ -112,6 +114,7 @@ void shouldFailSslHandshake() throws SSLException { .hasKind(INTERNAL) .hasParent(trace.getSpan(0)) .hasAttributesSatisfyingExactly( + equalTo(PEER_SERVICE, "test-peer-service"), equalTo(SERVER_ADDRESS, "localhost"), equalTo(SERVER_PORT, server.httpsPort())), span -> @@ -121,6 +124,7 @@ void shouldFailSslHandshake() throws SSLException { .hasAttributesSatisfyingExactly( equalTo(NETWORK_TRANSPORT, "tcp"), equalTo(NETWORK_TYPE, "ipv4"), + equalTo(PEER_SERVICE, "test-peer-service"), equalTo(SERVER_ADDRESS, "localhost"), equalTo(SERVER_PORT, server.httpsPort()), equalTo(NETWORK_PEER_ADDRESS, "127.0.0.1"), @@ -167,6 +171,7 @@ void shouldSuccessfullyEstablishSslHandshake() throws SSLException { .hasKind(INTERNAL) .hasParent(trace.getSpan(0)) .hasAttributesSatisfyingExactly( + equalTo(PEER_SERVICE, "test-peer-service"), equalTo(SERVER_ADDRESS, "localhost"), equalTo(SERVER_PORT, server.httpsPort())), span -> @@ -176,6 +181,7 @@ void shouldSuccessfullyEstablishSslHandshake() throws SSLException { .hasAttributesSatisfyingExactly( equalTo(NETWORK_TRANSPORT, "tcp"), equalTo(NETWORK_TYPE, "ipv4"), + equalTo(PEER_SERVICE, "test-peer-service"), equalTo(SERVER_ADDRESS, "localhost"), equalTo(SERVER_PORT, server.httpsPort()), equalTo(NETWORK_PEER_ADDRESS, "127.0.0.1"), @@ -198,6 +204,7 @@ void shouldSuccessfullyEstablishSslHandshake() throws SSLException { equalTo(URL_FULL, uri), equalTo(NETWORK_PROTOCOL_VERSION, "1.1"), equalTo(HTTP_RESPONSE_STATUS_CODE, 200), + equalTo(PEER_SERVICE, "test-peer-service"), equalTo(SERVER_ADDRESS, "localhost"), equalTo(SERVER_PORT, server.httpsPort()), equalTo(NETWORK_PEER_ADDRESS, "127.0.0.1"), diff --git a/instrumentation/reactor/reactor-netty/reactor-netty-1.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/reactornetty/v1_0/ReactorNettyConnectionSpanTest.java b/instrumentation/reactor/reactor-netty/reactor-netty-1.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/reactornetty/v1_0/ReactorNettyConnectionSpanTest.java index 84c9e16ad67e..ea159f45e5ff 100644 --- a/instrumentation/reactor/reactor-netty/reactor-netty-1.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/reactornetty/v1_0/ReactorNettyConnectionSpanTest.java +++ b/instrumentation/reactor/reactor-netty/reactor-netty-1.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/reactornetty/v1_0/ReactorNettyConnectionSpanTest.java @@ -22,6 +22,7 @@ import static io.opentelemetry.semconv.ServerAttributes.SERVER_ADDRESS; import static io.opentelemetry.semconv.ServerAttributes.SERVER_PORT; import static io.opentelemetry.semconv.UrlAttributes.URL_FULL; +import static io.opentelemetry.semconv.incubating.PeerIncubatingAttributes.PEER_SERVICE; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.catchThrowable; @@ -89,7 +90,8 @@ void testSuccessfulRequest() { .hasParent(trace.getSpan(0)) .hasAttributesSatisfyingExactly( equalTo(SERVER_ADDRESS, "localhost"), - equalTo(SERVER_PORT, server.httpPort())), + equalTo(SERVER_PORT, server.httpPort()), + equalTo(PEER_SERVICE, "test-peer-service")), span -> span.hasName("CONNECT") .hasKind(INTERNAL) @@ -100,7 +102,8 @@ void testSuccessfulRequest() { equalTo(SERVER_ADDRESS, "localhost"), equalTo(SERVER_PORT, server.httpPort()), equalTo(NETWORK_PEER_ADDRESS, "127.0.0.1"), - satisfies(NETWORK_PEER_PORT, AbstractLongAssert::isNotNegative)), + satisfies(NETWORK_PEER_PORT, AbstractLongAssert::isNotNegative), + equalTo(PEER_SERVICE, "test-peer-service")), span -> span.hasName("GET") .hasKind(CLIENT) @@ -110,6 +113,7 @@ void testSuccessfulRequest() { equalTo(URL_FULL, uri), equalTo(NETWORK_PROTOCOL_VERSION, "1.1"), equalTo(HTTP_RESPONSE_STATUS_CODE, 200), + equalTo(PEER_SERVICE, "test-peer-service"), equalTo(SERVER_ADDRESS, "localhost"), equalTo(SERVER_PORT, server.httpPort()), equalTo(NETWORK_PEER_ADDRESS, "127.0.0.1"), @@ -164,14 +168,16 @@ void testFailingRequest() { equalTo(URL_FULL, uri), equalTo(SERVER_ADDRESS, "localhost"), equalTo(SERVER_PORT, PortUtils.UNUSABLE_PORT), - equalTo(ERROR_TYPE, connectException.getClass().getName())), + equalTo(ERROR_TYPE, connectException.getClass().getName()), + equalTo(PEER_SERVICE, "test-peer-service")), span -> span.hasName("RESOLVE") .hasKind(INTERNAL) .hasParent(trace.getSpan(0)) .hasAttributesSatisfyingExactly( equalTo(SERVER_ADDRESS, "localhost"), - equalTo(SERVER_PORT, PortUtils.UNUSABLE_PORT)), + equalTo(SERVER_PORT, PortUtils.UNUSABLE_PORT), + equalTo(PEER_SERVICE, "test-peer-service")), span -> span.hasName("CONNECT") .hasKind(INTERNAL) @@ -181,6 +187,7 @@ void testFailingRequest() { .hasAttributesSatisfyingExactly( equalTo(SERVER_ADDRESS, "localhost"), equalTo(SERVER_PORT, PortUtils.UNUSABLE_PORT), - satisfies(NETWORK_PEER_ADDRESS, val -> val.isIn(null, "127.0.0.1"))))); + satisfies(NETWORK_PEER_ADDRESS, val -> val.isIn(null, "127.0.0.1")), + equalTo(PEER_SERVICE, "test-peer-service")))); } } diff --git a/instrumentation/spring/spring-data/spring-data-3.0/testing/src/reactiveTest/java/io/opentelemetry/javaagent/instrumentation/spring/data/v3_0/ReactiveSpringDataTest.java b/instrumentation/spring/spring-data/spring-data-3.0/testing/src/reactiveTest/java/io/opentelemetry/javaagent/instrumentation/spring/data/v3_0/ReactiveSpringDataTest.java index e86781671a35..6231f33b8ed7 100644 --- a/instrumentation/spring/spring-data/spring-data-3.0/testing/src/reactiveTest/java/io/opentelemetry/javaagent/instrumentation/spring/data/v3_0/ReactiveSpringDataTest.java +++ b/instrumentation/spring/spring-data/spring-data-3.0/testing/src/reactiveTest/java/io/opentelemetry/javaagent/instrumentation/spring/data/v3_0/ReactiveSpringDataTest.java @@ -5,6 +5,7 @@ package io.opentelemetry.javaagent.instrumentation.spring.data.v3_0; +import static io.opentelemetry.api.common.AttributeKey.stringKey; import static io.opentelemetry.instrumentation.api.internal.SemconvStability.emitStableDatabaseSemconv; import static io.opentelemetry.instrumentation.testing.junit.db.SemconvStabilityUtil.maybeStable; import static io.opentelemetry.instrumentation.testing.junit.db.SemconvStabilityUtil.maybeStableDbSystemName; @@ -91,6 +92,7 @@ void testFindAll() { equalTo( DB_CONNECTION_STRING, emitStableDatabaseSemconv() ? null : "h2:mem://localhost"), - equalTo(SERVER_ADDRESS, "localhost")))); + equalTo(SERVER_ADDRESS, "localhost"), + equalTo(stringKey("peer.service"), "test-peer-service")))); } } diff --git a/instrumentation/spring/spring-webflux/spring-webflux-5.3/testing/src/main/java/io/opentelemetry/instrumentation/spring/webflux/client/AbstractSpringWebfluxClientInstrumentationTest.java b/instrumentation/spring/spring-webflux/spring-webflux-5.3/testing/src/main/java/io/opentelemetry/instrumentation/spring/webflux/client/AbstractSpringWebfluxClientInstrumentationTest.java index 671fd96996f8..2b99c0b37dac 100644 --- a/instrumentation/spring/spring-webflux/spring-webflux-5.3/testing/src/main/java/io/opentelemetry/instrumentation/spring/webflux/client/AbstractSpringWebfluxClientInstrumentationTest.java +++ b/instrumentation/spring/spring-webflux/spring-webflux-5.3/testing/src/main/java/io/opentelemetry/instrumentation/spring/webflux/client/AbstractSpringWebfluxClientInstrumentationTest.java @@ -184,7 +184,7 @@ void shouldEndSpanOnMonoTimeout() { span.hasName("GET") .hasKind(CLIENT) .hasParent(trace.getSpan(0)) - .hasAttributesSatisfyingExactly( + .hasAttributesSatisfying( equalTo(HTTP_REQUEST_METHOD, "GET"), equalTo(URL_FULL, uri.toString()), equalTo(SERVER_ADDRESS, "localhost"), diff --git a/instrumentation/vertx/vertx-redis-client-4.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/vertx/v4_0/redis/VertxRedisClientTest.java b/instrumentation/vertx/vertx-redis-client-4.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/vertx/v4_0/redis/VertxRedisClientTest.java index 9a8c32852606..2a666c3cdbe8 100644 --- a/instrumentation/vertx/vertx-redis-client-4.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/vertx/v4_0/redis/VertxRedisClientTest.java +++ b/instrumentation/vertx/vertx-redis-client-4.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/vertx/v4_0/redis/VertxRedisClientTest.java @@ -19,6 +19,7 @@ import static io.opentelemetry.semconv.incubating.DbIncubatingAttributes.DB_REDIS_DATABASE_INDEX; import static io.opentelemetry.semconv.incubating.DbIncubatingAttributes.DB_STATEMENT; import static io.opentelemetry.semconv.incubating.DbIncubatingAttributes.DB_SYSTEM; +import static io.opentelemetry.semconv.incubating.PeerIncubatingAttributes.PEER_SERVICE; import static org.assertj.core.api.Assertions.assertThat; import io.opentelemetry.api.trace.SpanKind; @@ -226,6 +227,7 @@ private static AttributeAssertion[] redisSpanAttributes(String operation, String equalTo(DB_NAMESPACE, "1"), equalTo(SERVER_ADDRESS, host), equalTo(SERVER_PORT, port), + equalTo(PEER_SERVICE, "test-peer-service"), equalTo(NETWORK_PEER_PORT, port), equalTo(NETWORK_PEER_ADDRESS, ip) }; @@ -237,6 +239,7 @@ private static AttributeAssertion[] redisSpanAttributes(String operation, String equalTo(DB_REDIS_DATABASE_INDEX, 1), equalTo(SERVER_ADDRESS, host), equalTo(SERVER_PORT, port), + equalTo(PEER_SERVICE, "test-peer-service"), equalTo(NETWORK_PEER_PORT, port), equalTo(NETWORK_PEER_ADDRESS, ip) }; diff --git a/instrumentation/vertx/vertx-sql-client/vertx-sql-client-4.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/vertx/v4_0/sql/VertxSqlClientTest.java b/instrumentation/vertx/vertx-sql-client/vertx-sql-client-4.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/vertx/v4_0/sql/VertxSqlClientTest.java index 071e13273563..9d2530c98321 100644 --- a/instrumentation/vertx/vertx-sql-client/vertx-sql-client-4.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/vertx/v4_0/sql/VertxSqlClientTest.java +++ b/instrumentation/vertx/vertx-sql-client/vertx-sql-client-4.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/vertx/v4_0/sql/VertxSqlClientTest.java @@ -21,6 +21,7 @@ import static io.opentelemetry.semconv.incubating.DbIncubatingAttributes.DB_SQL_TABLE; import static io.opentelemetry.semconv.incubating.DbIncubatingAttributes.DB_STATEMENT; import static io.opentelemetry.semconv.incubating.DbIncubatingAttributes.DB_USER; +import static io.opentelemetry.semconv.incubating.PeerIncubatingAttributes.PEER_SERVICE; import io.opentelemetry.api.trace.SpanKind; import io.opentelemetry.instrumentation.api.internal.SemconvStability; @@ -149,6 +150,7 @@ void testSimpleSelect() throws Exception { equalTo(maybeStable(DB_STATEMENT), "select * from test"), equalTo(maybeStable(DB_OPERATION), "SELECT"), equalTo(maybeStable(DB_SQL_TABLE), "test"), + equalTo(PEER_SERVICE, "test-peer-service"), equalTo(SERVER_ADDRESS, host), equalTo(SERVER_PORT, port)), span -> @@ -184,6 +186,7 @@ void testInvalidQuery() throws Exception { equalTo(maybeStable(DB_NAME), DB), equalTo(DB_USER, emitStableDatabaseSemconv() ? null : USER_DB), equalTo(maybeStable(DB_STATEMENT), "invalid"), + equalTo(PEER_SERVICE, "test-peer-service"), equalTo(SERVER_ADDRESS, host), equalTo(SERVER_PORT, port))); @@ -254,6 +257,7 @@ private static void assertPreparedSelect() { equalTo(maybeStable(DB_STATEMENT), "select * from test where id = $1"), equalTo(maybeStable(DB_OPERATION), "SELECT"), equalTo(maybeStable(DB_SQL_TABLE), "test"), + equalTo(PEER_SERVICE, "test-peer-service"), equalTo(SERVER_ADDRESS, host), equalTo(SERVER_PORT, port)))); } @@ -286,6 +290,7 @@ void testBatch() throws Exception { "insert into test values ($1, $2) returning *"), equalTo(maybeStable(DB_OPERATION), "INSERT"), equalTo(maybeStable(DB_SQL_TABLE), "test"), + equalTo(PEER_SERVICE, "test-peer-service"), equalTo(SERVER_ADDRESS, host), equalTo(SERVER_PORT, port)))); } @@ -372,6 +377,7 @@ void testManyQueries() throws Exception { equalTo(maybeStable(DB_STATEMENT), "select * from test"), equalTo(maybeStable(DB_OPERATION), "SELECT"), equalTo(maybeStable(DB_SQL_TABLE), "test"), + equalTo(PEER_SERVICE, "test-peer-service"), equalTo(SERVER_ADDRESS, host), equalTo(SERVER_PORT, port)), span -> @@ -438,6 +444,7 @@ void testConcurrency() throws Exception { maybeStable(DB_STATEMENT), "select * from test where id = $1"), equalTo(maybeStable(DB_OPERATION), "SELECT"), equalTo(maybeStable(DB_SQL_TABLE), "test"), + equalTo(PEER_SERVICE, "test-peer-service"), equalTo(SERVER_ADDRESS, host), equalTo(SERVER_PORT, port)), span -> diff --git a/instrumentation/vertx/vertx-sql-client/vertx-sql-client-5.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/vertx/v5_0/sql/VertxSqlClientTest.java b/instrumentation/vertx/vertx-sql-client/vertx-sql-client-5.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/vertx/v5_0/sql/VertxSqlClientTest.java index fda5e5f4d1e9..dc72433c5649 100644 --- a/instrumentation/vertx/vertx-sql-client/vertx-sql-client-5.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/vertx/v5_0/sql/VertxSqlClientTest.java +++ b/instrumentation/vertx/vertx-sql-client/vertx-sql-client-5.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/vertx/v5_0/sql/VertxSqlClientTest.java @@ -21,6 +21,7 @@ import static io.opentelemetry.semconv.incubating.DbIncubatingAttributes.DB_SQL_TABLE; import static io.opentelemetry.semconv.incubating.DbIncubatingAttributes.DB_STATEMENT; import static io.opentelemetry.semconv.incubating.DbIncubatingAttributes.DB_USER; +import static io.opentelemetry.semconv.incubating.PeerIncubatingAttributes.PEER_SERVICE; import io.opentelemetry.api.trace.SpanKind; import io.opentelemetry.instrumentation.api.internal.SemconvStability; @@ -150,6 +151,7 @@ void testSimpleSelect() throws Exception { equalTo(maybeStable(DB_STATEMENT), "select * from test"), equalTo(maybeStable(DB_OPERATION), "SELECT"), equalTo(maybeStable(DB_SQL_TABLE), "test"), + equalTo(PEER_SERVICE, "test-peer-service"), equalTo(SERVER_ADDRESS, host), equalTo(SERVER_PORT, port)), span -> @@ -191,6 +193,7 @@ void testInvalidQuery() throws Exception { equalTo(maybeStable(DB_NAME), DB), equalTo(DB_USER, emitStableDatabaseSemconv() ? null : USER_DB), equalTo(maybeStable(DB_STATEMENT), "invalid"), + equalTo(PEER_SERVICE, "test-peer-service"), equalTo(SERVER_ADDRESS, host), equalTo(SERVER_PORT, port))); @@ -255,6 +258,7 @@ private static void assertPreparedSelect() { equalTo(maybeStable(DB_STATEMENT), "select * from test where id = $1"), equalTo(maybeStable(DB_OPERATION), "SELECT"), equalTo(maybeStable(DB_SQL_TABLE), "test"), + equalTo(PEER_SERVICE, "test-peer-service"), equalTo(SERVER_ADDRESS, host), equalTo(SERVER_PORT, port)))); } @@ -287,6 +291,7 @@ void testBatch() throws Exception { "insert into test values ($1, $2) returning *"), equalTo(maybeStable(DB_OPERATION), "INSERT"), equalTo(maybeStable(DB_SQL_TABLE), "test"), + equalTo(PEER_SERVICE, "test-peer-service"), equalTo(SERVER_ADDRESS, host), equalTo(SERVER_PORT, port)))); } @@ -374,6 +379,7 @@ void testManyQueries() throws Exception { equalTo(maybeStable(DB_STATEMENT), "select * from test"), equalTo(maybeStable(DB_OPERATION), "SELECT"), equalTo(maybeStable(DB_SQL_TABLE), "test"), + equalTo(PEER_SERVICE, "test-peer-service"), equalTo(SERVER_ADDRESS, host), equalTo(SERVER_PORT, port)), span -> @@ -440,6 +446,7 @@ void testConcurrency() throws Exception { maybeStable(DB_STATEMENT), "select * from test where id = $1"), equalTo(maybeStable(DB_OPERATION), "SELECT"), equalTo(maybeStable(DB_SQL_TABLE), "test"), + equalTo(PEER_SERVICE, "test-peer-service"), equalTo(SERVER_ADDRESS, host), equalTo(SERVER_PORT, port)), span -> diff --git a/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/junit/http/AbstractHttpClientTest.java b/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/junit/http/AbstractHttpClientTest.java index eec43d3a290e..4228ec796777 100644 --- a/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/junit/http/AbstractHttpClientTest.java +++ b/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/junit/http/AbstractHttpClientTest.java @@ -30,6 +30,8 @@ import io.opentelemetry.semconv.ServerAttributes; import io.opentelemetry.semconv.UrlAttributes; import io.opentelemetry.semconv.UserAgentAttributes; +import io.opentelemetry.semconv.incubating.PeerIncubatingAttributes; +import io.opentelemetry.semconv.incubating.TelemetryIncubatingAttributes; import io.opentelemetry.semconv.incubating.UrlIncubatingAttributes; import java.net.URI; import java.time.Duration; @@ -1151,6 +1153,21 @@ protected SpanDataAssert assertClientSpan( } else { assertThat(attrs).doesNotContainKey(HttpAttributes.HTTP_REQUEST_RESEND_COUNT); } + }) + .satisfies( + spanData -> { + // Check for peer.service when running with javaagent instrumentation + String distroName = + spanData + .getResource() + .getAttribute(TelemetryIncubatingAttributes.TELEMETRY_DISTRO_NAME); + if ("opentelemetry-java-instrumentation".equals(distroName)) { + String expectedPeerService = options.getExpectedPeerServiceName().apply(uri); + if (expectedPeerService != null) { + assertThat(spanData.getAttributes()) + .containsEntry(PeerIncubatingAttributes.PEER_SERVICE, expectedPeerService); + } + } }); } diff --git a/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/junit/http/HttpClientTestOptions.java b/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/junit/http/HttpClientTestOptions.java index d8438864488d..457bbc07ac99 100644 --- a/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/junit/http/HttpClientTestOptions.java +++ b/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/junit/http/HttpClientTestOptions.java @@ -101,6 +101,10 @@ public boolean isLowLevelInstrumentation() { public abstract boolean getHasUrlTemplate(); + public abstract boolean getTestPeerService(); + + public abstract Function getExpectedPeerServiceName(); + @Nullable abstract SpanEndsAfterType getSpanEndsAfterType(); @@ -145,6 +149,8 @@ default Builder withDefaults() { .setTestCaptureHttpHeaders(true) .setHasSendRequest(true) .setHasUrlTemplate(false) + .setTestPeerService(true) + .setExpectedPeerServiceName(uri -> "test-peer-service") .setHttpProtocolVersion(uri -> "1.1"); } @@ -196,6 +202,10 @@ default Builder withDefaults() { Builder setHasUrlTemplate(boolean value); + Builder setTestPeerService(boolean value); + + Builder setExpectedPeerServiceName(Function value); + Builder setHttpProtocolVersion(Function value); @CanIgnoreReturnValue