diff --git a/instrumentation-api-semconv/src/main/java/io/opentelemetry/instrumentation/api/instrumenter/rpc/MetricsView.java b/instrumentation-api-semconv/src/main/java/io/opentelemetry/instrumentation/api/instrumenter/rpc/MetricsView.java index 66da434d99..65cb226cc4 100644 --- a/instrumentation-api-semconv/src/main/java/io/opentelemetry/instrumentation/api/instrumenter/rpc/MetricsView.java +++ b/instrumentation-api-semconv/src/main/java/io/opentelemetry/instrumentation/api/instrumenter/rpc/MetricsView.java @@ -9,6 +9,7 @@ import io.opentelemetry.api.common.AttributeKey; import io.opentelemetry.api.common.Attributes; import io.opentelemetry.api.common.AttributesBuilder; import io.opentelemetry.instrumentation.api.instrumenter.network.internal.NetworkAttributes; +import io.opentelemetry.instrumentation.api.internal.SemconvStability; import io.opentelemetry.semconv.trace.attributes.SemanticAttributes; import java.util.HashSet; import java.util.Set; @@ -46,9 +47,11 @@ final class MetricsView { // the list of rpc client metrics attributes is from // https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/metrics/semantic_conventions/rpc.md#attributes Set view = new HashSet<>(alwaysInclude); - view.add(SemanticAttributes.NET_PEER_NAME); - view.add(SemanticAttributes.NET_PEER_PORT); - view.add(SemanticAttributes.NET_TRANSPORT); + if (SemconvStability.emitOldHttpSemconv()) { + view.add(SemanticAttributes.NET_PEER_NAME); + view.add(SemanticAttributes.NET_PEER_PORT); + view.add(SemanticAttributes.NET_TRANSPORT); + } return view; } @@ -56,8 +59,10 @@ final class MetricsView { // the list of rpc server metrics attributes is from // https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/metrics/semantic_conventions/rpc.md#attributes Set view = new HashSet<>(alwaysInclude); - view.add(SemanticAttributes.NET_HOST_NAME); - view.add(SemanticAttributes.NET_TRANSPORT); + if (SemconvStability.emitOldHttpSemconv()) { + view.add(SemanticAttributes.NET_HOST_NAME); + view.add(SemanticAttributes.NET_TRANSPORT); + } return view; } @@ -65,8 +70,10 @@ final class MetricsView { // the list of rpc server metrics attributes is from // https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/metrics/semantic_conventions/rpc.md#attributes Set view = new HashSet<>(alwaysInclude); - view.add(SemanticAttributes.NET_SOCK_HOST_ADDR); - view.add(SemanticAttributes.NET_TRANSPORT); + if (SemconvStability.emitOldHttpSemconv()) { + view.add(SemanticAttributes.NET_SOCK_HOST_ADDR); + view.add(SemanticAttributes.NET_TRANSPORT); + } return view; } @@ -81,7 +88,8 @@ final class MetricsView { static Attributes applyServerView(Attributes startAttributes, Attributes endAttributes) { Set fullSet = serverView; - if (!containsAttribute(SemanticAttributes.NET_HOST_NAME, startAttributes, endAttributes)) { + if (SemconvStability.emitOldHttpSemconv() + && !containsAttribute(SemanticAttributes.NET_HOST_NAME, startAttributes, endAttributes)) { fullSet = serverFallbackView; } return applyView(fullSet, startAttributes, endAttributes); diff --git a/instrumentation/apache-httpasyncclient-4.1/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/apachehttpasyncclient/ApacheHttpAsyncClientTest.java b/instrumentation/apache-httpasyncclient-4.1/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/apachehttpasyncclient/ApacheHttpAsyncClientTest.java index ca28b7a38d..14a0f55ae7 100644 --- a/instrumentation/apache-httpasyncclient-4.1/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/apachehttpasyncclient/ApacheHttpAsyncClientTest.java +++ b/instrumentation/apache-httpasyncclient-4.1/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/apachehttpasyncclient/ApacheHttpAsyncClientTest.java @@ -5,19 +5,15 @@ package io.opentelemetry.javaagent.instrumentation.apachehttpasyncclient; -import io.opentelemetry.api.common.AttributeKey; import io.opentelemetry.instrumentation.testing.junit.InstrumentationExtension; import io.opentelemetry.instrumentation.testing.junit.http.AbstractHttpClientTest; import io.opentelemetry.instrumentation.testing.junit.http.HttpClientInstrumentationExtension; import io.opentelemetry.instrumentation.testing.junit.http.HttpClientResult; import io.opentelemetry.instrumentation.testing.junit.http.HttpClientTestOptions; -import io.opentelemetry.semconv.trace.attributes.SemanticAttributes; import java.io.IOException; import java.io.UncheckedIOException; import java.net.URI; -import java.util.HashSet; import java.util.Map; -import java.util.Set; import java.util.concurrent.CancellationException; import org.apache.http.HttpHost; import org.apache.http.HttpResponse; @@ -226,14 +222,6 @@ class ApacheHttpAsyncClientTest { void configureTest(HttpClientTestOptions.Builder optionsBuilder) { optionsBuilder.setUserAgent("httpasyncclient"); - optionsBuilder.setHttpAttributes( - endpoint -> { - Set> attributes = - new HashSet<>(HttpClientTestOptions.DEFAULT_HTTP_ATTRIBUTES); - attributes.add(SemanticAttributes.HTTP_SCHEME); - attributes.add(SemanticAttributes.HTTP_TARGET); - return attributes; - }); } static String fullPathFromUri(URI uri) { diff --git a/instrumentation/apache-httpclient/apache-httpclient-4.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/apachehttpclient/v4_0/AbstractApacheHttpClientTest.java b/instrumentation/apache-httpclient/apache-httpclient-4.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/apachehttpclient/v4_0/AbstractApacheHttpClientTest.java index 4b8fd661b8..480fd5d887 100644 --- a/instrumentation/apache-httpclient/apache-httpclient-4.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/apachehttpclient/v4_0/AbstractApacheHttpClientTest.java +++ b/instrumentation/apache-httpclient/apache-httpclient-4.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/apachehttpclient/v4_0/AbstractApacheHttpClientTest.java @@ -5,13 +5,11 @@ package io.opentelemetry.javaagent.instrumentation.apachehttpclient.v4_0; -import io.opentelemetry.api.common.AttributeKey; import io.opentelemetry.instrumentation.testing.junit.http.AbstractHttpClientTest; import io.opentelemetry.instrumentation.testing.junit.http.HttpClientResult; import io.opentelemetry.instrumentation.testing.junit.http.HttpClientTestOptions; import java.net.URI; import java.util.Map; -import java.util.Set; import org.apache.http.HttpHost; import org.apache.http.HttpRequest; import org.apache.http.HttpResponse; @@ -26,11 +24,6 @@ abstract class AbstractApacheHttpClientTest @Override protected void configure(HttpClientTestOptions.Builder optionsBuilder) { optionsBuilder.setUserAgent(USER_AGENT); - optionsBuilder.setHttpAttributes(AbstractApacheHttpClientTest::getHttpAttributes); - } - - private static Set> getHttpAttributes(URI endpoint) { - return HttpClientTestOptions.DEFAULT_HTTP_ATTRIBUTES; } @Override diff --git a/instrumentation/apache-httpclient/apache-httpclient-4.3/testing/src/main/java/io/opentelemetry/instrumentation/apachehttpclient/v4_3/AbstractApacheHttpClientTest.java b/instrumentation/apache-httpclient/apache-httpclient-4.3/testing/src/main/java/io/opentelemetry/instrumentation/apachehttpclient/v4_3/AbstractApacheHttpClientTest.java index 049874c883..8299e2457c 100644 --- a/instrumentation/apache-httpclient/apache-httpclient-4.3/testing/src/main/java/io/opentelemetry/instrumentation/apachehttpclient/v4_3/AbstractApacheHttpClientTest.java +++ b/instrumentation/apache-httpclient/apache-httpclient-4.3/testing/src/main/java/io/opentelemetry/instrumentation/apachehttpclient/v4_3/AbstractApacheHttpClientTest.java @@ -5,18 +5,14 @@ package io.opentelemetry.instrumentation.apachehttpclient.v4_3; -import io.opentelemetry.api.common.AttributeKey; import io.opentelemetry.instrumentation.testing.junit.InstrumentationExtension; import io.opentelemetry.instrumentation.testing.junit.http.AbstractHttpClientTest; import io.opentelemetry.instrumentation.testing.junit.http.HttpClientResult; import io.opentelemetry.instrumentation.testing.junit.http.HttpClientTestOptions; -import io.opentelemetry.semconv.trace.attributes.SemanticAttributes; import java.io.IOException; import java.io.UncheckedIOException; import java.net.URI; -import java.util.HashSet; import java.util.Map; -import java.util.Set; import org.apache.http.HttpHost; import org.apache.http.HttpRequest; import org.apache.http.HttpResponse; @@ -337,14 +333,6 @@ public abstract class AbstractApacheHttpClientTest { static void configureTest(HttpClientTestOptions.Builder optionsBuilder) { optionsBuilder.setUserAgent("apachehttpclient"); - optionsBuilder.setHttpAttributes( - endpoint -> { - Set> attributes = - new HashSet<>(HttpClientTestOptions.DEFAULT_HTTP_ATTRIBUTES); - attributes.add(SemanticAttributes.HTTP_SCHEME); - attributes.add(SemanticAttributes.HTTP_TARGET); - return attributes; - }); } static String fullPathFromUri(URI uri) { diff --git a/instrumentation/apache-httpclient/apache-httpclient-5.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/apachehttpclient/v5_0/AbstractApacheHttpClientTest.java b/instrumentation/apache-httpclient/apache-httpclient-5.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/apachehttpclient/v5_0/AbstractApacheHttpClientTest.java index c29c1ac269..336f454c87 100644 --- a/instrumentation/apache-httpclient/apache-httpclient-5.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/apachehttpclient/v5_0/AbstractApacheHttpClientTest.java +++ b/instrumentation/apache-httpclient/apache-httpclient-5.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/apachehttpclient/v5_0/AbstractApacheHttpClientTest.java @@ -6,6 +6,7 @@ package io.opentelemetry.javaagent.instrumentation.apachehttpclient.v5_0; import io.opentelemetry.api.common.AttributeKey; +import io.opentelemetry.instrumentation.api.internal.SemconvStability; import io.opentelemetry.instrumentation.testing.junit.http.AbstractHttpClientTest; import io.opentelemetry.instrumentation.testing.junit.http.HttpClientResult; import io.opentelemetry.instrumentation.testing.junit.http.HttpClientTestOptions; @@ -36,14 +37,16 @@ abstract class AbstractApacheHttpClientTest protected Set> getHttpAttributes(URI uri) { Set> attributes = new HashSet<>(HttpClientTestOptions.DEFAULT_HTTP_ATTRIBUTES); - // unopened port or non routable address; or timeout - // circular redirects don't report protocol information as well - if ("http://localhost:61/".equals(uri.toString()) - || "https://192.0.2.1/".equals(uri.toString()) - || uri.toString().contains("/read-timeout") - || uri.toString().contains("/circular-redirect")) { - attributes.remove(SemanticAttributes.NET_PROTOCOL_NAME); - attributes.remove(SemanticAttributes.NET_PROTOCOL_VERSION); + if (SemconvStability.emitOldHttpSemconv()) { + // unopened port or non routable address; or timeout + // circular redirects don't report protocol information as well + if ("http://localhost:61/".equals(uri.toString()) + || "https://192.0.2.1/".equals(uri.toString()) + || uri.toString().contains("/read-timeout") + || uri.toString().contains("/circular-redirect")) { + attributes.remove(SemanticAttributes.NET_PROTOCOL_NAME); + attributes.remove(SemanticAttributes.NET_PROTOCOL_VERSION); + } } return attributes; } diff --git a/instrumentation/async-http-client/async-http-client-1.9/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/asynchttpclient/v1_9/AsyncHttpClientTest.java b/instrumentation/async-http-client/async-http-client-1.9/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/asynchttpclient/v1_9/AsyncHttpClientTest.java index 5f50428382..534a0277b6 100644 --- a/instrumentation/async-http-client/async-http-client-1.9/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/asynchttpclient/v1_9/AsyncHttpClientTest.java +++ b/instrumentation/async-http-client/async-http-client-1.9/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/asynchttpclient/v1_9/AsyncHttpClientTest.java @@ -13,6 +13,7 @@ import com.ning.http.client.RequestBuilder; import com.ning.http.client.Response; import com.ning.http.client.uri.Uri; import io.opentelemetry.api.common.AttributeKey; +import io.opentelemetry.instrumentation.api.internal.SemconvStability; import io.opentelemetry.instrumentation.testing.junit.InstrumentationExtension; import io.opentelemetry.instrumentation.testing.junit.http.AbstractHttpClientTest; import io.opentelemetry.instrumentation.testing.junit.http.HttpClientInstrumentationExtension; @@ -88,13 +89,15 @@ class AsyncHttpClientTest extends AbstractHttpClientTest { if (!Boolean.getBoolean("testLatestDeps")) { optionsBuilder.disableTestReadTimeout(); } - optionsBuilder.setHttpAttributes( - endpoint -> { - Set> attributes = - new HashSet<>(HttpClientTestOptions.DEFAULT_HTTP_ATTRIBUTES); - attributes.remove(SemanticAttributes.NET_PROTOCOL_NAME); - attributes.remove(SemanticAttributes.NET_PROTOCOL_VERSION); - return attributes; - }); + if (SemconvStability.emitOldHttpSemconv()) { + optionsBuilder.setHttpAttributes( + endpoint -> { + Set> attributes = + new HashSet<>(HttpClientTestOptions.DEFAULT_HTTP_ATTRIBUTES); + attributes.remove(SemanticAttributes.NET_PROTOCOL_NAME); + attributes.remove(SemanticAttributes.NET_PROTOCOL_VERSION); + return attributes; + }); + } } } diff --git a/instrumentation/aws-lambda/aws-lambda-events-2.2/library/src/main/java/io/opentelemetry/instrumentation/awslambdaevents/v2_2/internal/ApiGatewayProxyAttributesExtractor.java b/instrumentation/aws-lambda/aws-lambda-events-2.2/library/src/main/java/io/opentelemetry/instrumentation/awslambdaevents/v2_2/internal/ApiGatewayProxyAttributesExtractor.java index 8705632744..088ed3521c 100644 --- a/instrumentation/aws-lambda/aws-lambda-events-2.2/library/src/main/java/io/opentelemetry/instrumentation/awslambdaevents/v2_2/internal/ApiGatewayProxyAttributesExtractor.java +++ b/instrumentation/aws-lambda/aws-lambda-events-2.2/library/src/main/java/io/opentelemetry/instrumentation/awslambdaevents/v2_2/internal/ApiGatewayProxyAttributesExtractor.java @@ -5,6 +5,7 @@ package io.opentelemetry.instrumentation.awslambdaevents.v2_2.internal; +import static io.opentelemetry.instrumentation.api.instrumenter.http.internal.HttpAttributes.HTTP_RESPONSE_STATUS_CODE; import static io.opentelemetry.instrumentation.api.internal.AttributesExtractorUtil.internalSet; import static io.opentelemetry.instrumentation.api.internal.HttpConstants._OTHER; import static io.opentelemetry.instrumentation.awslambdacore.v1_0.internal.MapUtils.emptyIfNull; @@ -122,7 +123,12 @@ final class ApiGatewayProxyAttributesExtractor if (response instanceof APIGatewayProxyResponseEvent) { Integer statusCode = ((APIGatewayProxyResponseEvent) response).getStatusCode(); if (statusCode != null) { - attributes.put(HTTP_STATUS_CODE, statusCode); + if (SemconvStability.emitStableHttpSemconv()) { + attributes.put(HTTP_RESPONSE_STATUS_CODE, statusCode); + } + if (SemconvStability.emitOldHttpSemconv()) { + attributes.put(HTTP_STATUS_CODE, statusCode); + } } } } diff --git a/instrumentation/camel-2.20/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/apachecamel/decorators/HttpSpanDecorator.java b/instrumentation/camel-2.20/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/apachecamel/decorators/HttpSpanDecorator.java index 2a96ea7362..190569ae9e 100644 --- a/instrumentation/camel-2.20/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/apachecamel/decorators/HttpSpanDecorator.java +++ b/instrumentation/camel-2.20/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/apachecamel/decorators/HttpSpanDecorator.java @@ -182,7 +182,12 @@ class HttpSpanDecorator extends BaseSpanDecorator { if (exchange.hasOut()) { Object responseCode = exchange.getOut().getHeader(Exchange.HTTP_RESPONSE_CODE); if (responseCode instanceof Integer) { - attributes.put(SemanticAttributes.HTTP_STATUS_CODE, (Integer) responseCode); + if (SemconvStability.emitStableHttpSemconv()) { + attributes.put(HttpAttributes.HTTP_RESPONSE_STATUS_CODE, (Integer) responseCode); + } + if (SemconvStability.emitOldHttpSemconv()) { + attributes.put(SemanticAttributes.HTTP_STATUS_CODE, (Integer) responseCode); + } } } } 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 37411b05ed..77ef00ae9e 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 @@ -17,6 +17,7 @@ import com.google.api.client.http.javanet.NetHttpTransport; import com.google.api.client.util.ClassInfo; import io.opentelemetry.api.common.AttributeKey; import io.opentelemetry.api.trace.SpanKind; +import io.opentelemetry.instrumentation.api.internal.SemconvStability; import io.opentelemetry.instrumentation.testing.junit.InstrumentationExtension; import io.opentelemetry.instrumentation.testing.junit.http.AbstractHttpClientTest; import io.opentelemetry.instrumentation.testing.junit.http.HttpClientInstrumentationExtension; @@ -122,13 +123,15 @@ public abstract class AbstractGoogleHttpClientTest extends AbstractHttpClientTes // can only use supported method optionsBuilder.disableTestNonStandardHttpMethod(); - optionsBuilder.setHttpAttributes( - uri -> { - Set> attributes = - new HashSet<>(HttpClientTestOptions.DEFAULT_HTTP_ATTRIBUTES); - attributes.remove(SemanticAttributes.NET_PROTOCOL_NAME); - attributes.remove(SemanticAttributes.NET_PROTOCOL_VERSION); - return attributes; - }); + if (SemconvStability.emitOldHttpSemconv()) { + optionsBuilder.setHttpAttributes( + uri -> { + Set> attributes = + new HashSet<>(HttpClientTestOptions.DEFAULT_HTTP_ATTRIBUTES); + attributes.remove(SemanticAttributes.NET_PROTOCOL_NAME); + attributes.remove(SemanticAttributes.NET_PROTOCOL_VERSION); + return attributes; + }); + } } } diff --git a/instrumentation/java-http-client/testing/src/main/java/io/opentelemetry/instrumentation/httpclient/AbstractJavaHttpClientTest.java b/instrumentation/java-http-client/testing/src/main/java/io/opentelemetry/instrumentation/httpclient/AbstractJavaHttpClientTest.java index c4fe8369ca..a9bf2c6632 100644 --- a/instrumentation/java-http-client/testing/src/main/java/io/opentelemetry/instrumentation/httpclient/AbstractJavaHttpClientTest.java +++ b/instrumentation/java-http-client/testing/src/main/java/io/opentelemetry/instrumentation/httpclient/AbstractJavaHttpClientTest.java @@ -6,6 +6,7 @@ package io.opentelemetry.instrumentation.httpclient; import io.opentelemetry.api.common.AttributeKey; +import io.opentelemetry.instrumentation.api.internal.SemconvStability; import io.opentelemetry.instrumentation.testing.junit.http.AbstractHttpClientTest; import io.opentelemetry.instrumentation.testing.junit.http.HttpClientResult; import io.opentelemetry.instrumentation.testing.junit.http.HttpClientTestOptions; @@ -83,18 +84,20 @@ public abstract class AbstractJavaHttpClientTest extends AbstractHttpClientTest< // which is not what the test expects optionsBuilder.disableTestWithClientParent(); - optionsBuilder.setHttpAttributes( - uri -> { - Set> attributes = - new HashSet<>(HttpClientTestOptions.DEFAULT_HTTP_ATTRIBUTES); - // unopened port or non routable address; or timeout - if ("http://localhost:61/".equals(uri.toString()) - || "https://192.0.2.1/".equals(uri.toString()) - || uri.toString().contains("/read-timeout")) { - attributes.remove(SemanticAttributes.NET_PROTOCOL_NAME); - attributes.remove(SemanticAttributes.NET_PROTOCOL_VERSION); - } - return attributes; - }); + if (SemconvStability.emitOldHttpSemconv()) { + optionsBuilder.setHttpAttributes( + uri -> { + Set> attributes = + new HashSet<>(HttpClientTestOptions.DEFAULT_HTTP_ATTRIBUTES); + // unopened port or non routable address; or timeout + if ("http://localhost:61/".equals(uri.toString()) + || "https://192.0.2.1/".equals(uri.toString()) + || uri.toString().contains("/read-timeout")) { + attributes.remove(SemanticAttributes.NET_PROTOCOL_NAME); + attributes.remove(SemanticAttributes.NET_PROTOCOL_VERSION); + } + return attributes; + }); + } } } diff --git a/instrumentation/netty/netty-3.8/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/netty/v3_8/client/Netty38ClientTest.java b/instrumentation/netty/netty-3.8/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/netty/v3_8/client/Netty38ClientTest.java index aa0c57b90d..0de4a5c336 100644 --- a/instrumentation/netty/netty-3.8/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/netty/v3_8/client/Netty38ClientTest.java +++ b/instrumentation/netty/netty-3.8/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/netty/v3_8/client/Netty38ClientTest.java @@ -21,6 +21,7 @@ import io.opentelemetry.instrumentation.testing.junit.http.AbstractHttpClientTes import io.opentelemetry.instrumentation.testing.junit.http.HttpClientInstrumentationExtension; import io.opentelemetry.instrumentation.testing.junit.http.HttpClientResult; import io.opentelemetry.instrumentation.testing.junit.http.HttpClientTestOptions; +import io.opentelemetry.instrumentation.testing.junit.http.SemconvStabilityUtil; import io.opentelemetry.semconv.trace.attributes.SemanticAttributes; import java.lang.reflect.Method; import java.net.ConnectException; @@ -174,8 +175,8 @@ class Netty38ClientTest extends AbstractHttpClientTest { } Set> attributes = new HashSet<>(HttpClientTestOptions.DEFAULT_HTTP_ATTRIBUTES); - attributes.remove(SemanticAttributes.NET_PEER_NAME); - attributes.remove(SemanticAttributes.NET_PEER_PORT); + attributes.remove(SemconvStabilityUtil.getAttributeKey(SemanticAttributes.NET_PEER_NAME)); + attributes.remove(SemconvStabilityUtil.getAttributeKey(SemanticAttributes.NET_PEER_PORT)); return attributes; }); } diff --git a/instrumentation/netty/netty-4.1/testing/src/main/java/io/opentelemetry/instrumentation/netty/v4_1/AbstractNetty41ClientTest.java b/instrumentation/netty/netty-4.1/testing/src/main/java/io/opentelemetry/instrumentation/netty/v4_1/AbstractNetty41ClientTest.java index 69d9ba278d..fdf4a7a610 100644 --- a/instrumentation/netty/netty-4.1/testing/src/main/java/io/opentelemetry/instrumentation/netty/v4_1/AbstractNetty41ClientTest.java +++ b/instrumentation/netty/netty-4.1/testing/src/main/java/io/opentelemetry/instrumentation/netty/v4_1/AbstractNetty41ClientTest.java @@ -19,6 +19,7 @@ import io.opentelemetry.api.trace.SpanKind; import io.opentelemetry.instrumentation.testing.junit.http.AbstractHttpClientTest; import io.opentelemetry.instrumentation.testing.junit.http.HttpClientResult; import io.opentelemetry.instrumentation.testing.junit.http.HttpClientTestOptions; +import io.opentelemetry.instrumentation.testing.junit.http.SemconvStabilityUtil; import io.opentelemetry.semconv.trace.attributes.SemanticAttributes; import java.net.URI; import java.util.Collections; @@ -121,8 +122,8 @@ public abstract class AbstractNetty41ClientTest return Collections.emptySet(); } Set> attributes = new HashSet<>(HttpClientTestOptions.DEFAULT_HTTP_ATTRIBUTES); - attributes.remove(SemanticAttributes.NET_PEER_NAME); - attributes.remove(SemanticAttributes.NET_PEER_PORT); + attributes.remove(SemconvStabilityUtil.getAttributeKey(SemanticAttributes.NET_PEER_NAME)); + attributes.remove(SemconvStabilityUtil.getAttributeKey(SemanticAttributes.NET_PEER_PORT)); return attributes; } diff --git a/instrumentation/okhttp/okhttp-2.2/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/okhttp/v2_2/OkHttp2Test.java b/instrumentation/okhttp/okhttp-2.2/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/okhttp/v2_2/OkHttp2Test.java index ade6c8875b..1151cf0ab1 100644 --- a/instrumentation/okhttp/okhttp-2.2/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/okhttp/v2_2/OkHttp2Test.java +++ b/instrumentation/okhttp/okhttp-2.2/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/okhttp/v2_2/OkHttp2Test.java @@ -13,6 +13,7 @@ import com.squareup.okhttp.RequestBody; import com.squareup.okhttp.Response; import com.squareup.okhttp.internal.http.HttpMethod; import io.opentelemetry.api.common.AttributeKey; +import io.opentelemetry.instrumentation.api.internal.SemconvStability; import io.opentelemetry.instrumentation.testing.junit.InstrumentationExtension; import io.opentelemetry.instrumentation.testing.junit.http.AbstractHttpClientTest; import io.opentelemetry.instrumentation.testing.junit.http.HttpClientInstrumentationExtension; @@ -100,13 +101,15 @@ public class OkHttp2Test extends AbstractHttpClientTest { Set> attributes = new HashSet<>(HttpClientTestOptions.DEFAULT_HTTP_ATTRIBUTES); - // protocol is extracted from the response, and those URLs cause exceptions (= null - // response) - if ("http://localhost:61/".equals(uri.toString()) - || "https://192.0.2.1/".equals(uri.toString()) - || resolveAddress("/read-timeout").toString().equals(uri.toString())) { - attributes.remove(SemanticAttributes.NET_PROTOCOL_NAME); - attributes.remove(SemanticAttributes.NET_PROTOCOL_VERSION); + if (SemconvStability.emitOldHttpSemconv()) { + // protocol is extracted from the response, and those URLs cause exceptions (= null + // response) + if ("http://localhost:61/".equals(uri.toString()) + || "https://192.0.2.1/".equals(uri.toString()) + || resolveAddress("/read-timeout").toString().equals(uri.toString())) { + attributes.remove(SemanticAttributes.NET_PROTOCOL_NAME); + attributes.remove(SemanticAttributes.NET_PROTOCOL_VERSION); + } } return attributes; diff --git a/instrumentation/okhttp/okhttp-3.0/testing/src/main/java/io/opentelemetry/instrumentation/okhttp/v3_0/AbstractOkHttp3Test.java b/instrumentation/okhttp/okhttp-3.0/testing/src/main/java/io/opentelemetry/instrumentation/okhttp/v3_0/AbstractOkHttp3Test.java index 25b17a4486..021267b70f 100644 --- a/instrumentation/okhttp/okhttp-3.0/testing/src/main/java/io/opentelemetry/instrumentation/okhttp/v3_0/AbstractOkHttp3Test.java +++ b/instrumentation/okhttp/okhttp-3.0/testing/src/main/java/io/opentelemetry/instrumentation/okhttp/v3_0/AbstractOkHttp3Test.java @@ -10,6 +10,7 @@ import static org.assertj.core.api.Assertions.assertThat; import io.opentelemetry.api.common.AttributeKey; import io.opentelemetry.api.trace.SpanKind; +import io.opentelemetry.instrumentation.api.internal.SemconvStability; import io.opentelemetry.instrumentation.testing.junit.http.AbstractHttpClientTest; import io.opentelemetry.instrumentation.testing.junit.http.HttpClientResult; import io.opentelemetry.instrumentation.testing.junit.http.HttpClientTestOptions; @@ -125,13 +126,15 @@ public abstract class AbstractOkHttp3Test extends AbstractHttpClientTest { - Set> attributes = - new HashSet<>(HttpClientTestOptions.DEFAULT_HTTP_ATTRIBUTES); - attributes.remove(SemanticAttributes.NET_PROTOCOL_NAME); - attributes.remove(SemanticAttributes.NET_PROTOCOL_VERSION); - return attributes; - }); + if (SemconvStability.emitOldHttpSemconv()) { + optionsBuilder.setHttpAttributes( + uri -> { + Set> attributes = + new HashSet<>(HttpClientTestOptions.DEFAULT_HTTP_ATTRIBUTES); + attributes.remove(SemanticAttributes.NET_PROTOCOL_NAME); + attributes.remove(SemanticAttributes.NET_PROTOCOL_VERSION); + return attributes; + }); + } } } 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 a38ec52040..d8dff435ce 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 @@ -8,6 +8,7 @@ package io.opentelemetry.instrumentation.spring.webflux.client; import static java.util.Objects.requireNonNull; import io.opentelemetry.api.common.AttributeKey; +import io.opentelemetry.instrumentation.api.internal.SemconvStability; import io.opentelemetry.instrumentation.testing.junit.http.AbstractHttpClientTest; import io.opentelemetry.instrumentation.testing.junit.http.HttpClientResult; import io.opentelemetry.instrumentation.testing.junit.http.HttpClientTestOptions; @@ -70,14 +71,16 @@ public abstract class AbstractSpringWebfluxClientInstrumentationTest // timeouts leak the scope optionsBuilder.disableTestReadTimeout(); - optionsBuilder.setHttpAttributes( - uri -> { - Set> attributes = - new HashSet<>(HttpClientTestOptions.DEFAULT_HTTP_ATTRIBUTES); - attributes.remove(SemanticAttributes.NET_PROTOCOL_NAME); - attributes.remove(SemanticAttributes.NET_PROTOCOL_VERSION); - return attributes; - }); + if (SemconvStability.emitOldHttpSemconv()) { + optionsBuilder.setHttpAttributes( + uri -> { + Set> attributes = + new HashSet<>(HttpClientTestOptions.DEFAULT_HTTP_ATTRIBUTES); + attributes.remove(SemanticAttributes.NET_PROTOCOL_NAME); + attributes.remove(SemanticAttributes.NET_PROTOCOL_VERSION); + return attributes; + }); + } optionsBuilder.setClientSpanErrorMapper( (uri, throwable) -> { 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 9f3ff695ac..91429eb961 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 @@ -22,17 +22,18 @@ import javax.annotation.Nullable; @AutoValue public abstract class HttpClientTestOptions { + public static final Set> DEFAULT_HTTP_ATTRIBUTES = Collections.unmodifiableSet( new HashSet<>( Arrays.asList( - SemanticAttributes.NET_PROTOCOL_NAME, - SemanticAttributes.NET_PROTOCOL_VERSION, - SemanticAttributes.NET_PEER_NAME, - SemanticAttributes.NET_PEER_PORT, - SemanticAttributes.HTTP_URL, - SemanticAttributes.HTTP_METHOD, - SemanticAttributes.USER_AGENT_ORIGINAL))); + SemconvStabilityUtil.getAttributeKey(SemanticAttributes.NET_PROTOCOL_NAME), + SemconvStabilityUtil.getAttributeKey(SemanticAttributes.NET_PROTOCOL_VERSION), + SemconvStabilityUtil.getAttributeKey(SemanticAttributes.NET_PEER_NAME), + SemconvStabilityUtil.getAttributeKey(SemanticAttributes.NET_PEER_PORT), + SemconvStabilityUtil.getAttributeKey(SemanticAttributes.HTTP_URL), + SemconvStabilityUtil.getAttributeKey(SemanticAttributes.HTTP_METHOD), + SemconvStabilityUtil.getAttributeKey(SemanticAttributes.USER_AGENT_ORIGINAL)))); public static final BiFunction DEFAULT_EXPECTED_CLIENT_SPAN_NAME_MAPPER = (uri, method) -> HttpConstants._OTHER.equals(method) ? "TEST" : method; diff --git a/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/junit/http/HttpServerTestOptions.java b/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/junit/http/HttpServerTestOptions.java index 09d5f71440..e2ddbdd794 100644 --- a/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/junit/http/HttpServerTestOptions.java +++ b/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/junit/http/HttpServerTestOptions.java @@ -24,7 +24,9 @@ public final class HttpServerTestOptions { public static final Set> DEFAULT_HTTP_ATTRIBUTES = Collections.unmodifiableSet( new HashSet<>( - Arrays.asList(SemanticAttributes.HTTP_ROUTE, SemanticAttributes.NET_PEER_PORT))); + Arrays.asList( + SemanticAttributes.HTTP_ROUTE, + SemconvStabilityUtil.getAttributeKey(SemanticAttributes.NET_PEER_PORT)))); public static final SpanNameMapper DEFAULT_EXPECTED_SERVER_SPAN_NAME_MAPPER = (uri, method, route) -> route == null ? method : method + " " + route; diff --git a/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/junit/http/SemconvStabilityUtil.java b/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/junit/http/SemconvStabilityUtil.java index d177c72e19..0d8fa99b4f 100644 --- a/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/junit/http/SemconvStabilityUtil.java +++ b/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/junit/http/SemconvStabilityUtil.java @@ -14,7 +14,7 @@ import io.opentelemetry.semconv.trace.attributes.SemanticAttributes; import java.util.HashMap; import java.util.Map; -class SemconvStabilityUtil { +public class SemconvStabilityUtil { private static final Map, AttributeKey> oldToNewMap = new HashMap<>(); static { @@ -64,7 +64,7 @@ class SemconvStabilityUtil { @SuppressWarnings("unchecked") public static AttributeKey getAttributeKey(AttributeKey oldKey) { if (SemconvStability.emitStableHttpSemconv()) { - return (AttributeKey) oldToNewMap.getOrDefault(oldKey, oldKey); + return (AttributeKey) oldToNewMap.get(oldKey); } return oldKey; }