diff --git a/agent-tooling/src/main/java/io/opentelemetry/auto/decorator/BaseDecorator.java b/agent-tooling/src/main/java/io/opentelemetry/auto/decorator/BaseDecorator.java index d89721bf74..1a395febfc 100644 --- a/agent-tooling/src/main/java/io/opentelemetry/auto/decorator/BaseDecorator.java +++ b/agent-tooling/src/main/java/io/opentelemetry/auto/decorator/BaseDecorator.java @@ -22,8 +22,6 @@ import io.opentelemetry.trace.Status; import java.io.PrintWriter; import java.io.StringWriter; import java.lang.reflect.Method; -import java.net.Inet4Address; -import java.net.Inet6Address; import java.net.InetAddress; import java.net.InetSocketAddress; import java.util.concurrent.ExecutionException; @@ -69,8 +67,8 @@ public abstract class BaseDecorator { if (remoteConnection != null) { onPeerConnection(span, remoteConnection.getAddress()); - span.setAttribute(Tags.PEER_HOSTNAME, remoteConnection.getHostName()); - span.setAttribute(Tags.PEER_PORT, remoteConnection.getPort()); + span.setAttribute(MoreTags.NET_PEER_NAME, remoteConnection.getHostName()); + span.setAttribute(MoreTags.NET_PEER_PORT, remoteConnection.getPort()); } return span; } @@ -78,12 +76,8 @@ public abstract class BaseDecorator { public Span onPeerConnection(final Span span, final InetAddress remoteAddress) { assert span != null; if (remoteAddress != null) { - span.setAttribute(Tags.PEER_HOSTNAME, remoteAddress.getHostName()); - if (remoteAddress instanceof Inet4Address) { - span.setAttribute(Tags.PEER_HOST_IPV4, remoteAddress.getHostAddress()); - } else if (remoteAddress instanceof Inet6Address) { - span.setAttribute(Tags.PEER_HOST_IPV6, remoteAddress.getHostAddress()); - } + span.setAttribute(MoreTags.NET_PEER_NAME, remoteAddress.getHostName()); + span.setAttribute(MoreTags.NET_PEER_IP, remoteAddress.getHostAddress()); } return span; } diff --git a/agent-tooling/src/main/java/io/opentelemetry/auto/decorator/HttpClientDecorator.java b/agent-tooling/src/main/java/io/opentelemetry/auto/decorator/HttpClientDecorator.java index 577204716b..b44dd7641c 100644 --- a/agent-tooling/src/main/java/io/opentelemetry/auto/decorator/HttpClientDecorator.java +++ b/agent-tooling/src/main/java/io/opentelemetry/auto/decorator/HttpClientDecorator.java @@ -28,6 +28,8 @@ import lombok.extern.slf4j.Slf4j; @Slf4j public abstract class HttpClientDecorator extends ClientDecorator { + public static final String DEFAULT_SPAN_NAME = "HTTP request"; + protected abstract String method(REQUEST request); protected abstract URI url(REQUEST request) throws URISyntaxException; @@ -48,6 +50,14 @@ public abstract class HttpClientDecorator extends ClientDecor return null; } + public String spanNameForRequest(final REQUEST request) { + if (request == null) { + return DEFAULT_SPAN_NAME; + } + final String method = method(request); + return method != null ? "HTTP " + method : DEFAULT_SPAN_NAME; + } + public Span onRequest(final Span span, final REQUEST request) { assert span != null; if (request != null) { @@ -60,33 +70,39 @@ public abstract class HttpClientDecorator extends ClientDecor try { final URI url = url(request); if (url != null) { - final StringBuilder urlNoParams = new StringBuilder(); + final StringBuilder urlBuilder = new StringBuilder(); if (url.getScheme() != null) { - urlNoParams.append(url.getScheme()); - urlNoParams.append("://"); + urlBuilder.append(url.getScheme()); + urlBuilder.append("://"); } if (url.getHost() != null) { - urlNoParams.append(url.getHost()); + urlBuilder.append(url.getHost()); if (url.getPort() > 0 && url.getPort() != 80 && url.getPort() != 443) { - urlNoParams.append(":"); - urlNoParams.append(url.getPort()); + urlBuilder.append(":"); + urlBuilder.append(url.getPort()); } } final String path = url.getPath(); if (path.isEmpty()) { - urlNoParams.append("/"); + urlBuilder.append("/"); } else { - urlNoParams.append(path); + urlBuilder.append(path); + } + final String query = url.getQuery(); + if (query != null) { + urlBuilder.append("?").append(query); + } + final String fragment = url.getFragment(); + if (fragment != null) { + urlBuilder.append("#").append(fragment); } - span.setAttribute(Tags.HTTP_URL, urlNoParams.toString()); + span.setAttribute(Tags.HTTP_URL, urlBuilder.toString()); if (Config.get().isHttpClientTagQueryString()) { - final String query = url.getQuery(); if (query != null) { span.setAttribute(MoreTags.HTTP_QUERY, query); } - final String fragment = url.getFragment(); if (fragment != null) { span.setAttribute(MoreTags.HTTP_FRAGMENT, fragment); } @@ -98,7 +114,7 @@ public abstract class HttpClientDecorator extends ClientDecor final String hostname = hostname(request); if (hostname != null) { - span.setAttribute(Tags.PEER_HOSTNAME, hostname); + span.setAttribute(MoreTags.NET_PEER_NAME, hostname); if (Config.get().isHttpClientSplitByDomain()) { span.setAttribute(MoreTags.SERVICE_NAME, hostname); @@ -107,7 +123,7 @@ public abstract class HttpClientDecorator extends ClientDecor final Integer port = port(request); // Negative or Zero ports might represent an unset/null value for an int type. Skip setting. if (port != null && port > 0) { - span.setAttribute(Tags.PEER_PORT, port); + span.setAttribute(MoreTags.NET_PEER_PORT, port); } } return span; diff --git a/agent-tooling/src/main/java/io/opentelemetry/auto/decorator/HttpServerDecorator.java b/agent-tooling/src/main/java/io/opentelemetry/auto/decorator/HttpServerDecorator.java index 84350b0181..33366b758b 100644 --- a/agent-tooling/src/main/java/io/opentelemetry/auto/decorator/HttpServerDecorator.java +++ b/agent-tooling/src/main/java/io/opentelemetry/auto/decorator/HttpServerDecorator.java @@ -23,17 +23,12 @@ import io.opentelemetry.trace.Span; import io.opentelemetry.trace.Status; import java.net.URI; import java.net.URISyntaxException; -import java.util.regex.Pattern; import lombok.extern.slf4j.Slf4j; @Slf4j public abstract class HttpServerDecorator extends ServerDecorator { public static final String SPAN_ATTRIBUTE = "io.opentelemetry.auto.span"; - - // Source: https://www.regextester.com/22 - private static final Pattern VALID_IPV4_ADDRESS = - Pattern.compile( - "^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$"); + public static final String DEFAULT_SPAN_NAME = "HTTP request"; protected abstract String method(REQUEST request); @@ -50,6 +45,14 @@ public abstract class HttpServerDecorator extends return SpanTypes.HTTP_SERVER; } + public String spanNameForRequest(final REQUEST request) { + if (request == null) { + return DEFAULT_SPAN_NAME; + } + final String method = method(request); + return method != null ? "HTTP " + method : DEFAULT_SPAN_NAME; + } + public Span onRequest(final Span span, final REQUEST request) { assert span != null; if (request != null) { @@ -59,26 +62,34 @@ public abstract class HttpServerDecorator extends try { final URI url = url(request); if (url != null) { - final StringBuilder urlNoParams = new StringBuilder(); + final StringBuilder urlBuilder = new StringBuilder(); if (url.getScheme() != null) { - urlNoParams.append(url.getScheme()); - urlNoParams.append("://"); + urlBuilder.append(url.getScheme()); + urlBuilder.append("://"); } if (url.getHost() != null) { - urlNoParams.append(url.getHost()); + urlBuilder.append(url.getHost()); if (url.getPort() > 0 && url.getPort() != 80 && url.getPort() != 443) { - urlNoParams.append(":"); - urlNoParams.append(url.getPort()); + urlBuilder.append(":"); + urlBuilder.append(url.getPort()); } } final String path = url.getPath(); if (path.isEmpty()) { - urlNoParams.append("/"); + urlBuilder.append("/"); } else { - urlNoParams.append(path); + urlBuilder.append(path); + } + final String query = url.getQuery(); + if (query != null) { + urlBuilder.append("?").append(query); + } + final String fragment = url.getFragment(); + if (fragment != null) { + urlBuilder.append("#").append(fragment); } - span.setAttribute(Tags.HTTP_URL, urlNoParams.toString()); + span.setAttribute(Tags.HTTP_URL, urlBuilder.toString()); if (Config.get().isHttpServerTagQueryString()) { if (url.getQuery() != null) { @@ -102,16 +113,12 @@ public abstract class HttpServerDecorator extends if (connection != null) { final String ip = peerHostIP(connection); if (ip != null) { - if (VALID_IPV4_ADDRESS.matcher(ip).matches()) { - span.setAttribute(Tags.PEER_HOST_IPV4, ip); - } else if (ip.contains(":")) { - span.setAttribute(Tags.PEER_HOST_IPV6, ip); - } + span.setAttribute(MoreTags.NET_PEER_IP, ip); } final Integer port = peerPort(connection); // Negative or Zero ports might represent an unset/null value for an int type. Skip setting. if (port != null && port > 0) { - span.setAttribute(Tags.PEER_PORT, port); + span.setAttribute(MoreTags.NET_PEER_PORT, port); } } return span; diff --git a/agent-tooling/src/test/groovy/io/opentelemetry/auto/decorator/BaseDecoratorTest.groovy b/agent-tooling/src/test/groovy/io/opentelemetry/auto/decorator/BaseDecoratorTest.groovy index d674f3b317..5cdd157114 100644 --- a/agent-tooling/src/test/groovy/io/opentelemetry/auto/decorator/BaseDecoratorTest.groovy +++ b/agent-tooling/src/test/groovy/io/opentelemetry/auto/decorator/BaseDecoratorTest.groovy @@ -46,17 +46,12 @@ class BaseDecoratorTest extends AgentSpecification { then: if (connection.getAddress()) { - 2 * span.setAttribute(Tags.PEER_HOSTNAME, connection.hostName) + 2 * span.setAttribute(MoreTags.NET_PEER_NAME, connection.hostName) + 1 * span.setAttribute(MoreTags.NET_PEER_IP, connection.address.hostAddress) } else { - 1 * span.setAttribute(Tags.PEER_HOSTNAME, connection.hostName) - } - 1 * span.setAttribute(Tags.PEER_PORT, connection.port) - if (connection.address instanceof Inet4Address) { - 1 * span.setAttribute(Tags.PEER_HOST_IPV4, connection.address.hostAddress) - } - if (connection.address instanceof Inet6Address) { - 1 * span.setAttribute(Tags.PEER_HOST_IPV6, connection.address.hostAddress) + 1 * span.setAttribute(MoreTags.NET_PEER_NAME, connection.hostName) } + 1 * span.setAttribute(MoreTags.NET_PEER_PORT, connection.port) 0 * _ where: diff --git a/agent-tooling/src/test/groovy/io/opentelemetry/auto/decorator/HttpClientDecoratorTest.groovy b/agent-tooling/src/test/groovy/io/opentelemetry/auto/decorator/HttpClientDecoratorTest.groovy index 0f0f3c6c00..1abdd14c70 100644 --- a/agent-tooling/src/test/groovy/io/opentelemetry/auto/decorator/HttpClientDecoratorTest.groovy +++ b/agent-tooling/src/test/groovy/io/opentelemetry/auto/decorator/HttpClientDecoratorTest.groovy @@ -44,8 +44,8 @@ class HttpClientDecoratorTest extends ClientDecoratorTest { if (req) { 1 * span.setAttribute(Tags.HTTP_METHOD, req.method) 1 * span.setAttribute(Tags.HTTP_URL, "$req.url") - 1 * span.setAttribute(Tags.PEER_HOSTNAME, req.host) - 1 * span.setAttribute(Tags.PEER_PORT, req.port) + 1 * span.setAttribute(MoreTags.NET_PEER_NAME, req.host) + 1 * span.setAttribute(MoreTags.NET_PEER_PORT, req.port) if (renameService) { 1 * span.setAttribute(MoreTags.SERVICE_NAME, req.host) } @@ -84,19 +84,19 @@ class HttpClientDecoratorTest extends ClientDecoratorTest { 0 * _ where: - tagQueryString | url | expectedUrl | expectedQuery | expectedFragment - false | null | null | null | null - false | "" | "/" | "" | null - false | "/path?query" | "/path" | "" | null - false | "https://host:0" | "https://host/" | "" | null - false | "https://host/path" | "https://host/path" | "" | null - false | "http://host:99/path?query#fragment" | "http://host:99/path" | "" | null - true | null | null | null | null - true | "" | "/" | null | null - true | "/path?encoded+%28query%29%3F" | "/path" | "encoded+(query)?" | null - true | "https://host:0" | "https://host/" | null | null - true | "https://host/path" | "https://host/path" | null | null - true | "http://host:99/path?query#encoded+%28fragment%29%3F" | "http://host:99/path" | "query" | "encoded+(fragment)?" + tagQueryString | url | expectedUrl | expectedQuery | expectedFragment + false | null | null | null | null + false | "" | "/" | "" | null + false | "/path?query" | "/path?query" | "" | null + false | "https://host:0" | "https://host/" | "" | null + false | "https://host/path" | "https://host/path" | "" | null + false | "http://host:99/path?query#fragment" | "http://host:99/path?query#fragment" | "" | null + true | null | null | null | null + true | "" | "/" | null | null + true | "/path?encoded+%28query%29%3F" | "/path?encoded+(query)?" | "encoded+(query)?" | null + true | "https://host:0" | "https://host/" | null | null + true | "https://host/path" | "https://host/path" | null | null + true | "http://host:99/path?query#encoded+%28fragment%29%3F" | "http://host:99/path?query#encoded+(fragment)?" | "query" | "encoded+(fragment)?" req = [url: url == null ? null : new URI(url)] } diff --git a/agent-tooling/src/test/groovy/io/opentelemetry/auto/decorator/HttpServerDecoratorTest.groovy b/agent-tooling/src/test/groovy/io/opentelemetry/auto/decorator/HttpServerDecoratorTest.groovy index 0d61f0a1f2..d0bdfe658e 100644 --- a/agent-tooling/src/test/groovy/io/opentelemetry/auto/decorator/HttpServerDecoratorTest.groovy +++ b/agent-tooling/src/test/groovy/io/opentelemetry/auto/decorator/HttpServerDecoratorTest.groovy @@ -44,7 +44,7 @@ class HttpServerDecoratorTest extends ServerDecoratorTest { where: req | url null | _ - [method: "test-method", url: URI.create("http://test-url?some=query")] | "http://test-url/" + [method: "test-method", url: URI.create("http://test-url?some=query")] | "http://test-url/?some=query" [method: "test-method", url: URI.create("http://a:80/")] | "http://a/" [method: "test-method", url: URI.create("https://10.0.0.1:443")] | "https://10.0.0.1/" [method: "test-method", url: URI.create("https://localhost:0/1/")] | "https://localhost/1/" @@ -76,20 +76,20 @@ class HttpServerDecoratorTest extends ServerDecoratorTest { 0 * _ where: - tagQueryString | url | expectedUrl | expectedQuery | expectedFragment - false | null | null | null | null - false | "" | "/" | "" | null - false | "/path?query" | "/path" | "" | null - false | "https://host:0" | "https://host/" | "" | null - false | "https://host/path" | "https://host/path" | "" | null - false | "http://host:99/path?query#fragment" | "http://host:99/path" | "" | null - true | null | null | null | null - true | "" | "/" | null | null - true | "/path?encoded+%28query%29%3F?" | "/path" | "encoded+(query)??" | null - true | "https://host:0" | "https://host/" | null | null - true | "https://host/path" | "https://host/path" | null | null - true | "http://host:99/path?query#enc+%28fragment%29%3F" | "http://host:99/path" | "query" | "enc+(fragment)?" - true | "http://host:99/path?query#enc+%28fragment%29%3F?tail" | "http://host:99/path" | "query" | "enc+(fragment)??tail" + tagQueryString | url | expectedUrl | expectedQuery | expectedFragment + false | null | null | null | null + false | "" | "/" | "" | null + false | "/path?query" | "/path?query" | "" | null + false | "https://host:0" | "https://host/" | "" | null + false | "https://host/path" | "https://host/path" | "" | null + false | "http://host:99/path?query#fragment" | "http://host:99/path?query#fragment" | "" | null + true | null | null | null | null + true | "" | "/" | null | null + true | "/path?encoded+%28query%29%3F?" | "/path?encoded+(query)??" | "encoded+(query)??" | null + true | "https://host:0" | "https://host/" | null | null + true | "https://host/path" | "https://host/path" | null | null + true | "http://host:99/path?query#enc+%28fragment%29%3F" | "http://host:99/path?query#enc+(fragment)?" | "query" | "enc+(fragment)?" + true | "http://host:99/path?query#enc+%28fragment%29%3F?tail" | "http://host:99/path?query#enc+(fragment)??tail" | "query" | "enc+(fragment)??tail" req = [url: url == null ? null : new URI(url)] } @@ -103,11 +103,11 @@ class HttpServerDecoratorTest extends ServerDecoratorTest { then: if (conn) { - 1 * span.setAttribute(Tags.PEER_PORT, 555) + 1 * span.setAttribute(MoreTags.NET_PEER_PORT, 555) if (ipv4) { - 1 * span.setAttribute(Tags.PEER_HOST_IPV4, "10.0.0.1") + 1 * span.setAttribute(MoreTags.NET_PEER_IP, "10.0.0.1") } else if (ipv4 != null) { - 1 * span.setAttribute(Tags.PEER_HOST_IPV6, "3ffe:1900:4545:3:200:f8ff:fe21:67cf") + 1 * span.setAttribute(MoreTags.NET_PEER_IP, "3ffe:1900:4545:3:200:f8ff:fe21:67cf") } } 0 * _ diff --git a/instrumentation/akka-http-10.0/src/lagomTest/groovy/LagomTest.groovy b/instrumentation/akka-http-10.0/src/lagomTest/groovy/LagomTest.groovy index 34401ad3df..57c77cd9a6 100644 --- a/instrumentation/akka-http-10.0/src/lagomTest/groovy/LagomTest.groovy +++ b/instrumentation/akka-http-10.0/src/lagomTest/groovy/LagomTest.groovy @@ -17,6 +17,7 @@ import akka.NotUsed import akka.stream.javadsl.Source import akka.stream.testkit.TestSubscriber.Probe import akka.stream.testkit.javadsl.TestSink +import io.opentelemetry.auto.decorator.HttpServerDecorator import io.opentelemetry.auto.instrumentation.api.MoreTags import io.opentelemetry.auto.instrumentation.api.SpanTypes import io.opentelemetry.auto.instrumentation.api.Tags @@ -76,7 +77,7 @@ class LagomTest extends AgentTestRunner { assertTraces(1) { trace(0, 2) { span(0) { - operationName "akka-http.request" + operationName expectedOperationName("GET") spanKind SERVER errored false tags { @@ -113,7 +114,7 @@ class LagomTest extends AgentTestRunner { assertTraces(1) { trace(0, 1) { span(0) { - operationName "akka-http.request" + operationName expectedOperationName("GET") spanKind SERVER errored true tags { @@ -127,4 +128,8 @@ class LagomTest extends AgentTestRunner { } } } + + String expectedOperationName(String method) { + return method != null ? "HTTP $method" : HttpServerDecorator.DEFAULT_SPAN_NAME + } } diff --git a/instrumentation/akka-http-10.0/src/main/java/io/opentelemetry/auto/instrumentation/akkahttp/AkkaHttpClientInstrumentation.java b/instrumentation/akka-http-10.0/src/main/java/io/opentelemetry/auto/instrumentation/akkahttp/AkkaHttpClientInstrumentation.java index 0e7b2956e9..041ee25470 100644 --- a/instrumentation/akka-http-10.0/src/main/java/io/opentelemetry/auto/instrumentation/akkahttp/AkkaHttpClientInstrumentation.java +++ b/instrumentation/akka-http-10.0/src/main/java/io/opentelemetry/auto/instrumentation/akkahttp/AkkaHttpClientInstrumentation.java @@ -96,7 +96,8 @@ public final class AkkaHttpClientInstrumentation extends Instrumenter.Default { return null; } - final Span span = TRACER.spanBuilder("akka-http.request").setSpanKind(CLIENT).startSpan(); + final Span span = + TRACER.spanBuilder(DECORATE.spanNameForRequest(request)).setSpanKind(CLIENT).startSpan(); DECORATE.afterStart(span); DECORATE.onRequest(span, request); diff --git a/instrumentation/akka-http-10.0/src/main/java/io/opentelemetry/auto/instrumentation/akkahttp/AkkaHttpServerInstrumentation.java b/instrumentation/akka-http-10.0/src/main/java/io/opentelemetry/auto/instrumentation/akkahttp/AkkaHttpServerInstrumentation.java index ad0daef911..72535c50e6 100644 --- a/instrumentation/akka-http-10.0/src/main/java/io/opentelemetry/auto/instrumentation/akkahttp/AkkaHttpServerInstrumentation.java +++ b/instrumentation/akka-http-10.0/src/main/java/io/opentelemetry/auto/instrumentation/akkahttp/AkkaHttpServerInstrumentation.java @@ -111,7 +111,8 @@ public final class AkkaHttpServerInstrumentation extends Instrumenter.Default { public static class WrapperHelper { public static SpanWithScope createSpan(final HttpRequest request) { - final Span.Builder spanBuilder = TRACER.spanBuilder("akka-http.request").setSpanKind(SERVER); + final Span.Builder spanBuilder = + TRACER.spanBuilder(DECORATE.spanNameForRequest(request)).setSpanKind(SERVER); try { final SpanContext extractedContext = TRACER.getHttpTextFormat().extract(request, GETTER); spanBuilder.setParent(extractedContext); diff --git a/instrumentation/akka-http-10.0/src/test/groovy/AkkaHttpClientInstrumentationTest.groovy b/instrumentation/akka-http-10.0/src/test/groovy/AkkaHttpClientInstrumentationTest.groovy index ed8ee7c3d9..2e54a52117 100644 --- a/instrumentation/akka-http-10.0/src/test/groovy/AkkaHttpClientInstrumentationTest.groovy +++ b/instrumentation/akka-http-10.0/src/test/groovy/AkkaHttpClientInstrumentationTest.groovy @@ -19,6 +19,7 @@ import akka.http.javadsl.model.HttpMethods import akka.http.javadsl.model.HttpRequest import akka.http.javadsl.model.headers.RawHeader import akka.stream.ActorMaterializer +import io.opentelemetry.auto.decorator.HttpClientDecorator import io.opentelemetry.auto.instrumentation.akkahttp.AkkaHttpClientDecorator import io.opentelemetry.auto.instrumentation.api.MoreTags import io.opentelemetry.auto.instrumentation.api.SpanTypes @@ -58,11 +59,6 @@ class AkkaHttpClientInstrumentationTest extends HttpClientTest futureCallback) { final Span parentSpan = TRACER.getCurrentSpan(); - final Span clientSpan = TRACER.spanBuilder("http.request").setSpanKind(CLIENT).startSpan(); + final Span clientSpan = TRACER.spanBuilder(DEFAULT_SPAN_NAME).setSpanKind(CLIENT).startSpan(); DECORATE.afterStart(clientSpan); requestProducer = new DelegatingRequestProducer(clientSpan, requestProducer); @@ -140,6 +141,7 @@ public class ApacheHttpAsyncClientInstrumentation extends Instrumenter.Default { @Override public HttpRequest generateRequest() throws IOException, HttpException { final HttpRequest request = delegate.generateRequest(); + span.updateName(DECORATE.spanNameForRequest(request)); DECORATE.onRequest(span, request); TRACER.getHttpTextFormat().inject(span.getContext(), request, SETTER); diff --git a/instrumentation/apache-httpclient/apache-httpclient-3.0/src/main/java/io/opentelemetry/auto/instrumentation/apachehttpclient/v3_0/ApacheHttpClientInstrumentation.java b/instrumentation/apache-httpclient/apache-httpclient-3.0/src/main/java/io/opentelemetry/auto/instrumentation/apachehttpclient/v3_0/ApacheHttpClientInstrumentation.java index ee9ca11fba..00f24f173e 100644 --- a/instrumentation/apache-httpclient/apache-httpclient-3.0/src/main/java/io/opentelemetry/auto/instrumentation/apachehttpclient/v3_0/ApacheHttpClientInstrumentation.java +++ b/instrumentation/apache-httpclient/apache-httpclient-3.0/src/main/java/io/opentelemetry/auto/instrumentation/apachehttpclient/v3_0/ApacheHttpClientInstrumentation.java @@ -85,7 +85,11 @@ public class ApacheHttpClientInstrumentation extends Instrumenter.Default { if (callDepth > 0) { return null; } - final Span span = TRACER.spanBuilder("http.request").setSpanKind(CLIENT).startSpan(); + final Span span = + TRACER + .spanBuilder(DECORATE.spanNameForRequest(httpMethod)) + .setSpanKind(CLIENT) + .startSpan(); final Scope scope = TRACER.withSpan(span); DECORATE.afterStart(span); diff --git a/instrumentation/apache-httpclient/apache-httpclient-4.0/src/main/java/io/opentelemetry/auto/instrumentation/apachehttpclient/ApacheHttpClientInstrumentation.java b/instrumentation/apache-httpclient/apache-httpclient-4.0/src/main/java/io/opentelemetry/auto/instrumentation/apachehttpclient/ApacheHttpClientInstrumentation.java index a5ec243b2e..7c774025fe 100644 --- a/instrumentation/apache-httpclient/apache-httpclient-4.0/src/main/java/io/opentelemetry/auto/instrumentation/apachehttpclient/ApacheHttpClientInstrumentation.java +++ b/instrumentation/apache-httpclient/apache-httpclient-4.0/src/main/java/io/opentelemetry/auto/instrumentation/apachehttpclient/ApacheHttpClientInstrumentation.java @@ -171,7 +171,8 @@ public class ApacheHttpClientInstrumentation extends Instrumenter.Default { public static class HelperMethods { public static SpanWithScope doMethodEnter(final HttpUriRequest request) { - final Span span = TRACER.spanBuilder("http.request").setSpanKind(CLIENT).startSpan(); + final Span span = + TRACER.spanBuilder(DECORATE.spanNameForRequest(request)).setSpanKind(CLIENT).startSpan(); final Scope scope = TRACER.withSpan(span); DECORATE.afterStart(span); diff --git a/instrumentation/aws-sdk/aws-sdk-1.11/src/main/java/io/opentelemetry/auto/instrumentation/aws/v0/TracingRequestHandler.java b/instrumentation/aws-sdk/aws-sdk-1.11/src/main/java/io/opentelemetry/auto/instrumentation/aws/v0/TracingRequestHandler.java index aa0a542fd3..bf0ed3c3c1 100644 --- a/instrumentation/aws-sdk/aws-sdk-1.11/src/main/java/io/opentelemetry/auto/instrumentation/aws/v0/TracingRequestHandler.java +++ b/instrumentation/aws-sdk/aws-sdk-1.11/src/main/java/io/opentelemetry/auto/instrumentation/aws/v0/TracingRequestHandler.java @@ -47,7 +47,8 @@ public class TracingRequestHandler extends RequestHandler2 { @Override public void beforeRequest(final Request request) { - final Span span = TRACER.spanBuilder("aws.http").setSpanKind(CLIENT).startSpan(); + final Span span = + TRACER.spanBuilder(decorate.spanNameForRequest(request)).setSpanKind(CLIENT).startSpan(); decorate.afterStart(span); decorate.onRequest(span, request); request.addHandlerContext( diff --git a/instrumentation/aws-sdk/aws-sdk-1.11/src/test/groovy/AWSClientTest.groovy b/instrumentation/aws-sdk/aws-sdk-1.11/src/test/groovy/AWSClientTest.groovy index 30edab1c77..b68b2c6966 100644 --- a/instrumentation/aws-sdk/aws-sdk-1.11/src/test/groovy/AWSClientTest.groovy +++ b/instrumentation/aws-sdk/aws-sdk-1.11/src/test/groovy/AWSClientTest.groovy @@ -43,6 +43,7 @@ import com.amazonaws.services.s3.AmazonS3ClientBuilder import com.amazonaws.services.sqs.AmazonSQSClientBuilder import com.amazonaws.services.sqs.model.CreateQueueRequest import com.amazonaws.services.sqs.model.SendMessageRequest +import io.opentelemetry.auto.decorator.HttpClientDecorator import io.opentelemetry.auto.instrumentation.api.MoreTags import io.opentelemetry.auto.instrumentation.api.SpanTypes import io.opentelemetry.auto.instrumentation.api.Tags @@ -150,7 +151,7 @@ class AWSClientTest extends AgentTestRunner { assertTraces(1) { trace(0, 2) { span(0) { - operationName "aws.http" + operationName expectedOperationName(method) spanKind CLIENT errored false parent() @@ -172,15 +173,15 @@ class AWSClientTest extends AgentTestRunner { } } span(1) { - operationName "http.request" + operationName expectedOperationName(method) spanKind CLIENT errored false childOf(span(0)) tags { "$MoreTags.SPAN_TYPE" SpanTypes.HTTP_CLIENT "$Tags.COMPONENT" "apache-httpclient" - "$Tags.PEER_HOSTNAME" "localhost" - "$Tags.PEER_PORT" server.address.port + "$MoreTags.NET_PEER_NAME" "localhost" + "$MoreTags.NET_PEER_PORT" server.address.port "$Tags.HTTP_URL" "${server.address}${path}" "$Tags.HTTP_METHOD" "$method" "$Tags.HTTP_STATUS" 200 @@ -241,7 +242,7 @@ class AWSClientTest extends AgentTestRunner { assertTraces(1) { trace(0, 2) { span(0) { - operationName "aws.http" + operationName expectedOperationName(method) spanKind CLIENT errored true parent() @@ -263,15 +264,15 @@ class AWSClientTest extends AgentTestRunner { } } span(1) { - operationName "http.request" + operationName expectedOperationName(method) spanKind CLIENT errored true childOf(span(0)) tags { "$MoreTags.SPAN_TYPE" SpanTypes.HTTP_CLIENT "$Tags.COMPONENT" "apache-httpclient" - "$Tags.PEER_HOSTNAME" "localhost" - "$Tags.PEER_PORT" UNUSABLE_PORT + "$MoreTags.NET_PEER_NAME" "localhost" + "$MoreTags.NET_PEER_PORT" UNUSABLE_PORT "$Tags.HTTP_URL" "http://localhost:${UNUSABLE_PORT}/$url" "$Tags.HTTP_METHOD" "$method" errorTags HttpHostConnectException, ~/Connection refused/ @@ -304,7 +305,7 @@ class AWSClientTest extends AgentTestRunner { assertTraces(1) { trace(0, 1) { span(0) { - operationName "aws.http" + operationName expectedOperationName("HEAD") spanKind CLIENT errored true parent() @@ -349,7 +350,7 @@ class AWSClientTest extends AgentTestRunner { assertTraces(1) { trace(0, 5) { span(0) { - operationName "aws.http" + operationName expectedOperationName("GET") spanKind CLIENT errored true parent() @@ -374,15 +375,15 @@ class AWSClientTest extends AgentTestRunner { } (1..4).each { span(it) { - operationName "http.request" + operationName expectedOperationName("GET") spanKind CLIENT errored true childOf(span(0)) tags { "$MoreTags.SPAN_TYPE" SpanTypes.HTTP_CLIENT "$Tags.COMPONENT" "apache-httpclient" - "$Tags.PEER_HOSTNAME" "localhost" - "$Tags.PEER_PORT" server.address.port + "$MoreTags.NET_PEER_NAME" "localhost" + "$MoreTags.NET_PEER_PORT" server.address.port "$Tags.HTTP_URL" "$server.address/someBucket/someKey" "$Tags.HTTP_METHOD" "GET" try { @@ -399,4 +400,8 @@ class AWSClientTest extends AgentTestRunner { cleanup: server.close() } + + String expectedOperationName(String method) { + return method != null ? "HTTP $method" : HttpClientDecorator.DEFAULT_SPAN_NAME + } } diff --git a/instrumentation/aws-sdk/aws-sdk-1.11/src/test_before_1_11_106/groovy/AWSClientTest.groovy b/instrumentation/aws-sdk/aws-sdk-1.11/src/test_before_1_11_106/groovy/AWSClientTest.groovy index ddc743596a..94a2a580e2 100644 --- a/instrumentation/aws-sdk/aws-sdk-1.11/src/test_before_1_11_106/groovy/AWSClientTest.groovy +++ b/instrumentation/aws-sdk/aws-sdk-1.11/src/test_before_1_11_106/groovy/AWSClientTest.groovy @@ -30,6 +30,7 @@ import com.amazonaws.services.rds.AmazonRDSClient import com.amazonaws.services.rds.model.DeleteOptionGroupRequest import com.amazonaws.services.s3.AmazonS3Client import com.amazonaws.services.s3.S3ClientOptions +import io.opentelemetry.auto.decorator.HttpClientDecorator import io.opentelemetry.auto.instrumentation.api.MoreTags import io.opentelemetry.auto.instrumentation.api.SpanTypes import io.opentelemetry.auto.instrumentation.api.Tags @@ -113,7 +114,7 @@ class AWSClientTest extends AgentTestRunner { assertTraces(1) { trace(0, 2) { span(0) { - operationName "aws.http" + operationName expectedOperationName(method) spanKind CLIENT errored false parent() @@ -135,15 +136,15 @@ class AWSClientTest extends AgentTestRunner { } } span(1) { - operationName "http.request" + operationName expectedOperationName(method) spanKind CLIENT errored false childOf(span(0)) tags { "$MoreTags.SPAN_TYPE" SpanTypes.HTTP_CLIENT "$Tags.COMPONENT" "apache-httpclient" - "$Tags.PEER_HOSTNAME" "localhost" - "$Tags.PEER_PORT" server.address.port + "$MoreTags.NET_PEER_NAME" "localhost" + "$MoreTags.NET_PEER_PORT" server.address.port "$Tags.HTTP_URL" "${server.address}${path}" "$Tags.HTTP_METHOD" "$method" "$Tags.HTTP_STATUS" 200 @@ -186,7 +187,7 @@ class AWSClientTest extends AgentTestRunner { assertTraces(1) { trace(0, 2) { span(0) { - operationName "aws.http" + operationName expectedOperationName(method) spanKind CLIENT errored true parent() @@ -208,15 +209,15 @@ class AWSClientTest extends AgentTestRunner { } } span(1) { - operationName "http.request" + operationName expectedOperationName(method) spanKind CLIENT errored true childOf(span(0)) tags { "$MoreTags.SPAN_TYPE" SpanTypes.HTTP_CLIENT "$Tags.COMPONENT" "apache-httpclient" - "$Tags.PEER_HOSTNAME" "localhost" - "$Tags.PEER_PORT" UNUSABLE_PORT + "$MoreTags.NET_PEER_NAME" "localhost" + "$MoreTags.NET_PEER_PORT" UNUSABLE_PORT "$Tags.HTTP_URL" "http://localhost:${UNUSABLE_PORT}/$url" "$Tags.HTTP_METHOD" "$method" errorTags HttpHostConnectException, ~/Connection refused/ @@ -249,7 +250,7 @@ class AWSClientTest extends AgentTestRunner { assertTraces(1) { trace(0, 1) { span(0) { - operationName "aws.http" + operationName expectedOperationName("GET") spanKind CLIENT errored true parent() @@ -295,7 +296,7 @@ class AWSClientTest extends AgentTestRunner { assertTraces(1) { trace(0, 5) { span(0) { - operationName "aws.http" + operationName expectedOperationName("GET") spanKind CLIENT errored true parent() @@ -316,15 +317,15 @@ class AWSClientTest extends AgentTestRunner { } (1..4).each { span(it) { - operationName "http.request" + operationName expectedOperationName("GET") spanKind CLIENT errored true childOf(span(0)) tags { "$MoreTags.SPAN_TYPE" SpanTypes.HTTP_CLIENT "$Tags.COMPONENT" "apache-httpclient" - "$Tags.PEER_HOSTNAME" "localhost" - "$Tags.PEER_PORT" server.address.port + "$MoreTags.NET_PEER_NAME" "localhost" + "$MoreTags.NET_PEER_PORT" server.address.port "$Tags.HTTP_URL" "$server.address/someBucket/someKey" "$Tags.HTTP_METHOD" "GET" try { @@ -341,4 +342,8 @@ class AWSClientTest extends AgentTestRunner { cleanup: server.close() } + + String expectedOperationName(String method) { + return method != null ? "HTTP $method" : HttpClientDecorator.DEFAULT_SPAN_NAME + } } diff --git a/instrumentation/aws-sdk/aws-sdk-2.2/src/main/java8/io/opentelemetry/auto/instrumentation/aws/v2/TracingExecutionInterceptor.java b/instrumentation/aws-sdk/aws-sdk-2.2/src/main/java8/io/opentelemetry/auto/instrumentation/aws/v2/TracingExecutionInterceptor.java index b83bff0f71..4a72955c61 100644 --- a/instrumentation/aws-sdk/aws-sdk-2.2/src/main/java8/io/opentelemetry/auto/instrumentation/aws/v2/TracingExecutionInterceptor.java +++ b/instrumentation/aws-sdk/aws-sdk-2.2/src/main/java8/io/opentelemetry/auto/instrumentation/aws/v2/TracingExecutionInterceptor.java @@ -15,6 +15,7 @@ */ package io.opentelemetry.auto.instrumentation.aws.v2; +import static io.opentelemetry.auto.decorator.HttpClientDecorator.DEFAULT_SPAN_NAME; import static io.opentelemetry.auto.instrumentation.aws.v2.AwsSdkClientDecorator.DECORATE; import static io.opentelemetry.auto.instrumentation.aws.v2.AwsSdkClientDecorator.TRACER; import static io.opentelemetry.trace.Span.Kind.CLIENT; @@ -48,7 +49,7 @@ public class TracingExecutionInterceptor implements ExecutionInterceptor { @Override public void beforeExecution( final Context.BeforeExecution context, final ExecutionAttributes executionAttributes) { - final Span span = TRACER.spanBuilder("aws.http").setSpanKind(CLIENT).startSpan(); + final Span span = TRACER.spanBuilder(DEFAULT_SPAN_NAME).setSpanKind(CLIENT).startSpan(); try (final Scope scope = TRACER.withSpan(span)) { DECORATE.afterStart(span); executionAttributes.putAttribute(SPAN_ATTRIBUTE, span); @@ -60,6 +61,7 @@ public class TracingExecutionInterceptor implements ExecutionInterceptor { final Context.AfterMarshalling context, final ExecutionAttributes executionAttributes) { final Span span = executionAttributes.getAttribute(SPAN_ATTRIBUTE); + span.updateName(DECORATE.spanNameForRequest(context.httpRequest())); DECORATE.onRequest(span, context.httpRequest()); DECORATE.onSdkRequest(span, context.request()); DECORATE.onAttributes(span, executionAttributes); diff --git a/instrumentation/aws-sdk/aws-sdk-2.2/src/test/groovy/AwsClientTest.groovy b/instrumentation/aws-sdk/aws-sdk-2.2/src/test/groovy/AwsClientTest.groovy index 712dc758f0..3d174567a8 100644 --- a/instrumentation/aws-sdk/aws-sdk-2.2/src/test/groovy/AwsClientTest.groovy +++ b/instrumentation/aws-sdk/aws-sdk-2.2/src/test/groovy/AwsClientTest.groovy @@ -13,6 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ +import io.opentelemetry.auto.decorator.HttpClientDecorator import io.opentelemetry.auto.instrumentation.api.MoreTags import io.opentelemetry.auto.instrumentation.api.SpanTypes import io.opentelemetry.auto.instrumentation.api.Tags @@ -91,7 +92,7 @@ class AwsClientTest extends AgentTestRunner { assertTraces(1) { trace(0, 2) { span(0) { - operationName "aws.http" + operationName expectedOperationName(method) spanKind CLIENT errored false parent() @@ -100,9 +101,9 @@ class AwsClientTest extends AgentTestRunner { "$MoreTags.RESOURCE_NAME" "$service.$operation" "$MoreTags.SPAN_TYPE" SpanTypes.HTTP_CLIENT "$Tags.COMPONENT" "java-aws-sdk" - "$Tags.PEER_HOSTNAME" "localhost" - "$Tags.PEER_PORT" server.address.port - "$Tags.HTTP_URL" "${server.address}${path}" + "$MoreTags.NET_PEER_NAME" "localhost" + "$MoreTags.NET_PEER_PORT" server.address.port + "$Tags.HTTP_URL" { it.startsWith("${server.address}${path}") } "$Tags.HTTP_METHOD" "$method" "$Tags.HTTP_STATUS" 200 "aws.service" "$service" @@ -123,16 +124,16 @@ class AwsClientTest extends AgentTestRunner { } } span(1) { - operationName "http.request" + operationName expectedOperationName(method) spanKind CLIENT errored false childOf(span(0)) tags { "$MoreTags.SPAN_TYPE" SpanTypes.HTTP_CLIENT "$Tags.COMPONENT" "apache-httpclient" - "$Tags.PEER_HOSTNAME" "localhost" - "$Tags.PEER_PORT" server.address.port - "$Tags.HTTP_URL" "${server.address}${path}" + "$MoreTags.NET_PEER_NAME" "localhost" + "$MoreTags.NET_PEER_PORT" server.address.port + "$Tags.HTTP_URL" { it.startsWith("${server.address}${path}") } "$Tags.HTTP_METHOD" "$method" "$Tags.HTTP_STATUS" 200 } @@ -197,7 +198,7 @@ class AwsClientTest extends AgentTestRunner { assertTraces(2) { trace(0, 1) { span(0) { - operationName "aws.http" + operationName expectedOperationName(method) spanKind CLIENT errored false parent() @@ -206,9 +207,9 @@ class AwsClientTest extends AgentTestRunner { "$MoreTags.RESOURCE_NAME" "$service.$operation" "$MoreTags.SPAN_TYPE" SpanTypes.HTTP_CLIENT "$Tags.COMPONENT" "java-aws-sdk" - "$Tags.PEER_HOSTNAME" "localhost" - "$Tags.PEER_PORT" server.address.port - "$Tags.HTTP_URL" "${server.address}${path}" + "$MoreTags.NET_PEER_NAME" "localhost" + "$MoreTags.NET_PEER_PORT" server.address.port + "$Tags.HTTP_URL" { it.startsWith("${server.address}${path}") } "$Tags.HTTP_METHOD" "$method" "$Tags.HTTP_STATUS" 200 "aws.service" "$service" @@ -232,17 +233,17 @@ class AwsClientTest extends AgentTestRunner { // TODO: this should be part of the same trace but netty instrumentation doesn't cooperate trace(1, 1) { span(0) { - operationName "netty.client.request" + operationName expectedOperationName(method) spanKind CLIENT errored false parent() tags { "$MoreTags.SPAN_TYPE" SpanTypes.HTTP_CLIENT "$Tags.COMPONENT" "netty-client" - "$Tags.PEER_HOSTNAME" "localhost" - "$Tags.PEER_HOST_IPV4" "127.0.0.1" - "$Tags.PEER_PORT" server.address.port - "$Tags.HTTP_URL" "${server.address}${path}" + "$MoreTags.NET_PEER_NAME" "localhost" + "$MoreTags.NET_PEER_IP" "127.0.0.1" + "$MoreTags.NET_PEER_PORT" server.address.port + "$Tags.HTTP_URL" { it.startsWith("${server.address}${path}") } "$Tags.HTTP_METHOD" "$method" "$Tags.HTTP_STATUS" 200 } @@ -314,7 +315,7 @@ class AwsClientTest extends AgentTestRunner { assertTraces(1) { trace(0, 5) { span(0) { - operationName "aws.http" + operationName expectedOperationName("GET") spanKind CLIENT errored true parent() @@ -323,8 +324,8 @@ class AwsClientTest extends AgentTestRunner { "$MoreTags.RESOURCE_NAME" "S3.GetObject" "$MoreTags.SPAN_TYPE" SpanTypes.HTTP_CLIENT "$Tags.COMPONENT" "java-aws-sdk" - "$Tags.PEER_HOSTNAME" "localhost" - "$Tags.PEER_PORT" server.address.port + "$MoreTags.NET_PEER_NAME" "localhost" + "$MoreTags.NET_PEER_PORT" server.address.port "$Tags.HTTP_URL" "$server.address/somebucket/somekey" "$Tags.HTTP_METHOD" "GET" "aws.service" "S3" @@ -336,15 +337,15 @@ class AwsClientTest extends AgentTestRunner { } (1..4).each { span(it) { - operationName "http.request" + operationName expectedOperationName("GET") spanKind CLIENT errored true childOf(span(0)) tags { "$MoreTags.SPAN_TYPE" SpanTypes.HTTP_CLIENT "$Tags.COMPONENT" "apache-httpclient" - "$Tags.PEER_HOSTNAME" "localhost" - "$Tags.PEER_PORT" server.address.port + "$MoreTags.NET_PEER_NAME" "localhost" + "$MoreTags.NET_PEER_PORT" server.address.port "$Tags.HTTP_URL" "$server.address/somebucket/somekey" "$Tags.HTTP_METHOD" "GET" errorTags SocketTimeoutException, "Read timed out" @@ -357,4 +358,8 @@ class AwsClientTest extends AgentTestRunner { cleanup: server.close() } + + String expectedOperationName(String method) { + return method != null ? "HTTP $method" : HttpClientDecorator.DEFAULT_SPAN_NAME + } } diff --git a/instrumentation/cassandra-3.0/src/main/java/io/opentelemetry/auto/instrumentation/datastax/cassandra/CassandraClientDecorator.java b/instrumentation/cassandra-3.0/src/main/java/io/opentelemetry/auto/instrumentation/datastax/cassandra/CassandraClientDecorator.java index c4c0dbaecb..11af1f5c57 100644 --- a/instrumentation/cassandra-3.0/src/main/java/io/opentelemetry/auto/instrumentation/datastax/cassandra/CassandraClientDecorator.java +++ b/instrumentation/cassandra-3.0/src/main/java/io/opentelemetry/auto/instrumentation/datastax/cassandra/CassandraClientDecorator.java @@ -20,7 +20,6 @@ import com.datastax.driver.core.ResultSet; import com.datastax.driver.core.Session; import io.opentelemetry.auto.decorator.DatabaseClientDecorator; import io.opentelemetry.auto.instrumentation.api.SpanTypes; -import io.opentelemetry.auto.instrumentation.api.Tags; import io.opentelemetry.trace.Span; public class CassandraClientDecorator extends DatabaseClientDecorator { @@ -59,8 +58,7 @@ public class CassandraClientDecorator extends DatabaseClientDecorator { public Span onResponse(final Span span, final ResultSet result) { if (result != null) { final Host host = result.getExecutionInfo().getQueriedHost(); - span.setAttribute(Tags.PEER_PORT, host.getSocketAddress().getPort()); - onPeerConnection(span, host.getSocketAddress().getAddress()); + onPeerConnection(span, host.getSocketAddress()); } return span; } diff --git a/instrumentation/cassandra-3.0/src/test/groovy/CassandraClientTest.groovy b/instrumentation/cassandra-3.0/src/test/groovy/CassandraClientTest.groovy index e15af5226c..5e5e68c64e 100644 --- a/instrumentation/cassandra-3.0/src/test/groovy/CassandraClientTest.groovy +++ b/instrumentation/cassandra-3.0/src/test/groovy/CassandraClientTest.groovy @@ -136,9 +136,9 @@ class CassandraClientTest extends AgentTestRunner { "$MoreTags.SERVICE_NAME" renameService && keyspace ? keyspace : "cassandra" "$MoreTags.SPAN_TYPE" SpanTypes.CASSANDRA "$Tags.COMPONENT" "java-cassandra" - "$Tags.PEER_HOSTNAME" "localhost" - "$Tags.PEER_HOST_IPV4" "127.0.0.1" - "$Tags.PEER_PORT" EmbeddedCassandraServerHelper.getNativeTransportPort() + "$MoreTags.NET_PEER_NAME" "localhost" + "$MoreTags.NET_PEER_IP" "127.0.0.1" + "$MoreTags.NET_PEER_PORT" EmbeddedCassandraServerHelper.getNativeTransportPort() "$Tags.DB_TYPE" "cassandra" "$Tags.DB_INSTANCE" keyspace "$Tags.DB_STATEMENT" statement diff --git a/instrumentation/couchbase/couchbase-2.6/src/main/java/io/opentelemetry/auto/instrumentation/couchbase/client/CouchbaseNetworkInstrumentation.java b/instrumentation/couchbase/couchbase-2.6/src/main/java/io/opentelemetry/auto/instrumentation/couchbase/client/CouchbaseNetworkInstrumentation.java index 416b791f0a..d198d72089 100644 --- a/instrumentation/couchbase/couchbase-2.6/src/main/java/io/opentelemetry/auto/instrumentation/couchbase/client/CouchbaseNetworkInstrumentation.java +++ b/instrumentation/couchbase/couchbase-2.6/src/main/java/io/opentelemetry/auto/instrumentation/couchbase/client/CouchbaseNetworkInstrumentation.java @@ -30,7 +30,7 @@ import com.couchbase.client.java.transcoder.crypto.JsonCryptoTranscoder; import com.google.auto.service.AutoService; import io.opentelemetry.auto.bootstrap.ContextStore; import io.opentelemetry.auto.bootstrap.InstrumentationContext; -import io.opentelemetry.auto.instrumentation.api.Tags; +import io.opentelemetry.auto.instrumentation.api.MoreTags; import io.opentelemetry.auto.tooling.Instrumenter; import io.opentelemetry.trace.Span; import java.util.Map; @@ -92,13 +92,13 @@ public class CouchbaseNetworkInstrumentation extends Instrumenter.Default { final Span span = contextStore.get(request); if (span != null) { - span.setAttribute(Tags.PEER_HOSTNAME, remoteHostname); + span.setAttribute(MoreTags.NET_PEER_NAME, remoteHostname); if (remoteSocket != null) { final int splitIndex = remoteSocket.lastIndexOf(":"); if (splitIndex != -1) { span.setAttribute( - Tags.PEER_PORT, Integer.parseInt(remoteSocket.substring(splitIndex + 1))); + MoreTags.NET_PEER_PORT, Integer.parseInt(remoteSocket.substring(splitIndex + 1))); } } diff --git a/instrumentation/couchbase/couchbase-2.6/src/test/groovy/CouchbaseSpanUtil.groovy b/instrumentation/couchbase/couchbase-2.6/src/test/groovy/CouchbaseSpanUtil.groovy index 40bf8f804c..3114e4f3d1 100644 --- a/instrumentation/couchbase/couchbase-2.6/src/test/groovy/CouchbaseSpanUtil.groovy +++ b/instrumentation/couchbase/couchbase-2.6/src/test/groovy/CouchbaseSpanUtil.groovy @@ -41,8 +41,8 @@ class CouchbaseSpanUtil { "$Tags.COMPONENT" "couchbase-client" // Because of caching, not all requests hit the server so these tags may be absent - "$Tags.PEER_HOSTNAME" { it == "localhost" || it == "127.0.0.1" || it == null } - "$Tags.PEER_PORT" { it == null || Number } + "$MoreTags.NET_PEER_NAME" { it == "localhost" || it == "127.0.0.1" || it == null } + "$MoreTags.NET_PEER_PORT" { it == null || Number } "$Tags.DB_TYPE" "couchbase" if (bucketName != null) { diff --git a/instrumentation/dropwizard-testing/src/test/groovy/DropwizardAsyncTest.groovy b/instrumentation/dropwizard-testing/src/test/groovy/DropwizardAsyncTest.groovy index 991c70636a..395fc9b648 100644 --- a/instrumentation/dropwizard-testing/src/test/groovy/DropwizardAsyncTest.groovy +++ b/instrumentation/dropwizard-testing/src/test/groovy/DropwizardAsyncTest.groovy @@ -20,6 +20,7 @@ import io.dropwizard.setup.Environment import javax.ws.rs.GET import javax.ws.rs.Path +import javax.ws.rs.PathParam import javax.ws.rs.QueryParam import javax.ws.rs.container.AsyncResponse import javax.ws.rs.container.Suspended @@ -28,6 +29,7 @@ import java.util.concurrent.Executors import static io.opentelemetry.auto.test.base.HttpServerTest.ServerEndpoint.ERROR import static io.opentelemetry.auto.test.base.HttpServerTest.ServerEndpoint.EXCEPTION +import static io.opentelemetry.auto.test.base.HttpServerTest.ServerEndpoint.PATH_PARAM import static io.opentelemetry.auto.test.base.HttpServerTest.ServerEndpoint.QUERY_PARAM import static io.opentelemetry.auto.test.base.HttpServerTest.ServerEndpoint.REDIRECT import static io.opentelemetry.auto.test.base.HttpServerTest.ServerEndpoint.SUCCESS @@ -106,5 +108,15 @@ class DropwizardAsyncTest extends DropwizardTest { } } } + + @GET + @Path("path/{id}/param") + Response path_param(@PathParam("id") int param, @Suspended final AsyncResponse asyncResponse) { + executor.execute { + controller(PATH_PARAM) { + asyncResponse.resume(Response.status(PATH_PARAM.status).entity(param.toString()).build()) + } + } + } } } diff --git a/instrumentation/dropwizard-testing/src/test/groovy/DropwizardTest.groovy b/instrumentation/dropwizard-testing/src/test/groovy/DropwizardTest.groovy index 000f9ca299..9213d60c38 100644 --- a/instrumentation/dropwizard-testing/src/test/groovy/DropwizardTest.groovy +++ b/instrumentation/dropwizard-testing/src/test/groovy/DropwizardTest.groovy @@ -32,11 +32,13 @@ import org.eclipse.jetty.servlet.ServletHandler import javax.ws.rs.GET import javax.ws.rs.Path +import javax.ws.rs.PathParam import javax.ws.rs.QueryParam import javax.ws.rs.core.Response import static io.opentelemetry.auto.test.base.HttpServerTest.ServerEndpoint.ERROR import static io.opentelemetry.auto.test.base.HttpServerTest.ServerEndpoint.EXCEPTION +import static io.opentelemetry.auto.test.base.HttpServerTest.ServerEndpoint.PATH_PARAM import static io.opentelemetry.auto.test.base.HttpServerTest.ServerEndpoint.QUERY_PARAM import static io.opentelemetry.auto.test.base.HttpServerTest.ServerEndpoint.REDIRECT import static io.opentelemetry.auto.test.base.HttpServerTest.ServerEndpoint.SUCCESS @@ -79,11 +81,6 @@ class DropwizardTest extends HttpServerTest implements Action @Override public void onResponse(final T response) { if (response.remoteAddress() != null) { - span.setAttribute(Tags.PEER_HOSTNAME, response.remoteAddress().getHost()); - span.setAttribute(Tags.PEER_HOST_IPV4, response.remoteAddress().getAddress()); - span.setAttribute(Tags.PEER_PORT, response.remoteAddress().getPort()); + span.setAttribute(MoreTags.NET_PEER_NAME, response.remoteAddress().getHost()); + span.setAttribute(MoreTags.NET_PEER_IP, response.remoteAddress().getAddress()); + span.setAttribute(MoreTags.NET_PEER_PORT, response.remoteAddress().getPort()); } if (response instanceof GetResponse) { diff --git a/instrumentation/elasticsearch/elasticsearch-transport-2.0/src/test/groovy/Elasticsearch2NodeClientTest.groovy b/instrumentation/elasticsearch/elasticsearch-transport-2.0/src/test/groovy/Elasticsearch2NodeClientTest.groovy index 9a7085f098..7411dd981e 100644 --- a/instrumentation/elasticsearch/elasticsearch-transport-2.0/src/test/groovy/Elasticsearch2NodeClientTest.groovy +++ b/instrumentation/elasticsearch/elasticsearch-transport-2.0/src/test/groovy/Elasticsearch2NodeClientTest.groovy @@ -226,9 +226,9 @@ class Elasticsearch2NodeClientTest extends AgentTestRunner { "$MoreTags.RESOURCE_NAME" "GetAction" "$MoreTags.SPAN_TYPE" SpanTypes.ELASTICSEARCH "$Tags.COMPONENT" "elasticsearch-java" - "$Tags.PEER_HOSTNAME" "local" - "$Tags.PEER_HOST_IPV4" "0.0.0.0" - "$Tags.PEER_PORT" 0 + "$MoreTags.NET_PEER_NAME" "local" + "$MoreTags.NET_PEER_IP" "0.0.0.0" + "$MoreTags.NET_PEER_PORT" 0 "$Tags.DB_TYPE" "elasticsearch" "elasticsearch.action" "GetAction" "elasticsearch.request" "GetRequest" @@ -264,9 +264,9 @@ class Elasticsearch2NodeClientTest extends AgentTestRunner { "$MoreTags.RESOURCE_NAME" "IndexAction" "$MoreTags.SPAN_TYPE" SpanTypes.ELASTICSEARCH "$Tags.COMPONENT" "elasticsearch-java" - "$Tags.PEER_HOSTNAME" "local" - "$Tags.PEER_HOST_IPV4" "0.0.0.0" - "$Tags.PEER_PORT" 0 + "$MoreTags.NET_PEER_NAME" "local" + "$MoreTags.NET_PEER_IP" "0.0.0.0" + "$MoreTags.NET_PEER_PORT" 0 "$Tags.DB_TYPE" "elasticsearch" "elasticsearch.action" "IndexAction" "elasticsearch.request" "IndexRequest" @@ -284,9 +284,9 @@ class Elasticsearch2NodeClientTest extends AgentTestRunner { "$MoreTags.RESOURCE_NAME" "GetAction" "$MoreTags.SPAN_TYPE" SpanTypes.ELASTICSEARCH "$Tags.COMPONENT" "elasticsearch-java" - "$Tags.PEER_HOSTNAME" "local" - "$Tags.PEER_HOST_IPV4" "0.0.0.0" - "$Tags.PEER_PORT" 0 + "$MoreTags.NET_PEER_NAME" "local" + "$MoreTags.NET_PEER_IP" "0.0.0.0" + "$MoreTags.NET_PEER_PORT" 0 "$Tags.DB_TYPE" "elasticsearch" "elasticsearch.action" "GetAction" "elasticsearch.request" "GetRequest" diff --git a/instrumentation/elasticsearch/elasticsearch-transport-2.0/src/test/groovy/Elasticsearch2TransportClientTest.groovy b/instrumentation/elasticsearch/elasticsearch-transport-2.0/src/test/groovy/Elasticsearch2TransportClientTest.groovy index 48341d5423..0274611931 100644 --- a/instrumentation/elasticsearch/elasticsearch-transport-2.0/src/test/groovy/Elasticsearch2TransportClientTest.groovy +++ b/instrumentation/elasticsearch/elasticsearch-transport-2.0/src/test/groovy/Elasticsearch2TransportClientTest.groovy @@ -107,9 +107,9 @@ class Elasticsearch2TransportClientTest extends AgentTestRunner { "$MoreTags.RESOURCE_NAME" "ClusterHealthAction" "$MoreTags.SPAN_TYPE" SpanTypes.ELASTICSEARCH "$Tags.COMPONENT" "elasticsearch-java" - "$Tags.PEER_HOSTNAME" "127.0.0.1" - "$Tags.PEER_HOST_IPV4" "127.0.0.1" - "$Tags.PEER_PORT" tcpPort + "$MoreTags.NET_PEER_NAME" "127.0.0.1" + "$MoreTags.NET_PEER_IP" "127.0.0.1" + "$MoreTags.NET_PEER_PORT" tcpPort "$Tags.DB_TYPE" "elasticsearch" "elasticsearch.action" "ClusterHealthAction" "elasticsearch.request" "ClusterHealthRequest" @@ -139,9 +139,9 @@ class Elasticsearch2TransportClientTest extends AgentTestRunner { "$MoreTags.RESOURCE_NAME" "ClusterStatsAction" "$MoreTags.SPAN_TYPE" SpanTypes.ELASTICSEARCH "$Tags.COMPONENT" "elasticsearch-java" - "$Tags.PEER_HOSTNAME" "127.0.0.1" - "$Tags.PEER_HOST_IPV4" "127.0.0.1" - "$Tags.PEER_PORT" tcpPort + "$MoreTags.NET_PEER_NAME" "127.0.0.1" + "$MoreTags.NET_PEER_IP" "127.0.0.1" + "$MoreTags.NET_PEER_PORT" tcpPort "$Tags.DB_TYPE" "elasticsearch" "elasticsearch.action" "ClusterStatsAction" "elasticsearch.request" "ClusterStatsRequest" @@ -243,9 +243,9 @@ class Elasticsearch2TransportClientTest extends AgentTestRunner { "$MoreTags.RESOURCE_NAME" "CreateIndexAction" "$MoreTags.SPAN_TYPE" SpanTypes.ELASTICSEARCH "$Tags.COMPONENT" "elasticsearch-java" - "$Tags.PEER_HOSTNAME" "127.0.0.1" - "$Tags.PEER_HOST_IPV4" "127.0.0.1" - "$Tags.PEER_PORT" tcpPort + "$MoreTags.NET_PEER_NAME" "127.0.0.1" + "$MoreTags.NET_PEER_IP" "127.0.0.1" + "$MoreTags.NET_PEER_PORT" tcpPort "$Tags.DB_TYPE" "elasticsearch" "elasticsearch.action" "CreateIndexAction" "elasticsearch.request" "CreateIndexRequest" @@ -262,9 +262,9 @@ class Elasticsearch2TransportClientTest extends AgentTestRunner { "$MoreTags.RESOURCE_NAME" "ClusterHealthAction" "$MoreTags.SPAN_TYPE" SpanTypes.ELASTICSEARCH "$Tags.COMPONENT" "elasticsearch-java" - "$Tags.PEER_HOSTNAME" "127.0.0.1" - "$Tags.PEER_HOST_IPV4" "127.0.0.1" - "$Tags.PEER_PORT" tcpPort + "$MoreTags.NET_PEER_NAME" "127.0.0.1" + "$MoreTags.NET_PEER_IP" "127.0.0.1" + "$MoreTags.NET_PEER_PORT" tcpPort "$Tags.DB_TYPE" "elasticsearch" "elasticsearch.action" "ClusterHealthAction" "elasticsearch.request" "ClusterHealthRequest" @@ -280,9 +280,9 @@ class Elasticsearch2TransportClientTest extends AgentTestRunner { "$MoreTags.RESOURCE_NAME" "GetAction" "$MoreTags.SPAN_TYPE" SpanTypes.ELASTICSEARCH "$Tags.COMPONENT" "elasticsearch-java" - "$Tags.PEER_HOSTNAME" "127.0.0.1" - "$Tags.PEER_HOST_IPV4" "127.0.0.1" - "$Tags.PEER_PORT" tcpPort + "$MoreTags.NET_PEER_NAME" "127.0.0.1" + "$MoreTags.NET_PEER_IP" "127.0.0.1" + "$MoreTags.NET_PEER_PORT" tcpPort "$Tags.DB_TYPE" "elasticsearch" "elasticsearch.action" "GetAction" "elasticsearch.request" "GetRequest" @@ -318,9 +318,9 @@ class Elasticsearch2TransportClientTest extends AgentTestRunner { "$MoreTags.RESOURCE_NAME" "IndexAction" "$MoreTags.SPAN_TYPE" SpanTypes.ELASTICSEARCH "$Tags.COMPONENT" "elasticsearch-java" - "$Tags.PEER_HOSTNAME" "127.0.0.1" - "$Tags.PEER_HOST_IPV4" "127.0.0.1" - "$Tags.PEER_PORT" tcpPort + "$MoreTags.NET_PEER_NAME" "127.0.0.1" + "$MoreTags.NET_PEER_IP" "127.0.0.1" + "$MoreTags.NET_PEER_PORT" tcpPort "$Tags.DB_TYPE" "elasticsearch" "elasticsearch.action" "IndexAction" "elasticsearch.request" "IndexRequest" @@ -338,9 +338,9 @@ class Elasticsearch2TransportClientTest extends AgentTestRunner { "$MoreTags.RESOURCE_NAME" "GetAction" "$MoreTags.SPAN_TYPE" SpanTypes.ELASTICSEARCH "$Tags.COMPONENT" "elasticsearch-java" - "$Tags.PEER_HOSTNAME" "127.0.0.1" - "$Tags.PEER_HOST_IPV4" "127.0.0.1" - "$Tags.PEER_PORT" tcpPort + "$MoreTags.NET_PEER_NAME" "127.0.0.1" + "$MoreTags.NET_PEER_IP" "127.0.0.1" + "$MoreTags.NET_PEER_PORT" tcpPort "$Tags.DB_TYPE" "elasticsearch" "elasticsearch.action" "GetAction" "elasticsearch.request" "GetRequest" diff --git a/instrumentation/elasticsearch/elasticsearch-transport-2.0/src/test/groovy/springdata/Elasticsearch2SpringRepositoryTest.groovy b/instrumentation/elasticsearch/elasticsearch-transport-2.0/src/test/groovy/springdata/Elasticsearch2SpringRepositoryTest.groovy index 71e6a8ad22..087a4eccd3 100644 --- a/instrumentation/elasticsearch/elasticsearch-transport-2.0/src/test/groovy/springdata/Elasticsearch2SpringRepositoryTest.groovy +++ b/instrumentation/elasticsearch/elasticsearch-transport-2.0/src/test/groovy/springdata/Elasticsearch2SpringRepositoryTest.groovy @@ -98,9 +98,9 @@ class Elasticsearch2SpringRepositoryTest extends AgentTestRunner { "$MoreTags.RESOURCE_NAME" "IndexAction" "$MoreTags.SPAN_TYPE" SpanTypes.ELASTICSEARCH "$Tags.COMPONENT" "elasticsearch-java" - "$Tags.PEER_HOSTNAME" "local" - "$Tags.PEER_HOST_IPV4" "0.0.0.0" - "$Tags.PEER_PORT" 0 + "$MoreTags.NET_PEER_NAME" "local" + "$MoreTags.NET_PEER_IP" "0.0.0.0" + "$MoreTags.NET_PEER_PORT" 0 "$Tags.DB_TYPE" "elasticsearch" "elasticsearch.action" "IndexAction" "elasticsearch.request" "IndexRequest" @@ -145,9 +145,9 @@ class Elasticsearch2SpringRepositoryTest extends AgentTestRunner { "$MoreTags.RESOURCE_NAME" "GetAction" "$MoreTags.SPAN_TYPE" SpanTypes.ELASTICSEARCH "$Tags.COMPONENT" "elasticsearch-java" - "$Tags.PEER_HOSTNAME" "local" - "$Tags.PEER_HOST_IPV4" "0.0.0.0" - "$Tags.PEER_PORT" 0 + "$MoreTags.NET_PEER_NAME" "local" + "$MoreTags.NET_PEER_IP" "0.0.0.0" + "$MoreTags.NET_PEER_PORT" 0 "$Tags.DB_TYPE" "elasticsearch" "elasticsearch.action" "GetAction" "elasticsearch.request" "GetRequest" @@ -179,9 +179,9 @@ class Elasticsearch2SpringRepositoryTest extends AgentTestRunner { "$MoreTags.RESOURCE_NAME" "IndexAction" "$MoreTags.SPAN_TYPE" SpanTypes.ELASTICSEARCH "$Tags.COMPONENT" "elasticsearch-java" - "$Tags.PEER_HOSTNAME" "local" - "$Tags.PEER_HOST_IPV4" "0.0.0.0" - "$Tags.PEER_PORT" 0 + "$MoreTags.NET_PEER_NAME" "local" + "$MoreTags.NET_PEER_IP" "0.0.0.0" + "$MoreTags.NET_PEER_PORT" 0 "$Tags.DB_TYPE" "elasticsearch" "elasticsearch.action" "IndexAction" "elasticsearch.request" "IndexRequest" @@ -218,9 +218,9 @@ class Elasticsearch2SpringRepositoryTest extends AgentTestRunner { "$MoreTags.RESOURCE_NAME" "GetAction" "$MoreTags.SPAN_TYPE" SpanTypes.ELASTICSEARCH "$Tags.COMPONENT" "elasticsearch-java" - "$Tags.PEER_HOSTNAME" "local" - "$Tags.PEER_HOST_IPV4" "0.0.0.0" - "$Tags.PEER_PORT" 0 + "$MoreTags.NET_PEER_NAME" "local" + "$MoreTags.NET_PEER_IP" "0.0.0.0" + "$MoreTags.NET_PEER_PORT" 0 "$Tags.DB_TYPE" "elasticsearch" "elasticsearch.action" "GetAction" "elasticsearch.request" "GetRequest" @@ -251,9 +251,9 @@ class Elasticsearch2SpringRepositoryTest extends AgentTestRunner { "$MoreTags.RESOURCE_NAME" "DeleteAction" "$MoreTags.SPAN_TYPE" SpanTypes.ELASTICSEARCH "$Tags.COMPONENT" "elasticsearch-java" - "$Tags.PEER_HOSTNAME" "local" - "$Tags.PEER_HOST_IPV4" "0.0.0.0" - "$Tags.PEER_PORT" 0 + "$MoreTags.NET_PEER_NAME" "local" + "$MoreTags.NET_PEER_IP" "0.0.0.0" + "$MoreTags.NET_PEER_PORT" 0 "$Tags.DB_TYPE" "elasticsearch" "elasticsearch.action" "DeleteAction" "elasticsearch.request" "DeleteRequest" diff --git a/instrumentation/elasticsearch/elasticsearch-transport-2.0/src/test/groovy/springdata/Elasticsearch2SpringTemplateTest.groovy b/instrumentation/elasticsearch/elasticsearch-transport-2.0/src/test/groovy/springdata/Elasticsearch2SpringTemplateTest.groovy index 2a79fdf1f0..a600cad187 100644 --- a/instrumentation/elasticsearch/elasticsearch-transport-2.0/src/test/groovy/springdata/Elasticsearch2SpringTemplateTest.groovy +++ b/instrumentation/elasticsearch/elasticsearch-transport-2.0/src/test/groovy/springdata/Elasticsearch2SpringTemplateTest.groovy @@ -227,9 +227,9 @@ class Elasticsearch2SpringTemplateTest extends AgentTestRunner { "$MoreTags.RESOURCE_NAME" "IndexAction" "$MoreTags.SPAN_TYPE" SpanTypes.ELASTICSEARCH "$Tags.COMPONENT" "elasticsearch-java" - "$Tags.PEER_HOSTNAME" "local" - "$Tags.PEER_HOST_IPV4" "0.0.0.0" - "$Tags.PEER_PORT" 0 + "$MoreTags.NET_PEER_NAME" "local" + "$MoreTags.NET_PEER_IP" "0.0.0.0" + "$MoreTags.NET_PEER_PORT" 0 "$Tags.DB_TYPE" "elasticsearch" "elasticsearch.action" "IndexAction" "elasticsearch.request" "IndexRequest" diff --git a/instrumentation/elasticsearch/elasticsearch-transport-5.0/src/main/java/io/opentelemetry/auto/instrumentation/elasticsearch5/TransportActionListener.java b/instrumentation/elasticsearch/elasticsearch-transport-5.0/src/main/java/io/opentelemetry/auto/instrumentation/elasticsearch5/TransportActionListener.java index 15e7a8e417..4e229a6cd1 100644 --- a/instrumentation/elasticsearch/elasticsearch-transport-5.0/src/main/java/io/opentelemetry/auto/instrumentation/elasticsearch5/TransportActionListener.java +++ b/instrumentation/elasticsearch/elasticsearch-transport-5.0/src/main/java/io/opentelemetry/auto/instrumentation/elasticsearch5/TransportActionListener.java @@ -18,7 +18,7 @@ package io.opentelemetry.auto.instrumentation.elasticsearch5; import static io.opentelemetry.auto.instrumentation.elasticsearch.ElasticsearchTransportClientDecorator.DECORATE; import com.google.common.base.Joiner; -import io.opentelemetry.auto.instrumentation.api.Tags; +import io.opentelemetry.auto.instrumentation.api.MoreTags; import io.opentelemetry.trace.Span; import org.elasticsearch.action.ActionListener; import org.elasticsearch.action.ActionRequest; @@ -73,9 +73,9 @@ public class TransportActionListener implements Action @Override public void onResponse(final T response) { if (response.remoteAddress() != null) { - span.setAttribute(Tags.PEER_HOSTNAME, response.remoteAddress().getHost()); - span.setAttribute(Tags.PEER_HOST_IPV4, response.remoteAddress().getAddress()); - span.setAttribute(Tags.PEER_PORT, response.remoteAddress().getPort()); + span.setAttribute(MoreTags.NET_PEER_NAME, response.remoteAddress().getHost()); + span.setAttribute(MoreTags.NET_PEER_IP, response.remoteAddress().getAddress()); + span.setAttribute(MoreTags.NET_PEER_PORT, response.remoteAddress().getPort()); } if (response instanceof GetResponse) { diff --git a/instrumentation/elasticsearch/elasticsearch-transport-5.0/src/test/groovy/Elasticsearch5TransportClientTest.groovy b/instrumentation/elasticsearch/elasticsearch-transport-5.0/src/test/groovy/Elasticsearch5TransportClientTest.groovy index a6f30c35fc..ab61cf6526 100644 --- a/instrumentation/elasticsearch/elasticsearch-transport-5.0/src/test/groovy/Elasticsearch5TransportClientTest.groovy +++ b/instrumentation/elasticsearch/elasticsearch-transport-5.0/src/test/groovy/Elasticsearch5TransportClientTest.groovy @@ -113,9 +113,9 @@ class Elasticsearch5TransportClientTest extends AgentTestRunner { "$MoreTags.RESOURCE_NAME" "ClusterHealthAction" "$MoreTags.SPAN_TYPE" SpanTypes.ELASTICSEARCH "$Tags.COMPONENT" "elasticsearch-java" - "$Tags.PEER_HOSTNAME" String - "$Tags.PEER_HOST_IPV4" "127.0.0.1" - "$Tags.PEER_PORT" tcpPort + "$MoreTags.NET_PEER_NAME" String + "$MoreTags.NET_PEER_IP" "127.0.0.1" + "$MoreTags.NET_PEER_PORT" tcpPort "$Tags.DB_TYPE" "elasticsearch" "elasticsearch.action" "ClusterHealthAction" "elasticsearch.request" "ClusterHealthRequest" @@ -216,9 +216,9 @@ class Elasticsearch5TransportClientTest extends AgentTestRunner { "$MoreTags.RESOURCE_NAME" "CreateIndexAction" "$MoreTags.SPAN_TYPE" SpanTypes.ELASTICSEARCH "$Tags.COMPONENT" "elasticsearch-java" - "$Tags.PEER_HOSTNAME" String - "$Tags.PEER_HOST_IPV4" "127.0.0.1" - "$Tags.PEER_PORT" tcpPort + "$MoreTags.NET_PEER_NAME" String + "$MoreTags.NET_PEER_IP" "127.0.0.1" + "$MoreTags.NET_PEER_PORT" tcpPort "$Tags.DB_TYPE" "elasticsearch" "elasticsearch.action" "CreateIndexAction" "elasticsearch.request" "CreateIndexRequest" @@ -235,9 +235,9 @@ class Elasticsearch5TransportClientTest extends AgentTestRunner { "$MoreTags.RESOURCE_NAME" "GetAction" "$MoreTags.SPAN_TYPE" SpanTypes.ELASTICSEARCH "$Tags.COMPONENT" "elasticsearch-java" - "$Tags.PEER_HOSTNAME" String - "$Tags.PEER_HOST_IPV4" "127.0.0.1" - "$Tags.PEER_PORT" tcpPort + "$MoreTags.NET_PEER_NAME" String + "$MoreTags.NET_PEER_IP" "127.0.0.1" + "$MoreTags.NET_PEER_PORT" tcpPort "$Tags.DB_TYPE" "elasticsearch" "elasticsearch.action" "GetAction" "elasticsearch.request" "GetRequest" @@ -272,9 +272,9 @@ class Elasticsearch5TransportClientTest extends AgentTestRunner { "$MoreTags.RESOURCE_NAME" "IndexAction" "$MoreTags.SPAN_TYPE" SpanTypes.ELASTICSEARCH "$Tags.COMPONENT" "elasticsearch-java" - "$Tags.PEER_HOSTNAME" String - "$Tags.PEER_HOST_IPV4" "127.0.0.1" - "$Tags.PEER_PORT" tcpPort + "$MoreTags.NET_PEER_NAME" String + "$MoreTags.NET_PEER_IP" "127.0.0.1" + "$MoreTags.NET_PEER_PORT" tcpPort "$Tags.DB_TYPE" "elasticsearch" "elasticsearch.action" "IndexAction" "elasticsearch.request" "IndexRequest" @@ -296,9 +296,9 @@ class Elasticsearch5TransportClientTest extends AgentTestRunner { "$MoreTags.RESOURCE_NAME" "GetAction" "$MoreTags.SPAN_TYPE" SpanTypes.ELASTICSEARCH "$Tags.COMPONENT" "elasticsearch-java" - "$Tags.PEER_HOSTNAME" String - "$Tags.PEER_HOST_IPV4" "127.0.0.1" - "$Tags.PEER_PORT" tcpPort + "$MoreTags.NET_PEER_NAME" String + "$MoreTags.NET_PEER_IP" "127.0.0.1" + "$MoreTags.NET_PEER_PORT" tcpPort "$Tags.DB_TYPE" "elasticsearch" "elasticsearch.action" "GetAction" "elasticsearch.request" "GetRequest" diff --git a/instrumentation/elasticsearch/elasticsearch-transport-5.3/src/main/java/io/opentelemetry/auto/instrumentation/elasticsearch5_3/TransportActionListener.java b/instrumentation/elasticsearch/elasticsearch-transport-5.3/src/main/java/io/opentelemetry/auto/instrumentation/elasticsearch5_3/TransportActionListener.java index e7e84310a1..3e2e7ca648 100644 --- a/instrumentation/elasticsearch/elasticsearch-transport-5.3/src/main/java/io/opentelemetry/auto/instrumentation/elasticsearch5_3/TransportActionListener.java +++ b/instrumentation/elasticsearch/elasticsearch-transport-5.3/src/main/java/io/opentelemetry/auto/instrumentation/elasticsearch5_3/TransportActionListener.java @@ -18,7 +18,7 @@ package io.opentelemetry.auto.instrumentation.elasticsearch5_3; import static io.opentelemetry.auto.instrumentation.elasticsearch.ElasticsearchTransportClientDecorator.DECORATE; import com.google.common.base.Joiner; -import io.opentelemetry.auto.instrumentation.api.Tags; +import io.opentelemetry.auto.instrumentation.api.MoreTags; import io.opentelemetry.trace.Span; import org.elasticsearch.action.ActionListener; import org.elasticsearch.action.ActionRequest; @@ -74,9 +74,9 @@ public class TransportActionListener implements Action @Override public void onResponse(final T response) { if (response.remoteAddress() != null) { - span.setAttribute(Tags.PEER_HOSTNAME, response.remoteAddress().getHost()); - span.setAttribute(Tags.PEER_HOST_IPV4, response.remoteAddress().getAddress()); - span.setAttribute(Tags.PEER_PORT, response.remoteAddress().getPort()); + span.setAttribute(MoreTags.NET_PEER_NAME, response.remoteAddress().getHost()); + span.setAttribute(MoreTags.NET_PEER_IP, response.remoteAddress().getAddress()); + span.setAttribute(MoreTags.NET_PEER_PORT, response.remoteAddress().getPort()); } if (response instanceof GetResponse) { diff --git a/instrumentation/elasticsearch/elasticsearch-transport-5.3/src/test/groovy/Elasticsearch53TransportClientTest.groovy b/instrumentation/elasticsearch/elasticsearch-transport-5.3/src/test/groovy/Elasticsearch53TransportClientTest.groovy index 2e904279e7..fad08009a8 100644 --- a/instrumentation/elasticsearch/elasticsearch-transport-5.3/src/test/groovy/Elasticsearch53TransportClientTest.groovy +++ b/instrumentation/elasticsearch/elasticsearch-transport-5.3/src/test/groovy/Elasticsearch53TransportClientTest.groovy @@ -113,9 +113,9 @@ class Elasticsearch53TransportClientTest extends AgentTestRunner { "$MoreTags.RESOURCE_NAME" "ClusterHealthAction" "$MoreTags.SPAN_TYPE" SpanTypes.ELASTICSEARCH "$Tags.COMPONENT" "elasticsearch-java" - "$Tags.PEER_HOSTNAME" "localhost" - "$Tags.PEER_HOST_IPV4" "127.0.0.1" - "$Tags.PEER_PORT" tcpPort + "$MoreTags.NET_PEER_NAME" "localhost" + "$MoreTags.NET_PEER_IP" "127.0.0.1" + "$MoreTags.NET_PEER_PORT" tcpPort "$Tags.DB_TYPE" "elasticsearch" "elasticsearch.action" "ClusterHealthAction" "elasticsearch.request" "ClusterHealthRequest" @@ -216,9 +216,9 @@ class Elasticsearch53TransportClientTest extends AgentTestRunner { "$MoreTags.RESOURCE_NAME" "CreateIndexAction" "$MoreTags.SPAN_TYPE" SpanTypes.ELASTICSEARCH "$Tags.COMPONENT" "elasticsearch-java" - "$Tags.PEER_HOSTNAME" "localhost" - "$Tags.PEER_HOST_IPV4" "127.0.0.1" - "$Tags.PEER_PORT" tcpPort + "$MoreTags.NET_PEER_NAME" "localhost" + "$MoreTags.NET_PEER_IP" "127.0.0.1" + "$MoreTags.NET_PEER_PORT" tcpPort "$Tags.DB_TYPE" "elasticsearch" "elasticsearch.action" "CreateIndexAction" "elasticsearch.request" "CreateIndexRequest" @@ -235,9 +235,9 @@ class Elasticsearch53TransportClientTest extends AgentTestRunner { "$MoreTags.RESOURCE_NAME" "GetAction" "$MoreTags.SPAN_TYPE" SpanTypes.ELASTICSEARCH "$Tags.COMPONENT" "elasticsearch-java" - "$Tags.PEER_HOSTNAME" "localhost" - "$Tags.PEER_HOST_IPV4" "127.0.0.1" - "$Tags.PEER_PORT" tcpPort + "$MoreTags.NET_PEER_NAME" "localhost" + "$MoreTags.NET_PEER_IP" "127.0.0.1" + "$MoreTags.NET_PEER_PORT" tcpPort "$Tags.DB_TYPE" "elasticsearch" "elasticsearch.action" "GetAction" "elasticsearch.request" "GetRequest" @@ -272,9 +272,9 @@ class Elasticsearch53TransportClientTest extends AgentTestRunner { "$MoreTags.RESOURCE_NAME" "IndexAction" "$MoreTags.SPAN_TYPE" SpanTypes.ELASTICSEARCH "$Tags.COMPONENT" "elasticsearch-java" - "$Tags.PEER_HOSTNAME" "localhost" - "$Tags.PEER_HOST_IPV4" "127.0.0.1" - "$Tags.PEER_PORT" tcpPort + "$MoreTags.NET_PEER_NAME" "localhost" + "$MoreTags.NET_PEER_IP" "127.0.0.1" + "$MoreTags.NET_PEER_PORT" tcpPort "$Tags.DB_TYPE" "elasticsearch" "elasticsearch.action" "IndexAction" "elasticsearch.request" "IndexRequest" @@ -297,9 +297,9 @@ class Elasticsearch53TransportClientTest extends AgentTestRunner { "$MoreTags.RESOURCE_NAME" "GetAction" "$MoreTags.SPAN_TYPE" SpanTypes.ELASTICSEARCH "$Tags.COMPONENT" "elasticsearch-java" - "$Tags.PEER_HOSTNAME" "localhost" - "$Tags.PEER_HOST_IPV4" "127.0.0.1" - "$Tags.PEER_PORT" tcpPort + "$MoreTags.NET_PEER_NAME" "localhost" + "$MoreTags.NET_PEER_IP" "127.0.0.1" + "$MoreTags.NET_PEER_PORT" tcpPort "$Tags.DB_TYPE" "elasticsearch" "elasticsearch.action" "GetAction" "elasticsearch.request" "GetRequest" diff --git a/instrumentation/elasticsearch/elasticsearch-transport-6.0/src/main/java/io/opentelemetry/auto/instrumentation/elasticsearch6/TransportActionListener.java b/instrumentation/elasticsearch/elasticsearch-transport-6.0/src/main/java/io/opentelemetry/auto/instrumentation/elasticsearch6/TransportActionListener.java index ddefba34ec..47e331f3e5 100644 --- a/instrumentation/elasticsearch/elasticsearch-transport-6.0/src/main/java/io/opentelemetry/auto/instrumentation/elasticsearch6/TransportActionListener.java +++ b/instrumentation/elasticsearch/elasticsearch-transport-6.0/src/main/java/io/opentelemetry/auto/instrumentation/elasticsearch6/TransportActionListener.java @@ -18,7 +18,7 @@ package io.opentelemetry.auto.instrumentation.elasticsearch6; import static io.opentelemetry.auto.instrumentation.elasticsearch.ElasticsearchTransportClientDecorator.DECORATE; import com.google.common.base.Joiner; -import io.opentelemetry.auto.instrumentation.api.Tags; +import io.opentelemetry.auto.instrumentation.api.MoreTags; import io.opentelemetry.trace.Span; import org.elasticsearch.action.ActionListener; import org.elasticsearch.action.ActionRequest; @@ -78,9 +78,9 @@ public class TransportActionListener implements Action @Override public void onResponse(final T response) { if (response.remoteAddress() != null) { - span.setAttribute(Tags.PEER_HOSTNAME, response.remoteAddress().address().getHostName()); - span.setAttribute(Tags.PEER_HOST_IPV4, response.remoteAddress().getAddress()); - span.setAttribute(Tags.PEER_PORT, response.remoteAddress().getPort()); + span.setAttribute(MoreTags.NET_PEER_NAME, response.remoteAddress().address().getHostName()); + span.setAttribute(MoreTags.NET_PEER_IP, response.remoteAddress().getAddress()); + span.setAttribute(MoreTags.NET_PEER_PORT, response.remoteAddress().getPort()); } if (response instanceof GetResponse) { diff --git a/instrumentation/elasticsearch/elasticsearch-transport-6.0/src/test/groovy/Elasticsearch6TransportClientTest.groovy b/instrumentation/elasticsearch/elasticsearch-transport-6.0/src/test/groovy/Elasticsearch6TransportClientTest.groovy index c8aee435cb..ab1879dec6 100644 --- a/instrumentation/elasticsearch/elasticsearch-transport-6.0/src/test/groovy/Elasticsearch6TransportClientTest.groovy +++ b/instrumentation/elasticsearch/elasticsearch-transport-6.0/src/test/groovy/Elasticsearch6TransportClientTest.groovy @@ -110,9 +110,9 @@ class Elasticsearch6TransportClientTest extends AgentTestRunner { "$MoreTags.RESOURCE_NAME" "ClusterHealthAction" "$MoreTags.SPAN_TYPE" SpanTypes.ELASTICSEARCH "$Tags.COMPONENT" "elasticsearch-java" - "$Tags.PEER_HOSTNAME" "localhost" - "$Tags.PEER_HOST_IPV4" "127.0.0.1" - "$Tags.PEER_PORT" tcpPort + "$MoreTags.NET_PEER_NAME" "localhost" + "$MoreTags.NET_PEER_IP" "127.0.0.1" + "$MoreTags.NET_PEER_PORT" tcpPort "$Tags.DB_TYPE" "elasticsearch" "elasticsearch.action" "ClusterHealthAction" "elasticsearch.request" "ClusterHealthRequest" @@ -213,9 +213,9 @@ class Elasticsearch6TransportClientTest extends AgentTestRunner { "$MoreTags.RESOURCE_NAME" "CreateIndexAction" "$MoreTags.SPAN_TYPE" SpanTypes.ELASTICSEARCH "$Tags.COMPONENT" "elasticsearch-java" - "$Tags.PEER_HOSTNAME" "localhost" - "$Tags.PEER_HOST_IPV4" "127.0.0.1" - "$Tags.PEER_PORT" tcpPort + "$MoreTags.NET_PEER_NAME" "localhost" + "$MoreTags.NET_PEER_IP" "127.0.0.1" + "$MoreTags.NET_PEER_PORT" tcpPort "$Tags.DB_TYPE" "elasticsearch" "elasticsearch.action" "CreateIndexAction" "elasticsearch.request" "CreateIndexRequest" @@ -232,9 +232,9 @@ class Elasticsearch6TransportClientTest extends AgentTestRunner { "$MoreTags.RESOURCE_NAME" "GetAction" "$MoreTags.SPAN_TYPE" SpanTypes.ELASTICSEARCH "$Tags.COMPONENT" "elasticsearch-java" - "$Tags.PEER_HOSTNAME" "localhost" - "$Tags.PEER_HOST_IPV4" "127.0.0.1" - "$Tags.PEER_PORT" tcpPort + "$MoreTags.NET_PEER_NAME" "localhost" + "$MoreTags.NET_PEER_IP" "127.0.0.1" + "$MoreTags.NET_PEER_PORT" tcpPort "$Tags.DB_TYPE" "elasticsearch" "elasticsearch.action" "GetAction" "elasticsearch.request" "GetRequest" @@ -269,9 +269,9 @@ class Elasticsearch6TransportClientTest extends AgentTestRunner { "$MoreTags.RESOURCE_NAME" "IndexAction" "$MoreTags.SPAN_TYPE" SpanTypes.ELASTICSEARCH "$Tags.COMPONENT" "elasticsearch-java" - "$Tags.PEER_HOSTNAME" "localhost" - "$Tags.PEER_HOST_IPV4" "127.0.0.1" - "$Tags.PEER_PORT" tcpPort + "$MoreTags.NET_PEER_NAME" "localhost" + "$MoreTags.NET_PEER_IP" "127.0.0.1" + "$MoreTags.NET_PEER_PORT" tcpPort "$Tags.DB_TYPE" "elasticsearch" "elasticsearch.action" "IndexAction" "elasticsearch.request" "IndexRequest" @@ -294,9 +294,9 @@ class Elasticsearch6TransportClientTest extends AgentTestRunner { "$MoreTags.RESOURCE_NAME" "GetAction" "$MoreTags.SPAN_TYPE" SpanTypes.ELASTICSEARCH "$Tags.COMPONENT" "elasticsearch-java" - "$Tags.PEER_HOSTNAME" "localhost" - "$Tags.PEER_HOST_IPV4" "127.0.0.1" - "$Tags.PEER_PORT" tcpPort + "$MoreTags.NET_PEER_NAME" "localhost" + "$MoreTags.NET_PEER_IP" "127.0.0.1" + "$MoreTags.NET_PEER_PORT" tcpPort "$Tags.DB_TYPE" "elasticsearch" "elasticsearch.action" "GetAction" "elasticsearch.request" "GetRequest" diff --git a/instrumentation/finatra-2.9/src/main/java/io/opentelemetry/auto/instrumentation/finatra/FinatraInstrumentation.java b/instrumentation/finatra-2.9/src/main/java/io/opentelemetry/auto/instrumentation/finatra/FinatraInstrumentation.java index 325835ff5f..6137507450 100644 --- a/instrumentation/finatra-2.9/src/main/java/io/opentelemetry/auto/instrumentation/finatra/FinatraInstrumentation.java +++ b/instrumentation/finatra-2.9/src/main/java/io/opentelemetry/auto/instrumentation/finatra/FinatraInstrumentation.java @@ -30,6 +30,7 @@ import static net.bytebuddy.matcher.ElementMatchers.takesArguments; import com.google.auto.service.AutoService; import com.twitter.finagle.http.Request; import com.twitter.finagle.http.Response; +import com.twitter.finatra.http.contexts.RouteInfo; import com.twitter.util.Future; import com.twitter.util.FutureEventListener; import io.opentelemetry.auto.config.Config; @@ -91,15 +92,16 @@ public class FinatraInstrumentation extends Instrumenter.Default { @Advice.OnMethodEnter(suppress = Throwable.class) public static SpanWithScope nameSpan( @Advice.Argument(0) final Request request, - @Advice.FieldValue("path") final String path, + @Advice.FieldValue("routeInfo") final RouteInfo routeInfo, @Advice.FieldValue("clazz") final Class clazz, @Advice.Origin final Method method) { // Update the parent "netty.request" final Span parent = TRACER.getCurrentSpan(); - parent.setAttribute(MoreTags.RESOURCE_NAME, request.method().name() + " " + path); + final String resourceName = request.method().name() + " " + routeInfo.path(); + parent.setAttribute(MoreTags.RESOURCE_NAME, resourceName); parent.setAttribute(Tags.COMPONENT, "finatra"); - parent.updateName("finatra.request"); + parent.updateName(resourceName); final Span span = TRACER.spanBuilder("finatra.controller").startSpan(); DECORATE.afterStart(span); diff --git a/instrumentation/finatra-2.9/src/test/groovy/FinatraServerTest.groovy b/instrumentation/finatra-2.9/src/test/groovy/FinatraServerTest.groovy index d9e84279bb..32ade8d64c 100644 --- a/instrumentation/finatra-2.9/src/test/groovy/FinatraServerTest.groovy +++ b/instrumentation/finatra-2.9/src/test/groovy/FinatraServerTest.groovy @@ -29,6 +29,7 @@ import java.util.concurrent.TimeoutException import static io.opentelemetry.auto.test.base.HttpServerTest.ServerEndpoint.ERROR import static io.opentelemetry.auto.test.base.HttpServerTest.ServerEndpoint.EXCEPTION +import static io.opentelemetry.auto.test.base.HttpServerTest.ServerEndpoint.PATH_PARAM import static io.opentelemetry.auto.test.base.HttpServerTest.ServerEndpoint.SUCCESS import static io.opentelemetry.trace.Span.Kind.INTERNAL import static io.opentelemetry.trace.Span.Kind.SERVER @@ -80,8 +81,8 @@ class FinatraServerTest extends HttpServerTest { } @Override - String expectedOperationName() { - return "finatra.request" + boolean testPathParam() { + true } @Override @@ -107,7 +108,7 @@ class FinatraServerTest extends HttpServerTest { @Override void serverSpan(TraceAssert trace, int index, String traceID = null, String parentID = null, String method = "GET", ServerEndpoint endpoint = SUCCESS) { trace.span(index) { - operationName expectedOperationName() + operationName "$method ${endpoint == PATH_PARAM ? "/path/:id/param" : endpoint.resolvePath(address).path}" spanKind SERVER errored endpoint.errored if (parentID != null) { @@ -117,12 +118,12 @@ class FinatraServerTest extends HttpServerTest { parent() } tags { - "$MoreTags.RESOURCE_NAME" "$method ${endpoint.resolve(address).path}" + "$MoreTags.RESOURCE_NAME" "$method ${endpoint == PATH_PARAM ? "/path/:id/param" : endpoint.resolvePath(address).path}" "$MoreTags.SPAN_TYPE" SpanTypes.HTTP_SERVER "$Tags.COMPONENT" serverDecorator.getComponentName() - "$Tags.PEER_PORT" Long - "$Tags.PEER_HOST_IPV4" { it == null || it == "127.0.0.1" } // Optional - "$Tags.HTTP_URL" "${endpoint.resolve(address)}" + "$MoreTags.NET_PEER_PORT" Long + "$MoreTags.NET_PEER_IP" { it == null || it == "127.0.0.1" } // Optional + "$Tags.HTTP_URL" { it == "${endpoint.resolve(address)}" || it == "${endpoint.resolveWithoutFragment(address)}" } "$Tags.HTTP_METHOD" method "$Tags.HTTP_STATUS" endpoint.status if (endpoint.query) { diff --git a/instrumentation/finatra-2.9/src/test/scala/FinatraController.scala b/instrumentation/finatra-2.9/src/test/scala/FinatraController.scala index afa9152e23..7bd486de60 100644 --- a/instrumentation/finatra-2.9/src/test/scala/FinatraController.scala +++ b/instrumentation/finatra-2.9/src/test/scala/FinatraController.scala @@ -68,4 +68,12 @@ class FinatraController extends Controller { } }) } + + any("/path/:id/param") { request : Request => + controller(PATH_PARAM, new Closure[Response](null) { + override def call(): Response = { + response.ok(request.params("id")) + } + }) + } } diff --git a/instrumentation/google-http-client-1.19/src/main/java/io/opentelemetry/auto/instrumentation/googlehttpclient/GoogleHttpClientInstrumentation.java b/instrumentation/google-http-client-1.19/src/main/java/io/opentelemetry/auto/instrumentation/googlehttpclient/GoogleHttpClientInstrumentation.java index 32f644084a..2a0d3c4e3e 100644 --- a/instrumentation/google-http-client-1.19/src/main/java/io/opentelemetry/auto/instrumentation/googlehttpclient/GoogleHttpClientInstrumentation.java +++ b/instrumentation/google-http-client-1.19/src/main/java/io/opentelemetry/auto/instrumentation/googlehttpclient/GoogleHttpClientInstrumentation.java @@ -105,7 +105,11 @@ public class GoogleHttpClientInstrumentation extends Instrumenter.Default { if (state == null) { state = - new RequestState(TRACER.spanBuilder("http.request").setSpanKind(CLIENT).startSpan()); + new RequestState( + TRACER + .spanBuilder(DECORATE.spanNameForRequest(request)) + .setSpanKind(CLIENT) + .startSpan()); contextStore.put(request, state); } @@ -153,7 +157,8 @@ public class GoogleHttpClientInstrumentation extends Instrumenter.Default { @Advice.OnMethodEnter(suppress = Throwable.class) public static void methodEnter(@Advice.This final HttpRequest request) { - final Span span = TRACER.spanBuilder("http.request").setSpanKind(CLIENT).startSpan(); + final Span span = + TRACER.spanBuilder(DECORATE.spanNameForRequest(request)).setSpanKind(CLIENT).startSpan(); final ContextStore contextStore = InstrumentationContext.get(HttpRequest.class, RequestState.class); diff --git a/instrumentation/google-http-client-1.19/src/test/groovy/AbstractGoogleHttpClientTest.groovy b/instrumentation/google-http-client-1.19/src/test/groovy/AbstractGoogleHttpClientTest.groovy index 0693902443..dae9d2eecc 100644 --- a/instrumentation/google-http-client-1.19/src/test/groovy/AbstractGoogleHttpClientTest.groovy +++ b/instrumentation/google-http-client-1.19/src/test/groovy/AbstractGoogleHttpClientTest.groovy @@ -79,9 +79,9 @@ abstract class AbstractGoogleHttpClientTest extends HttpClientTest { return GrizzlyDecorator.DECORATE } - @Override - String expectedOperationName() { - return "grizzly.request" - } - static class SimpleExceptionMapper implements ExceptionMapper { @Override diff --git a/instrumentation/http-url-connection/src/main/java/io/opentelemetry/auto/instrumentation/http_url_connection/HttpUrlConnectionInstrumentation.java b/instrumentation/http-url-connection/src/main/java/io/opentelemetry/auto/instrumentation/http_url_connection/HttpUrlConnectionInstrumentation.java index 6f80c60a29..d4f6cec54a 100644 --- a/instrumentation/http-url-connection/src/main/java/io/opentelemetry/auto/instrumentation/http_url_connection/HttpUrlConnectionInstrumentation.java +++ b/instrumentation/http-url-connection/src/main/java/io/opentelemetry/auto/instrumentation/http_url_connection/HttpUrlConnectionInstrumentation.java @@ -138,8 +138,6 @@ public class HttpUrlConnectionInstrumentation extends Instrumenter.Default { public static class HttpUrlState { - public static final String OPERATION_NAME = "http.request"; - public static final ContextStore.Factory FACTORY = new ContextStore.Factory() { @Override @@ -152,7 +150,11 @@ public class HttpUrlConnectionInstrumentation extends Instrumenter.Default { private volatile boolean finished = false; public Span start(final HttpURLConnection connection) { - span = TRACER.spanBuilder(OPERATION_NAME).setSpanKind(CLIENT).startSpan(); + span = + TRACER + .spanBuilder(DECORATE.spanNameForRequest(connection)) + .setSpanKind(CLIENT) + .startSpan(); try (final Scope scope = TRACER.withSpan(span)) { DECORATE.afterStart(span); DECORATE.onRequest(span, connection); diff --git a/instrumentation/http-url-connection/src/main/java/io/opentelemetry/auto/instrumentation/http_url_connection/UrlInstrumentation.java b/instrumentation/http-url-connection/src/main/java/io/opentelemetry/auto/instrumentation/http_url_connection/UrlInstrumentation.java index 527af2a041..f91a562524 100644 --- a/instrumentation/http-url-connection/src/main/java/io/opentelemetry/auto/instrumentation/http_url_connection/UrlInstrumentation.java +++ b/instrumentation/http-url-connection/src/main/java/io/opentelemetry/auto/instrumentation/http_url_connection/UrlInstrumentation.java @@ -96,10 +96,10 @@ public class UrlInstrumentation extends Instrumenter.Default { try (final Scope scope = TRACER.withSpan(span)) { span.setAttribute(Tags.HTTP_URL, url.toString()); - span.setAttribute(Tags.PEER_PORT, url.getPort() == -1 ? 80 : url.getPort()); + span.setAttribute(MoreTags.NET_PEER_PORT, url.getPort() == -1 ? 80 : url.getPort()); final String host = url.getHost(); if (host != null && !host.isEmpty()) { - span.setAttribute(Tags.PEER_HOSTNAME, host); + span.setAttribute(MoreTags.NET_PEER_NAME, host); if (Config.get().isHttpClientSplitByDomain()) { span.setAttribute(MoreTags.SERVICE_NAME, host); } diff --git a/instrumentation/http-url-connection/src/test/groovy/HttpUrlConnectionTest.groovy b/instrumentation/http-url-connection/src/test/groovy/HttpUrlConnectionTest.groovy index 2259ee95bb..1dd817aedf 100644 --- a/instrumentation/http-url-connection/src/test/groovy/HttpUrlConnectionTest.groovy +++ b/instrumentation/http-url-connection/src/test/groovy/HttpUrlConnectionTest.groovy @@ -23,7 +23,6 @@ import spock.lang.Ignore import spock.lang.Requires import sun.net.www.protocol.https.HttpsURLConnectionImpl -import static io.opentelemetry.auto.instrumentation.http_url_connection.HttpUrlConnectionInstrumentation.HttpUrlState.OPERATION_NAME import static io.opentelemetry.auto.test.utils.ConfigUtils.withConfigOverride import static io.opentelemetry.auto.test.utils.TraceUtils.runUnderTrace import static io.opentelemetry.trace.Span.Kind.CLIENT @@ -104,7 +103,7 @@ class HttpUrlConnectionTest extends HttpClientTest { } } span(1) { - operationName OPERATION_NAME + operationName expectedOperationName("GET") spanKind CLIENT childOf span(0) errored false @@ -113,15 +112,15 @@ class HttpUrlConnectionTest extends HttpClientTest { "$MoreTags.RESOURCE_NAME" "GET $url.path" "$MoreTags.SPAN_TYPE" SpanTypes.HTTP_CLIENT "$Tags.COMPONENT" "http-url-connection" - "$Tags.PEER_HOSTNAME" "localhost" - "$Tags.PEER_PORT" server.address.port + "$MoreTags.NET_PEER_NAME" "localhost" + "$MoreTags.NET_PEER_PORT" server.address.port "$Tags.HTTP_URL" "$url" "$Tags.HTTP_METHOD" "GET" "$Tags.HTTP_STATUS" STATUS } } span(2) { - operationName OPERATION_NAME + operationName expectedOperationName("GET") spanKind CLIENT childOf span(0) errored false @@ -130,8 +129,8 @@ class HttpUrlConnectionTest extends HttpClientTest { "$MoreTags.RESOURCE_NAME" "GET $url.path" "$MoreTags.SPAN_TYPE" SpanTypes.HTTP_CLIENT "$Tags.COMPONENT" "http-url-connection" - "$Tags.PEER_HOSTNAME" "localhost" - "$Tags.PEER_PORT" server.address.port + "$MoreTags.NET_PEER_NAME" "localhost" + "$MoreTags.NET_PEER_PORT" server.address.port "$Tags.HTTP_URL" "$url" "$Tags.HTTP_METHOD" "GET" "$Tags.HTTP_STATUS" STATUS @@ -186,7 +185,7 @@ class HttpUrlConnectionTest extends HttpClientTest { } } span(1) { - operationName OPERATION_NAME + operationName expectedOperationName("GET") spanKind CLIENT childOf span(0) errored false @@ -195,15 +194,15 @@ class HttpUrlConnectionTest extends HttpClientTest { "$MoreTags.RESOURCE_NAME" "GET $url.path" "$MoreTags.SPAN_TYPE" SpanTypes.HTTP_CLIENT "$Tags.COMPONENT" "http-url-connection" - "$Tags.PEER_HOSTNAME" "localhost" - "$Tags.PEER_PORT" server.address.port + "$MoreTags.NET_PEER_NAME" "localhost" + "$MoreTags.NET_PEER_PORT" server.address.port "$Tags.HTTP_URL" "$url" "$Tags.HTTP_METHOD" "GET" "$Tags.HTTP_STATUS" STATUS } } span(2) { - operationName OPERATION_NAME + operationName expectedOperationName("GET") spanKind CLIENT childOf span(0) errored false @@ -212,8 +211,8 @@ class HttpUrlConnectionTest extends HttpClientTest { "$MoreTags.RESOURCE_NAME" "GET $url.path" "$MoreTags.SPAN_TYPE" SpanTypes.HTTP_CLIENT "$Tags.COMPONENT" "http-url-connection" - "$Tags.PEER_HOSTNAME" "localhost" - "$Tags.PEER_PORT" server.address.port + "$MoreTags.NET_PEER_NAME" "localhost" + "$MoreTags.NET_PEER_PORT" server.address.port "$Tags.HTTP_URL" "$url" "$Tags.HTTP_METHOD" "GET" "$Tags.HTTP_STATUS" STATUS @@ -253,7 +252,7 @@ class HttpUrlConnectionTest extends HttpClientTest { } } span(1) { - operationName OPERATION_NAME + operationName expectedOperationName("GET") spanKind CLIENT childOf span(0) errored false @@ -262,8 +261,8 @@ class HttpUrlConnectionTest extends HttpClientTest { "$MoreTags.RESOURCE_NAME" "GET $url.path" "$MoreTags.SPAN_TYPE" SpanTypes.HTTP_CLIENT "$Tags.COMPONENT" "http-url-connection" - "$Tags.PEER_HOSTNAME" "localhost" - "$Tags.PEER_PORT" server.address.port + "$MoreTags.NET_PEER_NAME" "localhost" + "$MoreTags.NET_PEER_PORT" server.address.port "$Tags.HTTP_URL" "$url" "$Tags.HTTP_METHOD" "GET" "$Tags.HTTP_STATUS" STATUS @@ -319,7 +318,7 @@ class HttpUrlConnectionTest extends HttpClientTest { } } span(1) { - operationName OPERATION_NAME + operationName expectedOperationName("POST") spanKind CLIENT childOf span(0) errored false @@ -328,8 +327,8 @@ class HttpUrlConnectionTest extends HttpClientTest { "$MoreTags.RESOURCE_NAME" "POST $url.path" "$MoreTags.SPAN_TYPE" SpanTypes.HTTP_CLIENT "$Tags.COMPONENT" "http-url-connection" - "$Tags.PEER_HOSTNAME" "localhost" - "$Tags.PEER_PORT" server.address.port + "$MoreTags.NET_PEER_NAME" "localhost" + "$MoreTags.NET_PEER_PORT" server.address.port "$Tags.HTTP_URL" "$url" "$Tags.HTTP_METHOD" "POST" "$Tags.HTTP_STATUS" STATUS diff --git a/instrumentation/http-url-connection/src/test/groovy/UrlConnectionTest.groovy b/instrumentation/http-url-connection/src/test/groovy/UrlConnectionTest.groovy index d6dc59da12..79897c2efe 100644 --- a/instrumentation/http-url-connection/src/test/groovy/UrlConnectionTest.groovy +++ b/instrumentation/http-url-connection/src/test/groovy/UrlConnectionTest.groovy @@ -15,13 +15,13 @@ */ import io.opentelemetry.auto.bootstrap.AgentClassLoader import io.opentelemetry.auto.config.Config +import io.opentelemetry.auto.decorator.HttpClientDecorator import io.opentelemetry.auto.instrumentation.api.MoreTags import io.opentelemetry.auto.instrumentation.api.SpanTypes import io.opentelemetry.auto.instrumentation.api.Tags import io.opentelemetry.auto.instrumentation.http_url_connection.UrlInstrumentation import io.opentelemetry.auto.test.AgentTestRunner -import static io.opentelemetry.auto.instrumentation.http_url_connection.HttpUrlConnectionInstrumentation.HttpUrlState.OPERATION_NAME import static io.opentelemetry.auto.test.utils.ConfigUtils.withConfigOverride import static io.opentelemetry.auto.test.utils.PortUtils.UNUSABLE_PORT import static io.opentelemetry.auto.test.utils.TraceUtils.runUnderTrace @@ -56,7 +56,7 @@ class UrlConnectionTest extends AgentTestRunner { } } span(1) { - operationName OPERATION_NAME + operationName expectedOperationName("GET") spanKind CLIENT childOf span(0) errored true @@ -64,8 +64,8 @@ class UrlConnectionTest extends AgentTestRunner { "$MoreTags.SERVICE_NAME" renameService ? "localhost" : null "$MoreTags.SPAN_TYPE" SpanTypes.HTTP_CLIENT "$Tags.COMPONENT" "http-url-connection" - "$Tags.PEER_HOSTNAME" "localhost" - "$Tags.PEER_PORT" UNUSABLE_PORT + "$MoreTags.NET_PEER_NAME" "localhost" + "$MoreTags.NET_PEER_PORT" UNUSABLE_PORT "$Tags.HTTP_URL" "$url/" "$Tags.HTTP_METHOD" "GET" errorTags ConnectException, String @@ -115,7 +115,7 @@ class UrlConnectionTest extends AgentTestRunner { tags { "$MoreTags.SPAN_TYPE" SpanTypes.HTTP_CLIENT "$Tags.COMPONENT" UrlInstrumentation.COMPONENT - "$Tags.PEER_PORT" 80 + "$MoreTags.NET_PEER_PORT" 80 // FIXME: These tags really make no sense for non-http connections, why do we set them? "$Tags.HTTP_URL" "$url" errorTags IllegalArgumentException, String @@ -155,4 +155,8 @@ class UrlConnectionTest extends AgentTestRunner { } } } + + String expectedOperationName(String method) { + return method != null ? "HTTP $method" : HttpClientDecorator.DEFAULT_SPAN_NAME + } } diff --git a/instrumentation/jaxrs-client/jaxrs-client-1.1/src/main/java/io/opentelemetry/auto/instrumentation/jaxrs/v1/JaxRsClientV1Instrumentation.java b/instrumentation/jaxrs-client/jaxrs-client-1.1/src/main/java/io/opentelemetry/auto/instrumentation/jaxrs/v1/JaxRsClientV1Instrumentation.java index 1520245d81..b99d286d30 100644 --- a/instrumentation/jaxrs-client/jaxrs-client-1.1/src/main/java/io/opentelemetry/auto/instrumentation/jaxrs/v1/JaxRsClientV1Instrumentation.java +++ b/instrumentation/jaxrs-client/jaxrs-client-1.1/src/main/java/io/opentelemetry/auto/instrumentation/jaxrs/v1/JaxRsClientV1Instrumentation.java @@ -89,7 +89,11 @@ public final class JaxRsClientV1Instrumentation extends Instrumenter.Default { // WARNING: this might be a chain...so we only have to trace the first in the chain. final boolean isRootClientHandler = null == request.getProperties().get(SPAN_ATTRIBUTE); if (isRootClientHandler) { - final Span span = TRACER.spanBuilder("jax-rs.client.call").setSpanKind(CLIENT).startSpan(); + final Span span = + TRACER + .spanBuilder(DECORATE.spanNameForRequest(request)) + .setSpanKind(CLIENT) + .startSpan(); DECORATE.afterStart(span); DECORATE.onRequest(span, request); request.getProperties().put(SPAN_ATTRIBUTE, span); diff --git a/instrumentation/jaxrs-client/jaxrs-client-1.1/src/test/groovy/JaxRsClientV1Test.groovy b/instrumentation/jaxrs-client/jaxrs-client-1.1/src/test/groovy/JaxRsClientV1Test.groovy index 08820690ea..a701d89e9b 100644 --- a/instrumentation/jaxrs-client/jaxrs-client-1.1/src/test/groovy/JaxRsClientV1Test.groovy +++ b/instrumentation/jaxrs-client/jaxrs-client-1.1/src/test/groovy/JaxRsClientV1Test.groovy @@ -48,11 +48,6 @@ class JaxRsClientV1Test extends HttpClientTest { return JaxRsClientV1Decorator.DECORATE } - @Override - String expectedOperationName() { - return "jax-rs.client.call" - } - boolean testCircularRedirects() { false } diff --git a/instrumentation/jaxrs-client/jaxrs-client-2.0/src/main/java/io/opentelemetry/auto/instrumentation/jaxrs/ClientTracingFilter.java b/instrumentation/jaxrs-client/jaxrs-client-2.0/src/main/java/io/opentelemetry/auto/instrumentation/jaxrs/ClientTracingFilter.java index 89b883aeeb..de95130560 100644 --- a/instrumentation/jaxrs-client/jaxrs-client-2.0/src/main/java/io/opentelemetry/auto/instrumentation/jaxrs/ClientTracingFilter.java +++ b/instrumentation/jaxrs-client/jaxrs-client-2.0/src/main/java/io/opentelemetry/auto/instrumentation/jaxrs/ClientTracingFilter.java @@ -37,7 +37,11 @@ public class ClientTracingFilter implements ClientRequestFilter, ClientResponseF @Override public void filter(final ClientRequestContext requestContext) { - final Span span = TRACER.spanBuilder("jax-rs.client.call").setSpanKind(CLIENT).startSpan(); + final Span span = + TRACER + .spanBuilder(DECORATE.spanNameForRequest(requestContext)) + .setSpanKind(CLIENT) + .startSpan(); try (final Scope scope = TRACER.withSpan(span)) { DECORATE.afterStart(span); DECORATE.onRequest(span, requestContext); diff --git a/instrumentation/jaxrs-client/jaxrs-client-2.0/src/test/groovy/JaxRsClientAsyncTest.groovy b/instrumentation/jaxrs-client/jaxrs-client-2.0/src/test/groovy/JaxRsClientAsyncTest.groovy index 4f6132f439..762dd2a2b7 100644 --- a/instrumentation/jaxrs-client/jaxrs-client-2.0/src/test/groovy/JaxRsClientAsyncTest.groovy +++ b/instrumentation/jaxrs-client/jaxrs-client-2.0/src/test/groovy/JaxRsClientAsyncTest.groovy @@ -64,11 +64,6 @@ abstract class JaxRsClientAsyncTest extends HttpClientTest return JaxRsClientDecorator.DECORATE } - @Override - String expectedOperationName() { - return "jax-rs.client.call" - } - abstract ClientBuilder builder() } diff --git a/instrumentation/jaxrs-client/jaxrs-client-2.0/src/test/groovy/JaxRsClientTest.groovy b/instrumentation/jaxrs-client/jaxrs-client-2.0/src/test/groovy/JaxRsClientTest.groovy index 20bbdb5f7a..c175d54798 100644 --- a/instrumentation/jaxrs-client/jaxrs-client-2.0/src/test/groovy/JaxRsClientTest.groovy +++ b/instrumentation/jaxrs-client/jaxrs-client-2.0/src/test/groovy/JaxRsClientTest.groovy @@ -48,11 +48,6 @@ abstract class JaxRsClientTest extends HttpClientTest { return JaxRsClientDecorator.DECORATE } - @Override - String expectedOperationName() { - return "jax-rs.client.call" - } - abstract ClientBuilder builder() } diff --git a/instrumentation/jaxrs/jaxrs-1.0/src/main/java/io/opentelemetry/auto/instrumentation/jaxrs1/JaxRsAnnotationsDecorator.java b/instrumentation/jaxrs/jaxrs-1.0/src/main/java/io/opentelemetry/auto/instrumentation/jaxrs1/JaxRsAnnotationsDecorator.java index f2c95894f3..77987440f8 100644 --- a/instrumentation/jaxrs/jaxrs-1.0/src/main/java/io/opentelemetry/auto/instrumentation/jaxrs1/JaxRsAnnotationsDecorator.java +++ b/instrumentation/jaxrs/jaxrs-1.0/src/main/java/io/opentelemetry/auto/instrumentation/jaxrs1/JaxRsAnnotationsDecorator.java @@ -75,6 +75,7 @@ public class JaxRsAnnotationsDecorator extends BaseDecorator { span.setAttribute(Tags.COMPONENT, "jax-rs"); if (!resourceName.isEmpty()) { + span.updateName(resourceName); span.setAttribute(MoreTags.RESOURCE_NAME, resourceName); } } diff --git a/instrumentation/jaxrs/jaxrs-1.0/src/test/groovy/JaxRsAnnotationsInstrumentationTest.groovy b/instrumentation/jaxrs/jaxrs-1.0/src/test/groovy/JaxRsAnnotationsInstrumentationTest.groovy index c69ba53bb0..e27ed96bc0 100644 --- a/instrumentation/jaxrs/jaxrs-1.0/src/test/groovy/JaxRsAnnotationsInstrumentationTest.groovy +++ b/instrumentation/jaxrs/jaxrs-1.0/src/test/groovy/JaxRsAnnotationsInstrumentationTest.groovy @@ -67,7 +67,7 @@ class JaxRsAnnotationsInstrumentationTest extends AgentTestRunner { assertTraces(1) { trace(0, 2) { span(0) { - operationName "test" + operationName name parent() tags { "$MoreTags.RESOURCE_NAME" name diff --git a/instrumentation/jaxrs/jaxrs-1.0/src/test/groovy/JerseyTest.groovy b/instrumentation/jaxrs/jaxrs-1.0/src/test/groovy/JerseyTest.groovy index 5f6936c7d6..fd718fa4e0 100644 --- a/instrumentation/jaxrs/jaxrs-1.0/src/test/groovy/JerseyTest.groovy +++ b/instrumentation/jaxrs/jaxrs-1.0/src/test/groovy/JerseyTest.groovy @@ -46,7 +46,7 @@ class JerseyTest extends AgentTestRunner { assertTraces(1) { trace(0, 2) { span(0) { - operationName "test.span" + operationName expectedResourceName tags { "$MoreTags.RESOURCE_NAME" expectedResourceName "$Tags.COMPONENT" "jax-rs" diff --git a/instrumentation/jaxrs/jaxrs-2.0/src/main/java/io/opentelemetry/auto/instrumentation/jaxrs2/JaxRsAnnotationsDecorator.java b/instrumentation/jaxrs/jaxrs-2.0/src/main/java/io/opentelemetry/auto/instrumentation/jaxrs2/JaxRsAnnotationsDecorator.java index 08543ea05e..d37b6b1fb6 100644 --- a/instrumentation/jaxrs/jaxrs-2.0/src/main/java/io/opentelemetry/auto/instrumentation/jaxrs2/JaxRsAnnotationsDecorator.java +++ b/instrumentation/jaxrs/jaxrs-2.0/src/main/java/io/opentelemetry/auto/instrumentation/jaxrs2/JaxRsAnnotationsDecorator.java @@ -86,6 +86,7 @@ public class JaxRsAnnotationsDecorator extends BaseDecorator { span.setAttribute(Tags.COMPONENT, "jax-rs"); if (!resourceName.isEmpty()) { + span.updateName(resourceName); span.setAttribute(MoreTags.RESOURCE_NAME, resourceName); } } diff --git a/instrumentation/jaxrs/jaxrs-2.0/src/test/groovy/JaxRsAnnotationsInstrumentationTest.groovy b/instrumentation/jaxrs/jaxrs-2.0/src/test/groovy/JaxRsAnnotationsInstrumentationTest.groovy index caadb5cc52..7535256af9 100644 --- a/instrumentation/jaxrs/jaxrs-2.0/src/test/groovy/JaxRsAnnotationsInstrumentationTest.groovy +++ b/instrumentation/jaxrs/jaxrs-2.0/src/test/groovy/JaxRsAnnotationsInstrumentationTest.groovy @@ -67,7 +67,7 @@ class JaxRsAnnotationsInstrumentationTest extends AgentTestRunner { assertTraces(1) { trace(0, 2) { span(0) { - operationName "test" + operationName name parent() tags { "$MoreTags.RESOURCE_NAME" name diff --git a/instrumentation/jaxrs/jaxrs-2.0/src/test/groovy/JaxRsFilterTest.groovy b/instrumentation/jaxrs/jaxrs-2.0/src/test/groovy/JaxRsFilterTest.groovy index bb271c5864..c0ab7546cd 100644 --- a/instrumentation/jaxrs/jaxrs-2.0/src/test/groovy/JaxRsFilterTest.groovy +++ b/instrumentation/jaxrs/jaxrs-2.0/src/test/groovy/JaxRsFilterTest.groovy @@ -74,7 +74,7 @@ abstract class JaxRsFilterTest extends AgentTestRunner { assertTraces(1) { trace(0, 2) { span(0) { - operationName "test.span" + operationName parentResourceName != null ? parentResourceName : "test.span" tags { "$MoreTags.RESOURCE_NAME" parentResourceName "$Tags.COMPONENT" "jax-rs" diff --git a/instrumentation/jetty-8.0/src/main/java/io/opentelemetry/auto/instrumentation/jetty8/JettyHandlerAdvice.java b/instrumentation/jetty-8.0/src/main/java/io/opentelemetry/auto/instrumentation/jetty8/JettyHandlerAdvice.java index 33703b85c5..495af4f944 100644 --- a/instrumentation/jetty-8.0/src/main/java/io/opentelemetry/auto/instrumentation/jetty8/JettyHandlerAdvice.java +++ b/instrumentation/jetty-8.0/src/main/java/io/opentelemetry/auto/instrumentation/jetty8/JettyHandlerAdvice.java @@ -42,7 +42,8 @@ public class JettyHandlerAdvice { return null; } - final Span.Builder spanBuilder = TRACER.spanBuilder("jetty.request").setSpanKind(SERVER); + final String resourceName = req.getMethod() + " " + source.getClass().getName(); + final Span.Builder spanBuilder = TRACER.spanBuilder(resourceName).setSpanKind(SERVER); try { final SpanContext extractedContext = TRACER.getHttpTextFormat().extract(req, GETTER); spanBuilder.setParent(extractedContext); @@ -56,7 +57,6 @@ public class JettyHandlerAdvice { DECORATE.afterStart(span); DECORATE.onConnection(span, req); DECORATE.onRequest(span, req); - final String resourceName = req.getMethod() + " " + source.getClass().getName(); span.setAttribute(MoreTags.RESOURCE_NAME, resourceName); req.setAttribute(SPAN_ATTRIBUTE, span); diff --git a/instrumentation/jetty-8.0/src/test/groovy/JettyHandlerTest.groovy b/instrumentation/jetty-8.0/src/test/groovy/JettyHandlerTest.groovy index 5311dd2d5f..db9f1e3f39 100644 --- a/instrumentation/jetty-8.0/src/test/groovy/JettyHandlerTest.groovy +++ b/instrumentation/jetty-8.0/src/test/groovy/JettyHandlerTest.groovy @@ -77,11 +77,6 @@ class JettyHandlerTest extends HttpServerTest { return JettyDecorator.DECORATE } - @Override - String expectedOperationName() { - return "jetty.request" - } - @Override boolean testExceptionBody() { false @@ -134,7 +129,7 @@ class JettyHandlerTest extends HttpServerTest { void serverSpan(TraceAssert trace, int index, String traceID = null, String parentID = null, String method = "GET", ServerEndpoint endpoint = SUCCESS) { def handlerName = handler().class.name trace.span(index) { - operationName expectedOperationName() + operationName "$method $handlerName" spanKind SERVER errored endpoint.errored if (parentID != null) { @@ -147,9 +142,9 @@ class JettyHandlerTest extends HttpServerTest { "$MoreTags.RESOURCE_NAME" "$method $handlerName" "$MoreTags.SPAN_TYPE" SpanTypes.HTTP_SERVER "$Tags.COMPONENT" serverDecorator.getComponentName() - "$Tags.PEER_HOST_IPV4" { it == null || it == "127.0.0.1" } // Optional - "$Tags.PEER_PORT" Long - "$Tags.HTTP_URL" "${endpoint.resolve(address)}" + "$MoreTags.NET_PEER_IP" { it == null || it == "127.0.0.1" } // Optional + "$MoreTags.NET_PEER_PORT" Long + "$Tags.HTTP_URL" { it == "${endpoint.resolve(address)}" || it == "${endpoint.resolveWithoutFragment(address)}" } "$Tags.HTTP_METHOD" method "$Tags.HTTP_STATUS" endpoint.status "span.origin.type" handlerName diff --git a/instrumentation/jsp-2.3/src/test/groovy/JSPInstrumentationBasicTests.groovy b/instrumentation/jsp-2.3/src/test/groovy/JSPInstrumentationBasicTests.groovy index d2260f856f..c4de280d89 100644 --- a/instrumentation/jsp-2.3/src/test/groovy/JSPInstrumentationBasicTests.groovy +++ b/instrumentation/jsp-2.3/src/test/groovy/JSPInstrumentationBasicTests.groovy @@ -14,6 +14,7 @@ * limitations under the License. */ import com.google.common.io.Files +import io.opentelemetry.auto.decorator.HttpServerDecorator import io.opentelemetry.auto.instrumentation.api.MoreTags import io.opentelemetry.auto.instrumentation.api.SpanTypes import io.opentelemetry.auto.instrumentation.api.Tags @@ -106,14 +107,14 @@ class JSPInstrumentationBasicTests extends AgentTestRunner { trace(0, 3) { span(0) { parent() - operationName "servlet.request" + operationName expectedOperationName("GET") spanKind SERVER errored false tags { "$MoreTags.SPAN_TYPE" SpanTypes.HTTP_SERVER "$Tags.COMPONENT" "java-web-servlet" - "$Tags.PEER_HOST_IPV4" "127.0.0.1" - "$Tags.PEER_PORT" Long + "$MoreTags.NET_PEER_IP" "127.0.0.1" + "$MoreTags.NET_PEER_PORT" Long "$Tags.HTTP_URL" "http://localhost:$port/$jspWebappContext/$jspFileName" "$Tags.HTTP_METHOD" "GET" "$Tags.HTTP_STATUS" 200 @@ -174,15 +175,15 @@ class JSPInstrumentationBasicTests extends AgentTestRunner { trace(0, 3) { span(0) { parent() - operationName "servlet.request" + operationName expectedOperationName("GET") spanKind SERVER errored false tags { "$MoreTags.SPAN_TYPE" SpanTypes.HTTP_SERVER "$Tags.COMPONENT" "java-web-servlet" - "$Tags.PEER_HOST_IPV4" "127.0.0.1" - "$Tags.PEER_PORT" Long - "$Tags.HTTP_URL" "http://localhost:$port/$jspWebappContext/getQuery.jsp" + "$MoreTags.NET_PEER_IP" "127.0.0.1" + "$MoreTags.NET_PEER_PORT" Long + "$Tags.HTTP_URL" "http://localhost:$port/$jspWebappContext/getQuery.jsp?$queryString" "$Tags.HTTP_METHOD" "GET" "$Tags.HTTP_STATUS" 200 "span.origin.type" "org.apache.catalina.core.ApplicationFilterChain" @@ -239,14 +240,14 @@ class JSPInstrumentationBasicTests extends AgentTestRunner { trace(0, 3) { span(0) { parent() - operationName "servlet.request" + operationName expectedOperationName("POST") spanKind SERVER errored false tags { "$MoreTags.SPAN_TYPE" SpanTypes.HTTP_SERVER "$Tags.COMPONENT" "java-web-servlet" - "$Tags.PEER_HOST_IPV4" "127.0.0.1" - "$Tags.PEER_PORT" Long + "$MoreTags.NET_PEER_IP" "127.0.0.1" + "$MoreTags.NET_PEER_PORT" Long "$Tags.HTTP_URL" "http://localhost:$port/$jspWebappContext/post.jsp" "$Tags.HTTP_METHOD" "POST" "$Tags.HTTP_STATUS" 200 @@ -301,14 +302,14 @@ class JSPInstrumentationBasicTests extends AgentTestRunner { trace(0, 3) { span(0) { parent() - operationName "servlet.request" + operationName expectedOperationName("GET") spanKind SERVER errored true tags { "$MoreTags.SPAN_TYPE" SpanTypes.HTTP_SERVER "$Tags.COMPONENT" "java-web-servlet" - "$Tags.PEER_HOST_IPV4" "127.0.0.1" - "$Tags.PEER_PORT" Long + "$MoreTags.NET_PEER_IP" "127.0.0.1" + "$MoreTags.NET_PEER_PORT" Long "$Tags.HTTP_URL" "http://localhost:$port/$jspWebappContext/$jspFileName" "$Tags.HTTP_METHOD" "GET" "$Tags.HTTP_STATUS" 500 @@ -382,14 +383,14 @@ class JSPInstrumentationBasicTests extends AgentTestRunner { trace(0, 3) { span(0) { parent() - operationName "servlet.request" + operationName expectedOperationName("GET") spanKind SERVER errored false tags { "$MoreTags.SPAN_TYPE" SpanTypes.HTTP_SERVER "$Tags.COMPONENT" "java-web-servlet" - "$Tags.PEER_HOST_IPV4" "127.0.0.1" - "$Tags.PEER_PORT" Long + "$MoreTags.NET_PEER_IP" "127.0.0.1" + "$MoreTags.NET_PEER_PORT" Long "$Tags.HTTP_URL" "http://localhost:$port/$jspWebappContext/includes/includeHtml.jsp" "$Tags.HTTP_METHOD" "GET" "$Tags.HTTP_STATUS" 200 @@ -443,14 +444,14 @@ class JSPInstrumentationBasicTests extends AgentTestRunner { trace(0, 7) { span(0) { parent() - operationName "servlet.request" + operationName expectedOperationName("GET") spanKind SERVER errored false tags { "$MoreTags.SPAN_TYPE" SpanTypes.HTTP_SERVER "$Tags.COMPONENT" "java-web-servlet" - "$Tags.PEER_HOST_IPV4" "127.0.0.1" - "$Tags.PEER_PORT" Long + "$MoreTags.NET_PEER_IP" "127.0.0.1" + "$MoreTags.NET_PEER_PORT" Long "$Tags.HTTP_URL" "http://localhost:$port/$jspWebappContext/includes/includeMulti.jsp" "$Tags.HTTP_METHOD" "GET" "$Tags.HTTP_STATUS" 200 @@ -552,14 +553,14 @@ class JSPInstrumentationBasicTests extends AgentTestRunner { trace(0, 2) { span(0) { parent() - operationName "servlet.request" + operationName expectedOperationName("GET") spanKind SERVER errored true tags { "$MoreTags.SPAN_TYPE" SpanTypes.HTTP_SERVER "$Tags.COMPONENT" "java-web-servlet" - "$Tags.PEER_HOST_IPV4" "127.0.0.1" - "$Tags.PEER_PORT" Long + "$MoreTags.NET_PEER_IP" "127.0.0.1" + "$MoreTags.NET_PEER_PORT" Long "$Tags.HTTP_URL" "http://localhost:$port/$jspWebappContext/$jspFileName" "$Tags.HTTP_METHOD" "GET" "$Tags.HTTP_STATUS" 500 @@ -610,7 +611,7 @@ class JSPInstrumentationBasicTests extends AgentTestRunner { span(0) { parent() // serviceName jspWebappContext - operationName "servlet.request" + operationName expectedOperationName("GET") spanKind SERVER // FIXME: this is not a great resource name for serving static content. // resourceName "GET /$jspWebappContext/$staticFile" @@ -618,8 +619,8 @@ class JSPInstrumentationBasicTests extends AgentTestRunner { tags { "$MoreTags.SPAN_TYPE" SpanTypes.HTTP_SERVER "$Tags.COMPONENT" "java-web-servlet" - "$Tags.PEER_HOST_IPV4" "127.0.0.1" - "$Tags.PEER_PORT" Long + "$MoreTags.NET_PEER_IP" "127.0.0.1" + "$MoreTags.NET_PEER_PORT" Long "$Tags.HTTP_URL" "http://localhost:$port/$jspWebappContext/$staticFile" "$Tags.HTTP_METHOD" "GET" "$Tags.HTTP_STATUS" 200 @@ -637,4 +638,8 @@ class JSPInstrumentationBasicTests extends AgentTestRunner { where: staticFile = "common/hello.html" } + + String expectedOperationName(String method) { + return method != null ? "HTTP $method" : HttpServerDecorator.DEFAULT_SPAN_NAME + } } diff --git a/instrumentation/jsp-2.3/src/test/groovy/JSPInstrumentationForwardTests.groovy b/instrumentation/jsp-2.3/src/test/groovy/JSPInstrumentationForwardTests.groovy index c9a7101da5..237f4faf37 100644 --- a/instrumentation/jsp-2.3/src/test/groovy/JSPInstrumentationForwardTests.groovy +++ b/instrumentation/jsp-2.3/src/test/groovy/JSPInstrumentationForwardTests.groovy @@ -14,6 +14,7 @@ * limitations under the License. */ import com.google.common.io.Files +import io.opentelemetry.auto.decorator.HttpServerDecorator import io.opentelemetry.auto.instrumentation.api.MoreTags import io.opentelemetry.auto.instrumentation.api.SpanTypes import io.opentelemetry.auto.instrumentation.api.Tags @@ -105,14 +106,14 @@ class JSPInstrumentationForwardTests extends AgentTestRunner { trace(0, 5) { span(0) { parent() - operationName "servlet.request" + operationName expectedOperationName("GET") spanKind SERVER errored false tags { "$MoreTags.SPAN_TYPE" SpanTypes.HTTP_SERVER "$Tags.COMPONENT" "java-web-servlet" - "$Tags.PEER_HOST_IPV4" "127.0.0.1" - "$Tags.PEER_PORT" Long + "$MoreTags.NET_PEER_IP" "127.0.0.1" + "$MoreTags.NET_PEER_PORT" Long "$Tags.HTTP_URL" "http://localhost:$port/$jspWebappContext/$forwardFromFileName" "$Tags.HTTP_METHOD" "GET" "$Tags.HTTP_STATUS" 200 @@ -196,14 +197,14 @@ class JSPInstrumentationForwardTests extends AgentTestRunner { trace(0, 3) { span(0) { parent() - operationName "servlet.request" + operationName expectedOperationName("GET") spanKind SERVER errored false tags { "$MoreTags.SPAN_TYPE" SpanTypes.HTTP_SERVER "$Tags.COMPONENT" "java-web-servlet" - "$Tags.PEER_HOST_IPV4" "127.0.0.1" - "$Tags.PEER_PORT" Long + "$MoreTags.NET_PEER_IP" "127.0.0.1" + "$MoreTags.NET_PEER_PORT" Long "$Tags.HTTP_URL" "http://localhost:$port/$jspWebappContext/forwards/forwardToHtml.jsp" "$Tags.HTTP_METHOD" "GET" "$Tags.HTTP_STATUS" 200 @@ -257,14 +258,14 @@ class JSPInstrumentationForwardTests extends AgentTestRunner { trace(0, 9) { span(0) { parent() - operationName "servlet.request" + operationName expectedOperationName("GET") spanKind SERVER errored false tags { "$MoreTags.SPAN_TYPE" SpanTypes.HTTP_SERVER "$Tags.COMPONENT" "java-web-servlet" - "$Tags.PEER_HOST_IPV4" "127.0.0.1" - "$Tags.PEER_PORT" Long + "$MoreTags.NET_PEER_IP" "127.0.0.1" + "$MoreTags.NET_PEER_PORT" Long "$Tags.HTTP_URL" "http://localhost:$port/$jspWebappContext/forwards/forwardToIncludeMulti.jsp" "$Tags.HTTP_METHOD" "GET" "$Tags.HTTP_STATUS" 200 @@ -393,14 +394,14 @@ class JSPInstrumentationForwardTests extends AgentTestRunner { trace(0, 7) { span(0) { parent() - operationName "servlet.request" + operationName expectedOperationName("GET") spanKind SERVER errored false tags { "$MoreTags.SPAN_TYPE" SpanTypes.HTTP_SERVER "$Tags.COMPONENT" "java-web-servlet" - "$Tags.PEER_HOST_IPV4" "127.0.0.1" - "$Tags.PEER_PORT" Long + "$MoreTags.NET_PEER_IP" "127.0.0.1" + "$MoreTags.NET_PEER_PORT" Long "$Tags.HTTP_URL" "http://localhost:$port/$jspWebappContext/forwards/forwardToJspForward.jsp" "$Tags.HTTP_METHOD" "GET" "$Tags.HTTP_STATUS" 200 @@ -504,14 +505,14 @@ class JSPInstrumentationForwardTests extends AgentTestRunner { trace(0, 4) { span(0) { parent() - operationName "servlet.request" + operationName expectedOperationName("GET") spanKind SERVER errored true tags { "$MoreTags.SPAN_TYPE" SpanTypes.HTTP_SERVER "$Tags.COMPONENT" "java-web-servlet" - "$Tags.PEER_HOST_IPV4" "127.0.0.1" - "$Tags.PEER_PORT" Long + "$MoreTags.NET_PEER_IP" "127.0.0.1" + "$MoreTags.NET_PEER_PORT" Long "$Tags.HTTP_URL" "http://localhost:$port/$jspWebappContext/forwards/forwardToCompileError.jsp" "$Tags.HTTP_METHOD" "GET" "$Tags.HTTP_STATUS" 500 @@ -580,14 +581,14 @@ class JSPInstrumentationForwardTests extends AgentTestRunner { trace(0, 3) { span(0) { parent() - operationName "servlet.request" + operationName expectedOperationName("GET") spanKind SERVER errored false tags { "$MoreTags.SPAN_TYPE" SpanTypes.HTTP_SERVER "$Tags.COMPONENT" "java-web-servlet" - "$Tags.PEER_HOST_IPV4" "127.0.0.1" - "$Tags.PEER_PORT" Long + "$MoreTags.NET_PEER_IP" "127.0.0.1" + "$MoreTags.NET_PEER_PORT" Long "$Tags.HTTP_URL" "http://localhost:$port/$jspWebappContext/forwards/forwardToNonExistent.jsp" "$Tags.HTTP_METHOD" "GET" "$Tags.HTTP_STATUS" 404 @@ -627,4 +628,8 @@ class JSPInstrumentationForwardTests extends AgentTestRunner { cleanup: res.close() } + + String expectedOperationName(String method) { + return method != null ? "HTTP $method" : HttpServerDecorator.DEFAULT_SPAN_NAME + } } diff --git a/instrumentation/lettuce-5.0/src/main/java8/io/opentelemetry/auto/instrumentation/lettuce/LettuceClientDecorator.java b/instrumentation/lettuce-5.0/src/main/java8/io/opentelemetry/auto/instrumentation/lettuce/LettuceClientDecorator.java index 2183ce69e7..0b33f72ce1 100644 --- a/instrumentation/lettuce-5.0/src/main/java8/io/opentelemetry/auto/instrumentation/lettuce/LettuceClientDecorator.java +++ b/instrumentation/lettuce-5.0/src/main/java8/io/opentelemetry/auto/instrumentation/lettuce/LettuceClientDecorator.java @@ -64,8 +64,8 @@ public class LettuceClientDecorator extends DatabaseClientDecorator { @Override public Span onConnection(final Span span, final RedisURI connection) { if (connection != null) { - span.setAttribute(Tags.PEER_HOSTNAME, connection.getHost()); - span.setAttribute(Tags.PEER_PORT, connection.getPort()); + span.setAttribute(MoreTags.NET_PEER_NAME, connection.getHost()); + span.setAttribute(MoreTags.NET_PEER_PORT, connection.getPort()); span.setAttribute("db.redis.dbIndex", connection.getDatabase()); span.setAttribute( diff --git a/instrumentation/lettuce-5.0/src/test/groovy/LettuceAsyncClientTest.groovy b/instrumentation/lettuce-5.0/src/test/groovy/LettuceAsyncClientTest.groovy index 089d68f127..9c08b2673f 100644 --- a/instrumentation/lettuce-5.0/src/test/groovy/LettuceAsyncClientTest.groovy +++ b/instrumentation/lettuce-5.0/src/test/groovy/LettuceAsyncClientTest.groovy @@ -140,8 +140,8 @@ class LettuceAsyncClientTest extends AgentTestRunner { "$MoreTags.RESOURCE_NAME" "CONNECT:" + dbAddr "$MoreTags.SPAN_TYPE" SpanTypes.REDIS "$Tags.COMPONENT" "redis-client" - "$Tags.PEER_HOSTNAME" HOST - "$Tags.PEER_PORT" port + "$MoreTags.NET_PEER_NAME" HOST + "$MoreTags.NET_PEER_PORT" port "$Tags.DB_TYPE" "redis" "db.redis.dbIndex" 0 } @@ -177,8 +177,8 @@ class LettuceAsyncClientTest extends AgentTestRunner { "$MoreTags.RESOURCE_NAME" "CONNECT:" + dbAddrNonExistent "$MoreTags.SPAN_TYPE" SpanTypes.REDIS "$Tags.COMPONENT" "redis-client" - "$Tags.PEER_HOSTNAME" HOST - "$Tags.PEER_PORT" incorrectPort + "$MoreTags.NET_PEER_NAME" HOST + "$MoreTags.NET_PEER_PORT" incorrectPort "$Tags.DB_TYPE" "redis" "db.redis.dbIndex" 0 errorTags CompletionException, String diff --git a/instrumentation/lettuce-5.0/src/test/groovy/LettuceSyncClientTest.groovy b/instrumentation/lettuce-5.0/src/test/groovy/LettuceSyncClientTest.groovy index ad0f2c3a84..5655784bd0 100644 --- a/instrumentation/lettuce-5.0/src/test/groovy/LettuceSyncClientTest.groovy +++ b/instrumentation/lettuce-5.0/src/test/groovy/LettuceSyncClientTest.groovy @@ -120,8 +120,8 @@ class LettuceSyncClientTest extends AgentTestRunner { "$MoreTags.RESOURCE_NAME" "CONNECT:" + dbAddr "$MoreTags.SPAN_TYPE" SpanTypes.REDIS "$Tags.COMPONENT" "redis-client" - "$Tags.PEER_HOSTNAME" HOST - "$Tags.PEER_PORT" port + "$MoreTags.NET_PEER_NAME" HOST + "$MoreTags.NET_PEER_PORT" port "$Tags.DB_TYPE" "redis" "db.redis.dbIndex" 0 } @@ -154,8 +154,8 @@ class LettuceSyncClientTest extends AgentTestRunner { "$MoreTags.RESOURCE_NAME" "CONNECT:" + dbAddrNonExistent "$MoreTags.SPAN_TYPE" SpanTypes.REDIS "$Tags.COMPONENT" "redis-client" - "$Tags.PEER_HOSTNAME" HOST - "$Tags.PEER_PORT" incorrectPort + "$MoreTags.NET_PEER_NAME" HOST + "$MoreTags.NET_PEER_PORT" incorrectPort "$Tags.DB_TYPE" "redis" "db.redis.dbIndex" 0 errorTags CompletionException, String diff --git a/instrumentation/mongo/mongo-3.1/src/test/groovy/MongoClientTest.groovy b/instrumentation/mongo/mongo-3.1/src/test/groovy/MongoClientTest.groovy index 4d8ec83e01..42d0a3fb4c 100644 --- a/instrumentation/mongo/mongo-3.1/src/test/groovy/MongoClientTest.groovy +++ b/instrumentation/mongo/mongo-3.1/src/test/groovy/MongoClientTest.groovy @@ -264,9 +264,9 @@ class MongoClientTest extends MongoBaseTest { "$MoreTags.RESOURCE_NAME" { it.replace(" ", "") == statement } "$MoreTags.SPAN_TYPE" SpanTypes.MONGO "$Tags.COMPONENT" "java-mongo" - "$Tags.PEER_HOSTNAME" "localhost" - "$Tags.PEER_HOST_IPV4" "127.0.0.1" - "$Tags.PEER_PORT" port + "$MoreTags.NET_PEER_NAME" "localhost" + "$MoreTags.NET_PEER_IP" "127.0.0.1" + "$MoreTags.NET_PEER_PORT" port "$Tags.DB_STATEMENT" { it.replace(" ", "") == statement } diff --git a/instrumentation/mongo/mongo-3.7/src/test/groovy/MongoClientTest.groovy b/instrumentation/mongo/mongo-3.7/src/test/groovy/MongoClientTest.groovy index 204c62741e..723144926f 100644 --- a/instrumentation/mongo/mongo-3.7/src/test/groovy/MongoClientTest.groovy +++ b/instrumentation/mongo/mongo-3.7/src/test/groovy/MongoClientTest.groovy @@ -267,9 +267,9 @@ class MongoClientTest extends MongoBaseTest { "$MoreTags.RESOURCE_NAME" { it.replace(" ", "") == statement } "$MoreTags.SPAN_TYPE" SpanTypes.MONGO "$Tags.COMPONENT" "java-mongo" - "$Tags.PEER_HOSTNAME" "localhost" - "$Tags.PEER_HOST_IPV4" "127.0.0.1" - "$Tags.PEER_PORT" port + "$MoreTags.NET_PEER_NAME" "localhost" + "$MoreTags.NET_PEER_IP" "127.0.0.1" + "$MoreTags.NET_PEER_PORT" port "$Tags.DB_STATEMENT" { it.replace(" ", "") == statement } diff --git a/instrumentation/mongo/mongo-async-3.3/src/test/groovy/MongoAsyncClientTest.groovy b/instrumentation/mongo/mongo-async-3.3/src/test/groovy/MongoAsyncClientTest.groovy index 90f623ee15..41022515b7 100644 --- a/instrumentation/mongo/mongo-async-3.3/src/test/groovy/MongoAsyncClientTest.groovy +++ b/instrumentation/mongo/mongo-async-3.3/src/test/groovy/MongoAsyncClientTest.groovy @@ -302,9 +302,9 @@ class MongoAsyncClientTest extends MongoBaseTest { "$MoreTags.RESOURCE_NAME" statementEval "$MoreTags.SPAN_TYPE" SpanTypes.MONGO "$Tags.COMPONENT" "java-mongo" - "$Tags.PEER_HOSTNAME" "localhost" - "$Tags.PEER_HOST_IPV4" "127.0.0.1" - "$Tags.PEER_PORT" port + "$MoreTags.NET_PEER_NAME" "localhost" + "$MoreTags.NET_PEER_IP" "127.0.0.1" + "$MoreTags.NET_PEER_PORT" port "$Tags.DB_STATEMENT" statementEval "$Tags.DB_TYPE" "mongo" "$Tags.DB_INSTANCE" instance diff --git a/instrumentation/netty/netty-4.0/src/main/java/io/opentelemetry/auto/instrumentation/netty40/client/HttpClientRequestTracingHandler.java b/instrumentation/netty/netty-4.0/src/main/java/io/opentelemetry/auto/instrumentation/netty40/client/HttpClientRequestTracingHandler.java index d36e012052..0a5bc4636b 100644 --- a/instrumentation/netty/netty-4.0/src/main/java/io/opentelemetry/auto/instrumentation/netty40/client/HttpClientRequestTracingHandler.java +++ b/instrumentation/netty/netty-4.0/src/main/java/io/opentelemetry/auto/instrumentation/netty40/client/HttpClientRequestTracingHandler.java @@ -56,7 +56,8 @@ public class HttpClientRequestTracingHandler extends ChannelOutboundHandlerAdapt ctx.channel().attr(AttributeKeys.CLIENT_PARENT_ATTRIBUTE_KEY).set(null); } - final Span span = TRACER.spanBuilder("netty.client.request").setSpanKind(CLIENT).startSpan(); + final Span span = + TRACER.spanBuilder(DECORATE.spanNameForRequest(request)).setSpanKind(CLIENT).startSpan(); try (final Scope scope = TRACER.withSpan(span)) { DECORATE.afterStart(span); DECORATE.onRequest(span, request); diff --git a/instrumentation/netty/netty-4.0/src/main/java/io/opentelemetry/auto/instrumentation/netty40/server/HttpServerRequestTracingHandler.java b/instrumentation/netty/netty-4.0/src/main/java/io/opentelemetry/auto/instrumentation/netty40/server/HttpServerRequestTracingHandler.java index 5ef55f3047..c78055301d 100644 --- a/instrumentation/netty/netty-4.0/src/main/java/io/opentelemetry/auto/instrumentation/netty40/server/HttpServerRequestTracingHandler.java +++ b/instrumentation/netty/netty-4.0/src/main/java/io/opentelemetry/auto/instrumentation/netty40/server/HttpServerRequestTracingHandler.java @@ -47,7 +47,8 @@ public class HttpServerRequestTracingHandler extends ChannelInboundHandlerAdapte final HttpRequest request = (HttpRequest) msg; - final Span.Builder spanBuilder = TRACER.spanBuilder("netty.request").setSpanKind(SERVER); + final Span.Builder spanBuilder = + TRACER.spanBuilder(DECORATE.spanNameForRequest(request)).setSpanKind(SERVER); try { final SpanContext extractedContext = TRACER.getHttpTextFormat().extract(request.headers(), GETTER); diff --git a/instrumentation/netty/netty-4.0/src/test/groovy/Netty40ClientTest.groovy b/instrumentation/netty/netty-4.0/src/test/groovy/Netty40ClientTest.groovy index 9f05e220e8..edead33ecb 100644 --- a/instrumentation/netty/netty-4.0/src/test/groovy/Netty40ClientTest.groovy +++ b/instrumentation/netty/netty-4.0/src/test/groovy/Netty40ClientTest.groovy @@ -59,11 +59,6 @@ class Netty40ClientTest extends HttpClientTest { return NettyHttpClientDecorator.DECORATE } - @Override - String expectedOperationName() { - return "netty.client.request" - } - @Override boolean testRedirects() { false diff --git a/instrumentation/netty/netty-4.0/src/test/groovy/Netty40ServerTest.groovy b/instrumentation/netty/netty-4.0/src/test/groovy/Netty40ServerTest.groovy index c6b99dbef2..beddaf2140 100644 --- a/instrumentation/netty/netty-4.0/src/test/groovy/Netty40ServerTest.groovy +++ b/instrumentation/netty/netty-4.0/src/test/groovy/Netty40ServerTest.groovy @@ -123,9 +123,4 @@ class Netty40ServerTest extends HttpServerTest { return NettyHttpClientDecorator.DECORATE } - @Override - String expectedOperationName() { - return "netty.client.request" - } - @Override boolean testRedirects() { false diff --git a/instrumentation/netty/netty-4.1/src/test/groovy/Netty41ServerTest.groovy b/instrumentation/netty/netty-4.1/src/test/groovy/Netty41ServerTest.groovy index 296015b838..98cfe2009d 100644 --- a/instrumentation/netty/netty-4.1/src/test/groovy/Netty41ServerTest.groovy +++ b/instrumentation/netty/netty-4.1/src/test/groovy/Netty41ServerTest.groovy @@ -122,9 +122,4 @@ class Netty41ServerTest extends HttpServerTest { return response.code() } - @Override OkHttpClientDecorator decorator() { return OkHttpClientDecorator.DECORATE } - @Override - String expectedOperationName() { - return "okhttp.request" - } - - boolean testRedirects() { false } diff --git a/instrumentation/play-ws/play-ws-1.0/src/main/java/io/opentelemetry/auto/instrumentation/playws1/PlayWSClientInstrumentation.java b/instrumentation/play-ws/play-ws-1.0/src/main/java/io/opentelemetry/auto/instrumentation/playws1/PlayWSClientInstrumentation.java index 53494614c3..f87f52cdfa 100644 --- a/instrumentation/play-ws/play-ws-1.0/src/main/java/io/opentelemetry/auto/instrumentation/playws1/PlayWSClientInstrumentation.java +++ b/instrumentation/play-ws/play-ws-1.0/src/main/java/io/opentelemetry/auto/instrumentation/playws1/PlayWSClientInstrumentation.java @@ -89,7 +89,8 @@ public class PlayWSClientInstrumentation extends Instrumenter.Default { @Advice.Argument(0) final Request request, @Advice.Argument(value = 1, readOnly = false) AsyncHandler asyncHandler) { - final Span span = TRACER.spanBuilder("play-ws.request").setSpanKind(CLIENT).startSpan(); + final Span span = + TRACER.spanBuilder(DECORATE.spanNameForRequest(request)).setSpanKind(CLIENT).startSpan(); DECORATE.afterStart(span); DECORATE.onRequest(span, request); diff --git a/instrumentation/play-ws/play-ws-1.0/src/test/groovy/PlayWSClientTest.groovy b/instrumentation/play-ws/play-ws-1.0/src/test/groovy/PlayWSClientTest.groovy index 473e40ba6f..fd573c2b65 100644 --- a/instrumentation/play-ws/play-ws-1.0/src/test/groovy/PlayWSClientTest.groovy +++ b/instrumentation/play-ws/play-ws-1.0/src/test/groovy/PlayWSClientTest.groovy @@ -78,10 +78,6 @@ class PlayWSClientTest extends HttpClientTest { return PlayWSClientDecorator.DECORATE } - String expectedOperationName() { - return "play-ws.request" - } - @Override boolean testCircularRedirects() { return false diff --git a/instrumentation/play-ws/play-ws-2.0/src/main/java/io/opentelemetry/auto/instrumentation/playws2/PlayWSClientInstrumentation.java b/instrumentation/play-ws/play-ws-2.0/src/main/java/io/opentelemetry/auto/instrumentation/playws2/PlayWSClientInstrumentation.java index 654216fd43..ae179ba92c 100644 --- a/instrumentation/play-ws/play-ws-2.0/src/main/java/io/opentelemetry/auto/instrumentation/playws2/PlayWSClientInstrumentation.java +++ b/instrumentation/play-ws/play-ws-2.0/src/main/java/io/opentelemetry/auto/instrumentation/playws2/PlayWSClientInstrumentation.java @@ -92,7 +92,8 @@ public class PlayWSClientInstrumentation extends Instrumenter.Default { @Advice.Argument(0) final Request request, @Advice.Argument(value = 1, readOnly = false) AsyncHandler asyncHandler) { - final Span span = TRACER.spanBuilder("play-ws.request").setSpanKind(CLIENT).startSpan(); + final Span span = + TRACER.spanBuilder(DECORATE.spanNameForRequest(request)).setSpanKind(CLIENT).startSpan(); DECORATE.afterStart(span); DECORATE.onRequest(span, request); diff --git a/instrumentation/play-ws/play-ws-2.0/src/test/groovy/PlayWSClientTest.groovy b/instrumentation/play-ws/play-ws-2.0/src/test/groovy/PlayWSClientTest.groovy index 2f6d3e1e04..865031836f 100644 --- a/instrumentation/play-ws/play-ws-2.0/src/test/groovy/PlayWSClientTest.groovy +++ b/instrumentation/play-ws/play-ws-2.0/src/test/groovy/PlayWSClientTest.groovy @@ -78,10 +78,6 @@ class PlayWSClientTest extends HttpClientTest { return PlayWSClientDecorator.DECORATE } - String expectedOperationName() { - return "play-ws.request" - } - @Override boolean testCircularRedirects() { return false diff --git a/instrumentation/play-ws/play-ws-2.1/src/main/java/io/opentelemetry/auto/instrumentation/playws21/PlayWSClientInstrumentation.java b/instrumentation/play-ws/play-ws-2.1/src/main/java/io/opentelemetry/auto/instrumentation/playws21/PlayWSClientInstrumentation.java index 3dd20a6b01..fa184ba98a 100644 --- a/instrumentation/play-ws/play-ws-2.1/src/main/java/io/opentelemetry/auto/instrumentation/playws21/PlayWSClientInstrumentation.java +++ b/instrumentation/play-ws/play-ws-2.1/src/main/java/io/opentelemetry/auto/instrumentation/playws21/PlayWSClientInstrumentation.java @@ -89,7 +89,8 @@ public class PlayWSClientInstrumentation extends Instrumenter.Default { @Advice.Argument(0) final Request request, @Advice.Argument(value = 1, readOnly = false) AsyncHandler asyncHandler) { - final Span span = TRACER.spanBuilder("play-ws.request").setSpanKind(CLIENT).startSpan(); + final Span span = + TRACER.spanBuilder(DECORATE.spanNameForRequest(request)).setSpanKind(CLIENT).startSpan(); DECORATE.afterStart(span); DECORATE.onRequest(span, request); diff --git a/instrumentation/play-ws/play-ws-2.1/src/test/groovy/PlayWSClientTest.groovy b/instrumentation/play-ws/play-ws-2.1/src/test/groovy/PlayWSClientTest.groovy index 631a2cdd71..c41d84c802 100644 --- a/instrumentation/play-ws/play-ws-2.1/src/test/groovy/PlayWSClientTest.groovy +++ b/instrumentation/play-ws/play-ws-2.1/src/test/groovy/PlayWSClientTest.groovy @@ -78,10 +78,6 @@ class PlayWSClientTest extends HttpClientTest { return PlayWSClientDecorator.DECORATE } - String expectedOperationName() { - return "play-ws.request" - } - @Override boolean testCircularRedirects() { return false diff --git a/instrumentation/play/play-2.4/src/main/java8/io/opentelemetry/auto/instrumentation/play24/PlayHttpServerDecorator.java b/instrumentation/play/play-2.4/src/main/java8/io/opentelemetry/auto/instrumentation/play24/PlayHttpServerDecorator.java index 5f4e4859f5..f9fac74881 100644 --- a/instrumentation/play/play-2.4/src/main/java8/io/opentelemetry/auto/instrumentation/play24/PlayHttpServerDecorator.java +++ b/instrumentation/play/play-2.4/src/main/java8/io/opentelemetry/auto/instrumentation/play24/PlayHttpServerDecorator.java @@ -77,6 +77,7 @@ public class PlayHttpServerDecorator extends HttpServerDecorator { return NettyHttpClientDecorator.DECORATE } - @Override - String expectedOperationName() { - return "netty.client.request" - } - @Override boolean testRedirects() { false diff --git a/instrumentation/play/play-2.4/src/test/groovy/server/PlayServerTest.groovy b/instrumentation/play/play-2.4/src/test/groovy/server/PlayServerTest.groovy index 91c54bf8ae..4ddb43d2e4 100644 --- a/instrumentation/play/play-2.4/src/test/groovy/server/PlayServerTest.groovy +++ b/instrumentation/play/play-2.4/src/test/groovy/server/PlayServerTest.groovy @@ -80,11 +80,6 @@ class PlayServerTest extends HttpServerTest { return NettyHttpServerDecorator.DECORATE } - @Override - String expectedOperationName() { - return "netty.request" - } - @Override boolean hasHandlerSpan() { true @@ -105,7 +100,7 @@ class PlayServerTest extends HttpServerTest { tags { "$MoreTags.SPAN_TYPE" SpanTypes.HTTP_SERVER "$Tags.COMPONENT" PlayHttpServerDecorator.DECORATE.getComponentName() - "$Tags.PEER_HOST_IPV4" { it == null || it == "127.0.0.1" } // Optional + "$MoreTags.NET_PEER_IP" { it == null || it == "127.0.0.1" } // Optional "$Tags.HTTP_URL" String "$Tags.HTTP_METHOD" String "$Tags.HTTP_STATUS" Long diff --git a/instrumentation/play/play-2.6/src/main/java8/io/opentelemetry/auto/instrumentation/play26/PlayHttpServerDecorator.java b/instrumentation/play/play-2.6/src/main/java8/io/opentelemetry/auto/instrumentation/play26/PlayHttpServerDecorator.java index 4f86ee9507..1ecd9c4006 100644 --- a/instrumentation/play/play-2.6/src/main/java8/io/opentelemetry/auto/instrumentation/play26/PlayHttpServerDecorator.java +++ b/instrumentation/play/play-2.6/src/main/java8/io/opentelemetry/auto/instrumentation/play26/PlayHttpServerDecorator.java @@ -80,6 +80,7 @@ public class PlayHttpServerDecorator extends HttpServerDecorator { return AkkaHttpServerDecorator.DECORATE } - @Override - String expectedOperationName() { - return "akka-http.request" - } - @Override boolean hasHandlerSpan() { true @@ -110,7 +105,7 @@ class PlayServerTest extends HttpServerTest { tags { "$MoreTags.SPAN_TYPE" SpanTypes.HTTP_SERVER "$Tags.COMPONENT" PlayHttpServerDecorator.DECORATE.getComponentName() - "$Tags.PEER_HOST_IPV4" { it == null || it == "127.0.0.1" } // Optional + "$MoreTags.NET_PEER_IP" { it == null || it == "127.0.0.1" } // Optional "$Tags.HTTP_URL" String "$Tags.HTTP_METHOD" String "$Tags.HTTP_STATUS" Long @@ -126,7 +121,7 @@ class PlayServerTest extends HttpServerTest { void serverSpan(TraceAssert trace, int index, String traceID = null, String parentID = null, String method = "GET", ServerEndpoint endpoint = SUCCESS) { trace.span(index) { - operationName expectedOperationName() + operationName expectedOperationName(method) spanKind SERVER errored endpoint.errored if (parentID != null) { @@ -139,7 +134,7 @@ class PlayServerTest extends HttpServerTest { "$MoreTags.SPAN_TYPE" SpanTypes.HTTP_SERVER "$Tags.COMPONENT" serverDecorator.getComponentName() "$Tags.HTTP_STATUS" endpoint.status - "$Tags.HTTP_URL" "${endpoint.resolve(address)}" + "$Tags.HTTP_URL" { it == "${endpoint.resolve(address)}" || it == "${endpoint.resolveWithoutFragment(address)}" } "$Tags.HTTP_METHOD" method if (endpoint.errored) { "error.msg" { it == null || it == EXCEPTION.body } diff --git a/instrumentation/rabbitmq-amqp-2.7/src/main/java/io/opentelemetry/auto/instrumentation/rabbitmq/amqp/RabbitChannelInstrumentation.java b/instrumentation/rabbitmq-amqp-2.7/src/main/java/io/opentelemetry/auto/instrumentation/rabbitmq/amqp/RabbitChannelInstrumentation.java index f7a6f95c78..b0c2a47956 100644 --- a/instrumentation/rabbitmq-amqp-2.7/src/main/java/io/opentelemetry/auto/instrumentation/rabbitmq/amqp/RabbitChannelInstrumentation.java +++ b/instrumentation/rabbitmq-amqp-2.7/src/main/java/io/opentelemetry/auto/instrumentation/rabbitmq/amqp/RabbitChannelInstrumentation.java @@ -47,7 +47,6 @@ import com.rabbitmq.client.MessageProperties; import io.opentelemetry.auto.bootstrap.CallDepthThreadLocalMap; import io.opentelemetry.auto.instrumentation.api.MoreTags; import io.opentelemetry.auto.instrumentation.api.SpanWithScope; -import io.opentelemetry.auto.instrumentation.api.Tags; import io.opentelemetry.auto.tooling.Instrumenter; import io.opentelemetry.context.Scope; import io.opentelemetry.trace.Span; @@ -149,7 +148,7 @@ public class RabbitChannelInstrumentation extends Instrumenter.Default { } final Span span = spanBuilder.startSpan(); span.setAttribute(MoreTags.RESOURCE_NAME, method); - span.setAttribute(Tags.PEER_PORT, connection.getPort()); + span.setAttribute(MoreTags.NET_PEER_PORT, connection.getPort()); DECORATE.afterStart(span); DECORATE.onPeerConnection(span, connection.getAddress()); CURRENT_RABBIT_SPAN.set(span); @@ -270,7 +269,7 @@ public class RabbitChannelInstrumentation extends Instrumenter.Default { if (response != null) { span.setAttribute("message.size", response.getBody().length); } - span.setAttribute(Tags.PEER_PORT, connection.getPort()); + span.setAttribute(MoreTags.NET_PEER_PORT, connection.getPort()); try (final Scope scope = TRACER.withSpan(span)) { CONSUMER_DECORATE.afterStart(span); CONSUMER_DECORATE.onGet(span, queue); diff --git a/instrumentation/rabbitmq-amqp-2.7/src/test/groovy/RabbitMQTest.groovy b/instrumentation/rabbitmq-amqp-2.7/src/test/groovy/RabbitMQTest.groovy index 5f3a774728..6c8c407488 100644 --- a/instrumentation/rabbitmq-amqp-2.7/src/test/groovy/RabbitMQTest.groovy +++ b/instrumentation/rabbitmq-amqp-2.7/src/test/groovy/RabbitMQTest.groovy @@ -368,9 +368,9 @@ class RabbitMQTest extends AgentTestRunner { "$MoreTags.SERVICE_NAME" "rabbitmq" "$MoreTags.RESOURCE_NAME" resource "$Tags.COMPONENT" "rabbitmq-amqp" - "$Tags.PEER_HOSTNAME" { it == null || it instanceof String } - "$Tags.PEER_HOST_IPV4" { "127.0.0.1" } - "$Tags.PEER_PORT" { it == null || it instanceof Long } + "$MoreTags.NET_PEER_NAME" { it == null || it instanceof String } + "$MoreTags.NET_PEER_IP" { "127.0.0.1" } + "$MoreTags.NET_PEER_PORT" { it == null || it instanceof Long } switch (tag("amqp.command")?.stringValue) { case "basic.publish": diff --git a/instrumentation/ratpack-1.4/src/main/java8/io/opentelemetry/auto/instrumentation/ratpack/RatpackServerDecorator.java b/instrumentation/ratpack-1.4/src/main/java8/io/opentelemetry/auto/instrumentation/ratpack/RatpackServerDecorator.java index 0066c1334d..f24f066af2 100644 --- a/instrumentation/ratpack-1.4/src/main/java8/io/opentelemetry/auto/instrumentation/ratpack/RatpackServerDecorator.java +++ b/instrumentation/ratpack-1.4/src/main/java8/io/opentelemetry/auto/instrumentation/ratpack/RatpackServerDecorator.java @@ -89,6 +89,7 @@ public class RatpackServerDecorator extends HttpServerDecorator { return NettyHttpClientDecorator.DECORATE } - @Override - String expectedOperationName() { - return "netty.client.request" - } - @Override boolean testRedirects() { false diff --git a/instrumentation/ratpack-1.4/src/test/groovy/server/RatpackAsyncHttpServerTest.groovy b/instrumentation/ratpack-1.4/src/test/groovy/server/RatpackAsyncHttpServerTest.groovy index d352215cdb..d20d9379b9 100644 --- a/instrumentation/ratpack-1.4/src/test/groovy/server/RatpackAsyncHttpServerTest.groovy +++ b/instrumentation/ratpack-1.4/src/test/groovy/server/RatpackAsyncHttpServerTest.groovy @@ -21,6 +21,7 @@ import ratpack.test.embed.EmbeddedApp import static io.opentelemetry.auto.test.base.HttpServerTest.ServerEndpoint.ERROR import static io.opentelemetry.auto.test.base.HttpServerTest.ServerEndpoint.EXCEPTION +import static io.opentelemetry.auto.test.base.HttpServerTest.ServerEndpoint.PATH_PARAM import static io.opentelemetry.auto.test.base.HttpServerTest.ServerEndpoint.QUERY_PARAM import static io.opentelemetry.auto.test.base.HttpServerTest.ServerEndpoint.REDIRECT import static io.opentelemetry.auto.test.base.HttpServerTest.ServerEndpoint.SUCCESS @@ -92,6 +93,17 @@ class RatpackAsyncHttpServerTest extends RatpackHttpServerTest { } } } + prefix("path/:id/param") { + all { + Promise.sync { + PATH_PARAM + }.fork().then { ServerEndpoint endpoint -> + controller(endpoint) { + context.response.status(endpoint.status).send(pathTokens.id) + } + } + } + } } } ratpack.server.start() diff --git a/instrumentation/ratpack-1.4/src/test/groovy/server/RatpackForkedHttpServerTest.groovy b/instrumentation/ratpack-1.4/src/test/groovy/server/RatpackForkedHttpServerTest.groovy index 55278e8340..e62fd54f0a 100644 --- a/instrumentation/ratpack-1.4/src/test/groovy/server/RatpackForkedHttpServerTest.groovy +++ b/instrumentation/ratpack-1.4/src/test/groovy/server/RatpackForkedHttpServerTest.groovy @@ -21,6 +21,7 @@ import ratpack.test.embed.EmbeddedApp import static io.opentelemetry.auto.test.base.HttpServerTest.ServerEndpoint.ERROR import static io.opentelemetry.auto.test.base.HttpServerTest.ServerEndpoint.EXCEPTION +import static io.opentelemetry.auto.test.base.HttpServerTest.ServerEndpoint.PATH_PARAM import static io.opentelemetry.auto.test.base.HttpServerTest.ServerEndpoint.QUERY_PARAM import static io.opentelemetry.auto.test.base.HttpServerTest.ServerEndpoint.REDIRECT import static io.opentelemetry.auto.test.base.HttpServerTest.ServerEndpoint.SUCCESS @@ -92,6 +93,17 @@ class RatpackForkedHttpServerTest extends RatpackHttpServerTest { } } } + prefix("path/:id/param") { + all { + Promise.sync { + PATH_PARAM + }.fork().then { ServerEndpoint endpoint -> + controller(endpoint) { + context.response.status(endpoint.status).send(pathTokens.id) + } + } + } + } } } ratpack.server.start() diff --git a/instrumentation/ratpack-1.4/src/test/groovy/server/RatpackHttpServerTest.groovy b/instrumentation/ratpack-1.4/src/test/groovy/server/RatpackHttpServerTest.groovy index 9133efe074..26fcd9ac6c 100644 --- a/instrumentation/ratpack-1.4/src/test/groovy/server/RatpackHttpServerTest.groovy +++ b/instrumentation/ratpack-1.4/src/test/groovy/server/RatpackHttpServerTest.groovy @@ -30,6 +30,7 @@ import ratpack.test.embed.EmbeddedApp import static io.opentelemetry.auto.test.base.HttpServerTest.ServerEndpoint.ERROR import static io.opentelemetry.auto.test.base.HttpServerTest.ServerEndpoint.EXCEPTION +import static io.opentelemetry.auto.test.base.HttpServerTest.ServerEndpoint.PATH_PARAM import static io.opentelemetry.auto.test.base.HttpServerTest.ServerEndpoint.QUERY_PARAM import static io.opentelemetry.auto.test.base.HttpServerTest.ServerEndpoint.REDIRECT import static io.opentelemetry.auto.test.base.HttpServerTest.ServerEndpoint.SUCCESS @@ -83,6 +84,13 @@ class RatpackHttpServerTest extends HttpServerTest { return Servlet3Decorator.DECORATE } - @Override - String expectedOperationName() { - return "servlet.request" - } - @Override boolean redirectHasBody() { true @@ -100,7 +95,7 @@ class GlassFishServerTest extends HttpServerTest { @Override void serverSpan(TraceAssert trace, int index, String traceID = null, String parentID = null, String method = "GET", ServerEndpoint endpoint = SUCCESS) { trace.span(index) { - operationName expectedOperationName() + operationName expectedOperationName(method) spanKind SERVER errored endpoint.errored if (parentID != null) { @@ -112,11 +107,11 @@ class GlassFishServerTest extends HttpServerTest { tags { "$MoreTags.SPAN_TYPE" SpanTypes.HTTP_SERVER "$Tags.COMPONENT" serverDecorator.getComponentName() - "$Tags.PEER_HOST_IPV4" { it == null || it == "127.0.0.1" } // Optional - "$Tags.PEER_PORT" Long + "$MoreTags.NET_PEER_IP" { it == null || it == "127.0.0.1" } // Optional + "$MoreTags.NET_PEER_PORT" Long "$Tags.HTTP_STATUS" endpoint.status "$Tags.HTTP_METHOD" method - "$Tags.HTTP_URL" "${endpoint.resolve(address)}" + "$Tags.HTTP_URL" { it == "${endpoint.resolve(address)}" || it == "${endpoint.resolveWithoutFragment(address)}" } "servlet.context" "/$context" "servlet.path" endpoint.path "span.origin.type" { it.startsWith("TestServlets\$") || it == DefaultServlet.name } diff --git a/instrumentation/servlet/request-2.3/src/main/java/io/opentelemetry/auto/instrumentation/servlet2/Servlet2Advice.java b/instrumentation/servlet/request-2.3/src/main/java/io/opentelemetry/auto/instrumentation/servlet2/Servlet2Advice.java index c528a3260b..ed71f73d4f 100644 --- a/instrumentation/servlet/request-2.3/src/main/java/io/opentelemetry/auto/instrumentation/servlet2/Servlet2Advice.java +++ b/instrumentation/servlet/request-2.3/src/main/java/io/opentelemetry/auto/instrumentation/servlet2/Servlet2Advice.java @@ -63,10 +63,11 @@ public class Servlet2Advice { response = new StatusSavingHttpServletResponseWrapper((HttpServletResponse) response); } - final Span.Builder builder = TRACER.spanBuilder("servlet.request").setSpanKind(SERVER); + final Span.Builder builder = + TRACER.spanBuilder(DECORATE.spanNameForRequest(httpServletRequest)).setSpanKind(SERVER); try { final SpanContext extractedContext = - TRACER.getHttpTextFormat().extract((HttpServletRequest) request, GETTER); + TRACER.getHttpTextFormat().extract(httpServletRequest, GETTER); builder.setParent(extractedContext); } catch (final IllegalArgumentException e) { // Couldn't extract a context. We should treat this as a root span. ' diff --git a/instrumentation/servlet/request-2.3/src/test/groovy/JettyServlet2Test.groovy b/instrumentation/servlet/request-2.3/src/test/groovy/JettyServlet2Test.groovy index b0489c7701..09e1c8f3db 100644 --- a/instrumentation/servlet/request-2.3/src/test/groovy/JettyServlet2Test.groovy +++ b/instrumentation/servlet/request-2.3/src/test/groovy/JettyServlet2Test.groovy @@ -82,11 +82,6 @@ class JettyServlet2Test extends HttpServerTest { return Servlet2Decorator.DECORATE } - @Override - String expectedOperationName() { - return "servlet.request" - } - @Override boolean testNotFound() { false @@ -95,7 +90,7 @@ class JettyServlet2Test extends HttpServerTest { // parent span must be cast otherwise it breaks debugging classloading (junit loads it early) void serverSpan(TraceAssert trace, int index, String traceID = null, String parentID = null, String method = "GET", ServerEndpoint endpoint = SUCCESS) { trace.span(index) { - operationName expectedOperationName() + operationName expectedOperationName(method) spanKind SERVER errored endpoint.errored if (parentID != null) { @@ -107,9 +102,9 @@ class JettyServlet2Test extends HttpServerTest { tags { "$MoreTags.SPAN_TYPE" SpanTypes.HTTP_SERVER "$Tags.COMPONENT" serverDecorator.getComponentName() - "$Tags.PEER_HOST_IPV4" "127.0.0.1" + "$MoreTags.NET_PEER_IP" "127.0.0.1" // No peer port - "$Tags.HTTP_URL" "${endpoint.resolve(address)}" + "$Tags.HTTP_URL" { it == "${endpoint.resolve(address)}" || it == "${endpoint.resolveWithoutFragment(address)}" } "$Tags.HTTP_METHOD" method "$Tags.HTTP_STATUS" endpoint.status "servlet.context" "/$CONTEXT" diff --git a/instrumentation/servlet/request-3.0/src/main/java/io/opentelemetry/auto/instrumentation/servlet3/Servlet3Advice.java b/instrumentation/servlet/request-3.0/src/main/java/io/opentelemetry/auto/instrumentation/servlet3/Servlet3Advice.java index 2575283649..8f07d4163e 100644 --- a/instrumentation/servlet/request-3.0/src/main/java/io/opentelemetry/auto/instrumentation/servlet3/Servlet3Advice.java +++ b/instrumentation/servlet/request-3.0/src/main/java/io/opentelemetry/auto/instrumentation/servlet3/Servlet3Advice.java @@ -85,10 +85,11 @@ public class Servlet3Advice { } final HttpServletRequest httpServletRequest = (HttpServletRequest) request; - final Span.Builder builder = TRACER.spanBuilder("servlet.request").setSpanKind(SERVER); + final Span.Builder builder = + TRACER.spanBuilder(DECORATE.spanNameForRequest(httpServletRequest)).setSpanKind(SERVER); try { final SpanContext extractedContext = - TRACER.getHttpTextFormat().extract((HttpServletRequest) request, GETTER); + TRACER.getHttpTextFormat().extract(httpServletRequest, GETTER); builder.setParent(extractedContext); } catch (final IllegalArgumentException e) { // Couldn't extract a context. We should treat this as a root span. ' diff --git a/instrumentation/servlet/request-3.0/src/test/groovy/AbstractServlet3Test.groovy b/instrumentation/servlet/request-3.0/src/test/groovy/AbstractServlet3Test.groovy index 41c1548529..b14667996f 100644 --- a/instrumentation/servlet/request-3.0/src/test/groovy/AbstractServlet3Test.groovy +++ b/instrumentation/servlet/request-3.0/src/test/groovy/AbstractServlet3Test.groovy @@ -43,11 +43,6 @@ abstract class AbstractServlet3Test extends HttpServerTest extends HttpServerTest extends HttpServerTest { final Context context = subscriber.currentContext(); final Span parentSpan = context.getOrEmpty(Span.class).orElseGet(TRACER::getCurrentSpan); - final Span.Builder builder = TRACER.spanBuilder("http.request").setSpanKind(CLIENT); + final Span.Builder builder = + TRACER.spanBuilder(DECORATE.spanNameForRequest(clientRequest)).setSpanKind(CLIENT); if (parentSpan != null) { builder.setParent(parentSpan); } else { diff --git a/instrumentation/spring-webflux-5.0/src/main/java8/io/opentelemetry/auto/instrumentation/springwebflux/server/HandlerAdapterAdvice.java b/instrumentation/spring-webflux-5.0/src/main/java8/io/opentelemetry/auto/instrumentation/springwebflux/server/HandlerAdapterAdvice.java index 167cbeaa74..adb451b60e 100644 --- a/instrumentation/spring-webflux-5.0/src/main/java8/io/opentelemetry/auto/instrumentation/springwebflux/server/HandlerAdapterAdvice.java +++ b/instrumentation/spring-webflux-5.0/src/main/java8/io/opentelemetry/auto/instrumentation/springwebflux/server/HandlerAdapterAdvice.java @@ -60,9 +60,10 @@ public class HandlerAdapterAdvice { final PathPattern bestPattern = exchange.getAttribute(HandlerMapping.BEST_MATCHING_PATTERN_ATTRIBUTE); if (parentSpan != null && bestPattern != null) { - parentSpan.setAttribute( - MoreTags.RESOURCE_NAME, - exchange.getRequest().getMethodValue() + " " + bestPattern.getPatternString()); + String resourceName = + exchange.getRequest().getMethodValue() + " " + bestPattern.getPatternString(); + parentSpan.updateName(resourceName); + parentSpan.setAttribute(MoreTags.RESOURCE_NAME, resourceName); } return spanWithScope; diff --git a/instrumentation/spring-webflux-5.0/src/main/java8/io/opentelemetry/auto/instrumentation/springwebflux/server/RouteOnSuccessOrError.java b/instrumentation/spring-webflux-5.0/src/main/java8/io/opentelemetry/auto/instrumentation/springwebflux/server/RouteOnSuccessOrError.java index a71e684d0e..8073759202 100644 --- a/instrumentation/spring-webflux-5.0/src/main/java8/io/opentelemetry/auto/instrumentation/springwebflux/server/RouteOnSuccessOrError.java +++ b/instrumentation/spring-webflux-5.0/src/main/java8/io/opentelemetry/auto/instrumentation/springwebflux/server/RouteOnSuccessOrError.java @@ -49,7 +49,9 @@ public class RouteOnSuccessOrError implements BiConsumer, Thr final Span parentSpan = (Span) serverRequest.attributes().get(AdviceUtils.PARENT_SPAN_ATTRIBUTE); if (parentSpan != null) { - parentSpan.setAttribute(MoreTags.RESOURCE_NAME, parseResourceName(predicateString)); + String resourceName = parseResourceName(predicateString); + parentSpan.updateName(resourceName); + parentSpan.setAttribute(MoreTags.RESOURCE_NAME, resourceName); } } } diff --git a/instrumentation/spring-webflux-5.0/src/test/groovy/SpringWebfluxTest.groovy b/instrumentation/spring-webflux-5.0/src/test/groovy/SpringWebfluxTest.groovy index 07b319c4c1..8b4aca387e 100644 --- a/instrumentation/spring-webflux-5.0/src/test/groovy/SpringWebfluxTest.groovy +++ b/instrumentation/spring-webflux-5.0/src/test/groovy/SpringWebfluxTest.groovy @@ -67,15 +67,15 @@ class SpringWebfluxTest extends AgentTestRunner { assertTraces(1) { trace(0, 2) { span(0) { - operationName "netty.request" + operationName "GET $urlPathWithVariables" spanKind SERVER parent() tags { "$MoreTags.RESOURCE_NAME" "GET $urlPathWithVariables" "$MoreTags.SPAN_TYPE" SpanTypes.HTTP_SERVER "$Tags.COMPONENT" "netty" - "$Tags.PEER_HOST_IPV4" "127.0.0.1" - "$Tags.PEER_PORT" Long + "$MoreTags.NET_PEER_IP" "127.0.0.1" + "$MoreTags.NET_PEER_PORT" Long "$Tags.HTTP_URL" url "$Tags.HTTP_METHOD" "GET" "$Tags.HTTP_STATUS" 200 @@ -136,15 +136,15 @@ class SpringWebfluxTest extends AgentTestRunner { println TEST_WRITER trace(0, 3) { span(0) { - operationName "netty.request" + operationName "GET $urlPathWithVariables" spanKind SERVER parent() tags { "$MoreTags.RESOURCE_NAME" "GET $urlPathWithVariables" "$MoreTags.SPAN_TYPE" SpanTypes.HTTP_SERVER "$Tags.COMPONENT" "netty" - "$Tags.PEER_HOST_IPV4" "127.0.0.1" - "$Tags.PEER_PORT" Long + "$MoreTags.NET_PEER_IP" "127.0.0.1" + "$MoreTags.NET_PEER_PORT" Long "$Tags.HTTP_URL" url "$Tags.HTTP_METHOD" "GET" "$Tags.HTTP_STATUS" 200 @@ -209,15 +209,15 @@ class SpringWebfluxTest extends AgentTestRunner { assertTraces(1) { trace(0, 2) { span(0) { - operationName "netty.request" + operationName "GET /**" spanKind SERVER parent() tags { "$MoreTags.RESOURCE_NAME" "GET /**" "$MoreTags.SPAN_TYPE" SpanTypes.HTTP_SERVER "$Tags.COMPONENT" "netty" - "$Tags.PEER_HOST_IPV4" "127.0.0.1" - "$Tags.PEER_PORT" Long + "$MoreTags.NET_PEER_IP" "127.0.0.1" + "$MoreTags.NET_PEER_PORT" Long "$Tags.HTTP_URL" url "$Tags.HTTP_METHOD" "GET" "$Tags.HTTP_STATUS" 404 @@ -255,15 +255,15 @@ class SpringWebfluxTest extends AgentTestRunner { assertTraces(1) { trace(0, 3) { span(0) { - operationName "netty.request" + operationName "POST /echo" spanKind SERVER parent() tags { "$MoreTags.RESOURCE_NAME" "POST /echo" "$MoreTags.SPAN_TYPE" SpanTypes.HTTP_SERVER "$Tags.COMPONENT" "netty" - "$Tags.PEER_HOST_IPV4" "127.0.0.1" - "$Tags.PEER_PORT" Long + "$MoreTags.NET_PEER_IP" "127.0.0.1" + "$MoreTags.NET_PEER_PORT" Long "$Tags.HTTP_URL" url "$Tags.HTTP_METHOD" "POST" "$Tags.HTTP_STATUS" 202 @@ -305,7 +305,7 @@ class SpringWebfluxTest extends AgentTestRunner { assertTraces(1) { trace(0, 2) { span(0) { - operationName "netty.request" + operationName "GET $urlPathWithVariables" spanKind SERVER errored true parent() @@ -313,8 +313,8 @@ class SpringWebfluxTest extends AgentTestRunner { "$MoreTags.RESOURCE_NAME" "GET $urlPathWithVariables" "$MoreTags.SPAN_TYPE" SpanTypes.HTTP_SERVER "$Tags.COMPONENT" "netty" - "$Tags.PEER_HOST_IPV4" "127.0.0.1" - "$Tags.PEER_PORT" Long + "$MoreTags.NET_PEER_IP" "127.0.0.1" + "$MoreTags.NET_PEER_PORT" Long "$Tags.HTTP_URL" url "$Tags.HTTP_METHOD" "GET" "$Tags.HTTP_STATUS" 500 @@ -374,15 +374,15 @@ class SpringWebfluxTest extends AgentTestRunner { // TODO: why order of spans is different in these traces? trace(0, 2) { span(0) { - operationName "netty.request" + operationName "GET /double-greet-redirect" spanKind SERVER parent() tags { "$MoreTags.RESOURCE_NAME" "GET /double-greet-redirect" "$MoreTags.SPAN_TYPE" SpanTypes.HTTP_SERVER "$Tags.COMPONENT" "netty" - "$Tags.PEER_HOST_IPV4" "127.0.0.1" - "$Tags.PEER_PORT" Long + "$MoreTags.NET_PEER_IP" "127.0.0.1" + "$MoreTags.NET_PEER_PORT" Long "$Tags.HTTP_URL" url "$Tags.HTTP_METHOD" "GET" "$Tags.HTTP_STATUS" 307 @@ -405,15 +405,15 @@ class SpringWebfluxTest extends AgentTestRunner { } trace(1, 2) { span(0) { - operationName "netty.request" + operationName "GET /double-greet" spanKind SERVER parent() tags { "$MoreTags.RESOURCE_NAME" "GET /double-greet" "$MoreTags.SPAN_TYPE" SpanTypes.HTTP_SERVER "$Tags.COMPONENT" "netty" - "$Tags.PEER_HOST_IPV4" "127.0.0.1" - "$Tags.PEER_PORT" Long + "$MoreTags.NET_PEER_IP" "127.0.0.1" + "$MoreTags.NET_PEER_PORT" Long "$Tags.HTTP_URL" finalUrl "$Tags.HTTP_METHOD" "GET" "$Tags.HTTP_STATUS" 200 @@ -451,15 +451,15 @@ class SpringWebfluxTest extends AgentTestRunner { responses.eachWithIndex { def response, int i -> trace(i, 2) { span(0) { - operationName "netty.request" + operationName "GET $urlPathWithVariables" spanKind SERVER parent() tags { "$MoreTags.RESOURCE_NAME" "GET $urlPathWithVariables" "$MoreTags.SPAN_TYPE" SpanTypes.HTTP_SERVER "$Tags.COMPONENT" "netty" - "$Tags.PEER_HOST_IPV4" "127.0.0.1" - "$Tags.PEER_PORT" Long + "$MoreTags.NET_PEER_IP" "127.0.0.1" + "$MoreTags.NET_PEER_PORT" Long "$Tags.HTTP_URL" url "$Tags.HTTP_METHOD" "GET" "$Tags.HTTP_STATUS" 200 diff --git a/instrumentation/spring-webflux-5.0/src/test/groovy/client/SpringWebfluxHttpClientTest.groovy b/instrumentation/spring-webflux-5.0/src/test/groovy/client/SpringWebfluxHttpClientTest.groovy index d8e88f32b4..c5d77b63e4 100644 --- a/instrumentation/spring-webflux-5.0/src/test/groovy/client/SpringWebfluxHttpClientTest.groovy +++ b/instrumentation/spring-webflux-5.0/src/test/groovy/client/SpringWebfluxHttpClientTest.groovy @@ -72,10 +72,10 @@ class SpringWebfluxHttpClientTest extends HttpClientTest { return NettyHttpClientDecorator.DECORATE } - @Override - String expectedOperationName() { - return "netty.client.request" - } - @Override boolean testRedirects() { false diff --git a/instrumentation/vertx-testing/src/test/groovy/client/VertxRxCircuitBreakerWebClientTest.groovy b/instrumentation/vertx-testing/src/test/groovy/client/VertxRxCircuitBreakerWebClientTest.groovy index c473a68bdd..6057bf1896 100644 --- a/instrumentation/vertx-testing/src/test/groovy/client/VertxRxCircuitBreakerWebClientTest.groovy +++ b/instrumentation/vertx-testing/src/test/groovy/client/VertxRxCircuitBreakerWebClientTest.groovy @@ -70,11 +70,6 @@ class VertxRxCircuitBreakerWebClientTest extends HttpClientTest { return NettyHttpClientDecorator.DECORATE } - @Override - String expectedOperationName() { - return "netty.client.request" - } - @Override boolean testRedirects() { false diff --git a/instrumentation/vertx-testing/src/test/groovy/server/VertxHttpServerTest.groovy b/instrumentation/vertx-testing/src/test/groovy/server/VertxHttpServerTest.groovy index 6a9b1c4f00..9df4655ee3 100644 --- a/instrumentation/vertx-testing/src/test/groovy/server/VertxHttpServerTest.groovy +++ b/instrumentation/vertx-testing/src/test/groovy/server/VertxHttpServerTest.groovy @@ -71,11 +71,6 @@ class VertxHttpServerTest extends HttpServerTest extends Age } else { childOf((SpanData) parentSpan) } - operationName expectedOperationName() + operationName expectedOperationName(method) spanKind CLIENT errored exception != null tags { "$MoreTags.SERVICE_NAME" renameService ? "localhost" : null "$MoreTags.SPAN_TYPE" SpanTypes.HTTP_CLIENT "$Tags.COMPONENT" clientDecorator.getComponentName() - "$Tags.PEER_HOSTNAME" "localhost" - "$Tags.PEER_HOST_IPV4" { it == null || it == "127.0.0.1" } // Optional - "$Tags.PEER_PORT" uri.port - "$Tags.HTTP_URL" "${uri.resolve(uri.path)}" + "$MoreTags.NET_PEER_NAME" "localhost" + "$MoreTags.NET_PEER_IP" { it == null || it == "127.0.0.1" } // Optional + "$MoreTags.NET_PEER_PORT" uri.port + "$Tags.HTTP_URL" { it == "${uri}" || it == "${removeFragment(uri)}" } "$Tags.HTTP_METHOD" method if (status) { "$Tags.HTTP_STATUS" status @@ -374,8 +374,8 @@ abstract class HttpClientTest extends Age } } - String expectedOperationName() { - return "http.request" + String expectedOperationName(String method) { + return method != null ? "HTTP $method" : HttpClientDecorator.DEFAULT_SPAN_NAME } int extraClientSpans() { @@ -393,4 +393,8 @@ abstract class HttpClientTest extends Age boolean testConnectionFailure() { true } + + URI removeFragment(URI uri) { + return new URI(uri.scheme, null, uri.host, uri.port, uri.path, uri.query, null) + } } diff --git a/testing/src/main/groovy/io/opentelemetry/auto/test/base/HttpServerTest.groovy b/testing/src/main/groovy/io/opentelemetry/auto/test/base/HttpServerTest.groovy index d1cfc50586..2019c1e489 100644 --- a/testing/src/main/groovy/io/opentelemetry/auto/test/base/HttpServerTest.groovy +++ b/testing/src/main/groovy/io/opentelemetry/auto/test/base/HttpServerTest.groovy @@ -37,6 +37,7 @@ import java.util.concurrent.atomic.AtomicBoolean import static io.opentelemetry.auto.test.base.HttpServerTest.ServerEndpoint.ERROR import static io.opentelemetry.auto.test.base.HttpServerTest.ServerEndpoint.EXCEPTION import static io.opentelemetry.auto.test.base.HttpServerTest.ServerEndpoint.NOT_FOUND +import static io.opentelemetry.auto.test.base.HttpServerTest.ServerEndpoint.PATH_PARAM import static io.opentelemetry.auto.test.base.HttpServerTest.ServerEndpoint.QUERY_PARAM import static io.opentelemetry.auto.test.base.HttpServerTest.ServerEndpoint.REDIRECT import static io.opentelemetry.auto.test.base.HttpServerTest.ServerEndpoint.SUCCESS @@ -85,7 +86,9 @@ abstract class HttpServerTest ext abstract DECORATOR decorator() - abstract String expectedOperationName() + String expectedOperationName(String method) { + return method != null ? "HTTP $method" : HttpServerDecorator.DEFAULT_SPAN_NAME + } boolean hasHandlerSpan() { false @@ -107,6 +110,10 @@ abstract class HttpServerTest ext true } + boolean testPathParam() { + false + } + boolean testExceptionBody() { true } @@ -126,6 +133,7 @@ abstract class HttpServerTest ext PATH_PARAM("path/123/param", 200, "123"), AUTH_REQUIRED("authRequired", 200, null), + private final URI uriObj private final String path final String query final String fragment @@ -134,7 +142,7 @@ abstract class HttpServerTest ext final Boolean errored ServerEndpoint(String uri, int status, String body) { - def uriObj = URI.create(uri) + this.uriObj = URI.create(uri) this.path = uriObj.path this.query = uriObj.query this.fragment = uriObj.fragment @@ -151,10 +159,19 @@ abstract class HttpServerTest ext return path } - URI resolve(URI address) { + URI resolvePath(URI address) { return address.resolve(path) } + URI resolve(URI address) { + return address.resolve(uriObj) + } + + URI resolveWithoutFragment(URI address) { + def uri = resolve(address) + return new URI(uri.scheme, null, uri.host, uri.port, uri.path, uri.query, null) + } + private static final Map PATH_MAP = values().collectEntries { [it.path, it] } static ServerEndpoint forPath(String path) { @@ -163,7 +180,7 @@ abstract class HttpServerTest ext } Request.Builder request(ServerEndpoint uri, String method, String body) { - def url = HttpUrl.get(uri.resolve(address)).newBuilder() + def url = HttpUrl.get(uri.resolvePath(address)).newBuilder() .query(uri.query) .fragment(uri.fragment) .build() @@ -315,6 +332,24 @@ abstract class HttpServerTest ext body = null } + def "test path param"() { + setup: + assumeTrue(testPathParam()) + def request = request(PATH_PARAM, method, body).build() + def response = client.newCall(request).execute() + + expect: + response.code() == PATH_PARAM.status + response.body().string() == PATH_PARAM.body + + and: + assertTheTraces(1, null, null, method, PATH_PARAM) + + where: + method = "GET" + body = null + } + //FIXME: add tests for POST with large/chunked data void assertTheTraces(int size, String traceID = null, String parentID = null, String method = "GET", ServerEndpoint endpoint = SUCCESS, String errorMessage = null) { @@ -388,7 +423,7 @@ abstract class HttpServerTest ext // parent span must be cast otherwise it breaks debugging classloading (junit loads it early) void serverSpan(TraceAssert trace, int index, String traceID = null, String parentID = null, String method = "GET", ServerEndpoint endpoint = SUCCESS) { trace.span(index) { - operationName expectedOperationName() + operationName expectedOperationName(method) spanKind Span.Kind.SERVER // can't use static import because of SERVER type parameter errored endpoint.errored if (parentID != null) { @@ -400,9 +435,9 @@ abstract class HttpServerTest ext tags { "$MoreTags.SPAN_TYPE" SpanTypes.HTTP_SERVER "$Tags.COMPONENT" serverDecorator.getComponentName() - "$Tags.PEER_PORT" Long - "$Tags.PEER_HOST_IPV4" { it == null || it == "127.0.0.1" } // Optional - "$Tags.HTTP_URL" "${endpoint.resolve(address)}" + "$MoreTags.NET_PEER_PORT" Long + "$MoreTags.NET_PEER_IP" { it == null || it == "127.0.0.1" } // Optional + "$Tags.HTTP_URL" { it == "${endpoint.resolve(address)}" || it == "${endpoint.resolveWithoutFragment(address)}" } "$Tags.HTTP_METHOD" method "$Tags.HTTP_STATUS" endpoint.status if (endpoint.query) {