Merge branch 'master' of github.com:DataDog/dd-trace-java into labbati/rebrand-priority-sampling
This commit is contained in:
commit
4faca0cf5a
|
@ -4,16 +4,26 @@ import datadog.trace.api.Config;
|
|||
import datadog.trace.api.DDSpanTypes;
|
||||
import io.opentracing.Span;
|
||||
import io.opentracing.tag.Tags;
|
||||
import java.net.URI;
|
||||
import java.util.regex.Pattern;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
|
||||
public abstract class HttpServerDecorator<REQUEST, RESPONSE> extends ServerDecorator {
|
||||
@Slf4j
|
||||
public abstract class HttpServerDecorator<REQUEST, CONNECTION, RESPONSE> extends ServerDecorator {
|
||||
// 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])$");
|
||||
|
||||
protected abstract String method(REQUEST request);
|
||||
|
||||
protected abstract String url(REQUEST request);
|
||||
protected abstract URI url(REQUEST request);
|
||||
|
||||
protected abstract String hostname(REQUEST request);
|
||||
protected abstract String peerHostname(CONNECTION connection);
|
||||
|
||||
protected abstract Integer port(REQUEST request);
|
||||
protected abstract String peerHostIP(CONNECTION connection);
|
||||
|
||||
protected abstract Integer peerPort(CONNECTION connection);
|
||||
|
||||
protected abstract Integer status(RESPONSE response);
|
||||
|
||||
|
@ -31,14 +41,49 @@ public abstract class HttpServerDecorator<REQUEST, RESPONSE> extends ServerDecor
|
|||
assert span != null;
|
||||
if (request != null) {
|
||||
Tags.HTTP_METHOD.set(span, method(request));
|
||||
Tags.HTTP_URL.set(span, url(request));
|
||||
Tags.PEER_HOSTNAME.set(span, hostname(request));
|
||||
Tags.PEER_PORT.set(span, port(request));
|
||||
|
||||
try {
|
||||
final URI url = url(request);
|
||||
final StringBuilder urlNoParams = new StringBuilder(url.getScheme());
|
||||
urlNoParams.append("://");
|
||||
urlNoParams.append(url.getHost());
|
||||
if (url.getPort() > 0 && url.getPort() != 80 && url.getPort() != 443) {
|
||||
urlNoParams.append(":");
|
||||
urlNoParams.append(url.getPort());
|
||||
}
|
||||
final String path = url.getPath();
|
||||
if (path.isEmpty()) {
|
||||
urlNoParams.append("/");
|
||||
} else {
|
||||
urlNoParams.append(path);
|
||||
}
|
||||
|
||||
Tags.HTTP_URL.set(span, urlNoParams.toString());
|
||||
} catch (final Exception e) {
|
||||
log.debug("Error tagging url", e);
|
||||
}
|
||||
// TODO set resource name from URL.
|
||||
}
|
||||
return span;
|
||||
}
|
||||
|
||||
public Span onConnection(final Span span, final CONNECTION connection) {
|
||||
assert span != null;
|
||||
if (connection != null) {
|
||||
Tags.PEER_HOSTNAME.set(span, peerHostname(connection));
|
||||
final String ip = peerHostIP(connection);
|
||||
if (ip != null) {
|
||||
if (VALID_IPV4_ADDRESS.matcher(ip).matches()) {
|
||||
Tags.PEER_HOST_IPV4.set(span, ip);
|
||||
} else if (ip.contains(":")) {
|
||||
Tags.PEER_HOST_IPV6.set(span, ip);
|
||||
}
|
||||
}
|
||||
Tags.PEER_PORT.set(span, peerPort(connection));
|
||||
}
|
||||
return span;
|
||||
}
|
||||
|
||||
public Span onResponse(final Span span, final RESPONSE response) {
|
||||
assert span != null;
|
||||
if (response != null) {
|
||||
|
|
|
@ -1,11 +1,11 @@
|
|||
package datadog.trace.agent.decorator
|
||||
|
||||
import static datadog.trace.agent.test.utils.TraceUtils.withConfigOverride
|
||||
|
||||
import datadog.trace.api.Config
|
||||
import io.opentracing.Span
|
||||
import io.opentracing.tag.Tags
|
||||
|
||||
import static datadog.trace.agent.test.utils.TraceUtils.withConfigOverride
|
||||
|
||||
class HttpServerDecoratorTest extends ServerDecoratorTest {
|
||||
|
||||
def span = Mock(Span)
|
||||
|
@ -20,14 +20,45 @@ class HttpServerDecoratorTest extends ServerDecoratorTest {
|
|||
then:
|
||||
if (req) {
|
||||
1 * span.setTag(Tags.HTTP_METHOD.key, "test-method")
|
||||
1 * span.setTag(Tags.HTTP_URL.key, "test-url")
|
||||
1 * span.setTag(Tags.PEER_HOSTNAME.key, "test-host")
|
||||
1 * span.setTag(Tags.PEER_PORT.key, 555)
|
||||
1 * span.setTag(Tags.HTTP_URL.key, url)
|
||||
}
|
||||
0 * _
|
||||
|
||||
where:
|
||||
req << [null, [method: "test-method", url: "test-url", host: "test-host", port: 555]]
|
||||
req | url
|
||||
null | _
|
||||
[method: "test-method", url: URI.create("http://test-url?some=query")] | "http://test-url/"
|
||||
[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/"
|
||||
[method: "test-method", url: URI.create("http://123:8080/some/path")] | "http://123:8080/some/path"
|
||||
}
|
||||
|
||||
def "test onConnection"() {
|
||||
setup:
|
||||
def decorator = newDecorator()
|
||||
|
||||
when:
|
||||
decorator.onConnection(span, conn)
|
||||
|
||||
then:
|
||||
if (conn) {
|
||||
1 * span.setTag(Tags.PEER_HOSTNAME.key, "test-host")
|
||||
1 * span.setTag(Tags.PEER_PORT.key, 555)
|
||||
if (ipv4) {
|
||||
1 * span.setTag(Tags.PEER_HOST_IPV4.key, "10.0.0.1")
|
||||
} else if (ipv4 != null) {
|
||||
1 * span.setTag(Tags.PEER_HOST_IPV6.key, "3ffe:1900:4545:3:200:f8ff:fe21:67cf")
|
||||
}
|
||||
}
|
||||
0 * _
|
||||
|
||||
where:
|
||||
ipv4 | conn
|
||||
null | null
|
||||
null | [host: "test-host", ip: null, port: 555]
|
||||
true | [host: "test-host", ip: "10.0.0.1", port: 555]
|
||||
false | [host: "test-host", ip: "3ffe:1900:4545:3:200:f8ff:fe21:67cf", port: 555]
|
||||
}
|
||||
|
||||
def "test onResponse"() {
|
||||
|
@ -81,7 +112,7 @@ class HttpServerDecoratorTest extends ServerDecoratorTest {
|
|||
|
||||
@Override
|
||||
def newDecorator() {
|
||||
return new HttpServerDecorator<Map, Map>() {
|
||||
return new HttpServerDecorator<Map, Map, Map>() {
|
||||
@Override
|
||||
protected String[] instrumentationNames() {
|
||||
return ["test1", "test2"]
|
||||
|
@ -98,17 +129,22 @@ class HttpServerDecoratorTest extends ServerDecoratorTest {
|
|||
}
|
||||
|
||||
@Override
|
||||
protected String url(Map m) {
|
||||
protected URI url(Map m) {
|
||||
return m.url
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String hostname(Map m) {
|
||||
protected String peerHostname(Map m) {
|
||||
return m.host
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Integer port(Map m) {
|
||||
protected String peerHostIP(Map m) {
|
||||
return m.ip
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Integer peerPort(Map m) {
|
||||
return m.port
|
||||
}
|
||||
|
||||
|
|
|
@ -69,8 +69,6 @@ class LagomTest extends AgentTestRunner {
|
|||
"$Tags.HTTP_STATUS.key" 101
|
||||
"$Tags.HTTP_URL.key" "ws://localhost:${server.port()}/echo"
|
||||
"$Tags.HTTP_METHOD.key" "GET"
|
||||
"$Tags.PEER_HOSTNAME.key" "localhost"
|
||||
"$Tags.PEER_PORT.key" server.port()
|
||||
"$Tags.SPAN_KIND.key" Tags.SPAN_KIND_SERVER
|
||||
"$Tags.COMPONENT.key" "akka-http-server"
|
||||
}
|
||||
|
@ -109,8 +107,6 @@ class LagomTest extends AgentTestRunner {
|
|||
"$Tags.HTTP_STATUS.key" 500
|
||||
"$Tags.HTTP_URL.key" "ws://localhost:${server.port()}/error"
|
||||
"$Tags.HTTP_METHOD.key" "GET"
|
||||
"$Tags.PEER_HOSTNAME.key" "localhost"
|
||||
"$Tags.PEER_PORT.key" server.port()
|
||||
"$Tags.SPAN_KIND.key" Tags.SPAN_KIND_SERVER
|
||||
"$Tags.COMPONENT.key" "akka-http-server"
|
||||
"$Tags.ERROR.key" true
|
||||
|
|
|
@ -3,8 +3,10 @@ package datadog.trace.instrumentation.akkahttp;
|
|||
import akka.http.scaladsl.model.HttpRequest;
|
||||
import akka.http.scaladsl.model.HttpResponse;
|
||||
import datadog.trace.agent.decorator.HttpServerDecorator;
|
||||
import java.net.URI;
|
||||
|
||||
public class AkkaHttpServerDecorator extends HttpServerDecorator<HttpRequest, HttpResponse> {
|
||||
public class AkkaHttpServerDecorator
|
||||
extends HttpServerDecorator<HttpRequest, HttpRequest, HttpResponse> {
|
||||
public static final AkkaHttpServerDecorator DECORATE = new AkkaHttpServerDecorator();
|
||||
|
||||
@Override
|
||||
|
@ -23,18 +25,23 @@ public class AkkaHttpServerDecorator extends HttpServerDecorator<HttpRequest, Ht
|
|||
}
|
||||
|
||||
@Override
|
||||
protected String url(final HttpRequest httpRequest) {
|
||||
return httpRequest.uri().toString();
|
||||
protected URI url(final HttpRequest httpRequest) {
|
||||
return URI.create(httpRequest.uri().toString());
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String hostname(final HttpRequest httpRequest) {
|
||||
return httpRequest.getUri().host().address();
|
||||
protected String peerHostname(final HttpRequest httpRequest) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Integer port(final HttpRequest httpRequest) {
|
||||
return httpRequest.getUri().port();
|
||||
protected String peerHostIP(final HttpRequest httpRequest) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Integer peerPort(final HttpRequest httpRequest) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -108,6 +108,7 @@ public final class AkkaHttpServerInstrumentation extends Instrumenter.Default {
|
|||
.startActive(false);
|
||||
|
||||
DECORATE.afterStart(scope.span());
|
||||
DECORATE.onConnection(scope.span(), request);
|
||||
DECORATE.onRequest(scope.span(), request);
|
||||
|
||||
if (scope instanceof TraceScope) {
|
||||
|
|
|
@ -55,8 +55,6 @@ class AkkaHttpServerInstrumentationTest extends AgentTestRunner {
|
|||
"$Tags.HTTP_STATUS.key" 200
|
||||
"$Tags.HTTP_URL.key" "http://localhost:$port/test"
|
||||
"$Tags.HTTP_METHOD.key" "GET"
|
||||
"$Tags.PEER_HOSTNAME.key" "localhost"
|
||||
"$Tags.PEER_PORT.key" port
|
||||
"$Tags.SPAN_KIND.key" Tags.SPAN_KIND_SERVER
|
||||
"$Tags.COMPONENT.key" "akka-http-server"
|
||||
}
|
||||
|
@ -98,8 +96,6 @@ class AkkaHttpServerInstrumentationTest extends AgentTestRunner {
|
|||
"$Tags.HTTP_STATUS.key" 500
|
||||
"$Tags.HTTP_URL.key" "http://localhost:$port/$endpoint"
|
||||
"$Tags.HTTP_METHOD.key" "GET"
|
||||
"$Tags.PEER_HOSTNAME.key" "localhost"
|
||||
"$Tags.PEER_PORT.key" port
|
||||
"$Tags.SPAN_KIND.key" Tags.SPAN_KIND_SERVER
|
||||
"$Tags.COMPONENT.key" "akka-http-server"
|
||||
errorTags RuntimeException, errorMessage
|
||||
|
@ -139,8 +135,6 @@ class AkkaHttpServerInstrumentationTest extends AgentTestRunner {
|
|||
"$Tags.HTTP_STATUS.key" 500
|
||||
"$Tags.HTTP_URL.key" "http://localhost:$port/server-error"
|
||||
"$Tags.HTTP_METHOD.key" "GET"
|
||||
"$Tags.PEER_HOSTNAME.key" "localhost"
|
||||
"$Tags.PEER_PORT.key" port
|
||||
"$Tags.SPAN_KIND.key" Tags.SPAN_KIND_SERVER
|
||||
"$Tags.COMPONENT.key" "akka-http-server"
|
||||
"$Tags.ERROR.key" true
|
||||
|
@ -179,8 +173,6 @@ class AkkaHttpServerInstrumentationTest extends AgentTestRunner {
|
|||
"$Tags.HTTP_STATUS.key" 404
|
||||
"$Tags.HTTP_URL.key" "http://localhost:$port/not-found"
|
||||
"$Tags.HTTP_METHOD.key" "GET"
|
||||
"$Tags.PEER_HOSTNAME.key" "localhost"
|
||||
"$Tags.PEER_PORT.key" port
|
||||
"$Tags.SPAN_KIND.key" Tags.SPAN_KIND_SERVER
|
||||
"$Tags.COMPONENT.key" "akka-http-server"
|
||||
}
|
||||
|
|
|
@ -2,10 +2,12 @@ package datadog.trace.instrumentation.jetty8;
|
|||
|
||||
import datadog.trace.agent.decorator.HttpServerDecorator;
|
||||
import io.opentracing.Span;
|
||||
import java.net.URI;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
|
||||
public class JettyDecorator extends HttpServerDecorator<HttpServletRequest, HttpServletResponse> {
|
||||
public class JettyDecorator
|
||||
extends HttpServerDecorator<HttpServletRequest, HttpServletRequest, HttpServletResponse> {
|
||||
public static final JettyDecorator DECORATE = new JettyDecorator();
|
||||
|
||||
@Override
|
||||
|
@ -24,18 +26,23 @@ public class JettyDecorator extends HttpServerDecorator<HttpServletRequest, Http
|
|||
}
|
||||
|
||||
@Override
|
||||
protected String url(final HttpServletRequest httpServletRequest) {
|
||||
return httpServletRequest.getRequestURL().toString();
|
||||
protected URI url(final HttpServletRequest httpServletRequest) {
|
||||
return URI.create(httpServletRequest.getRequestURL().toString());
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String hostname(final HttpServletRequest httpServletRequest) {
|
||||
return httpServletRequest.getServerName();
|
||||
protected String peerHostname(final HttpServletRequest httpServletRequest) {
|
||||
return httpServletRequest.getRemoteHost();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Integer port(final HttpServletRequest httpServletRequest) {
|
||||
return httpServletRequest.getServerPort();
|
||||
protected String peerHostIP(final HttpServletRequest httpServletRequest) {
|
||||
return httpServletRequest.getRemoteAddr();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Integer peerPort(final HttpServletRequest httpServletRequest) {
|
||||
return httpServletRequest.getRemotePort();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -36,10 +36,12 @@ public class JettyHandlerAdvice {
|
|||
.withTag("span.origin.type", source.getClass().getName())
|
||||
.startActive(false);
|
||||
|
||||
DECORATE.afterStart(scope.span());
|
||||
DECORATE.onRequest(scope.span(), req);
|
||||
final Span span = scope.span();
|
||||
DECORATE.afterStart(span);
|
||||
DECORATE.onConnection(span, req);
|
||||
DECORATE.onRequest(span, req);
|
||||
final String resourceName = req.getMethod() + " " + source.getClass().getName();
|
||||
scope.span().setTag(DDTags.RESOURCE_NAME, resourceName);
|
||||
span.setTag(DDTags.RESOURCE_NAME, resourceName);
|
||||
|
||||
if (scope instanceof TraceScope) {
|
||||
((TraceScope) scope).setAsyncPropagation(true);
|
||||
|
|
|
@ -69,8 +69,9 @@ class JettyHandlerTest extends AgentTestRunner {
|
|||
"component" "jetty-handler"
|
||||
"span.origin.type" handler.class.name
|
||||
"http.status_code" 200
|
||||
"peer.hostname" "localhost"
|
||||
"peer.port" port
|
||||
"peer.hostname" "127.0.0.1"
|
||||
"peer.ipv4" "127.0.0.1"
|
||||
"peer.port" Integer
|
||||
defaultTags()
|
||||
}
|
||||
}
|
||||
|
@ -165,14 +166,16 @@ class JettyHandlerTest extends AgentTestRunner {
|
|||
"component" "jetty-handler"
|
||||
"span.origin.type" handler.class.name
|
||||
"http.status_code" 500
|
||||
"peer.hostname" "localhost"
|
||||
"peer.port" port
|
||||
"peer.hostname" "127.0.0.1"
|
||||
"peer.ipv4" "127.0.0.1"
|
||||
"peer.port" Integer
|
||||
errorTags RuntimeException
|
||||
defaultTags()
|
||||
}
|
||||
}
|
||||
}
|
||||
if (errorHandlerCalled.get()) {
|
||||
// FIXME: This doesn't ever seem to be called.
|
||||
trace(1, 1) {
|
||||
span(0) {
|
||||
serviceName "unnamed-java-app"
|
||||
|
@ -188,8 +191,9 @@ class JettyHandlerTest extends AgentTestRunner {
|
|||
"component" "jetty-handler"
|
||||
"span.origin.type" handler.class.name
|
||||
"http.status_code" 500
|
||||
"peer.hostname" "localhost"
|
||||
"peer.port" port
|
||||
"peer.hostname" "127.0.0.1"
|
||||
"peer.ipv4" "127.0.0.1"
|
||||
"peer.port" Integer
|
||||
"error" true
|
||||
defaultTags()
|
||||
}
|
||||
|
|
|
@ -95,8 +95,9 @@ class JSPInstrumentationBasicTests extends AgentTestRunner {
|
|||
tags {
|
||||
"http.url" "http://localhost:$port/$jspWebappContext/$jspFileName"
|
||||
"http.method" "GET"
|
||||
"peer.hostname" "localhost"
|
||||
"peer.port" port
|
||||
"peer.hostname" "127.0.0.1"
|
||||
"peer.ipv4" "127.0.0.1"
|
||||
"peer.port" Integer
|
||||
"span.kind" "server"
|
||||
"component" "java-web-servlet"
|
||||
"span.origin.type" "org.apache.catalina.core.ApplicationFilterChain"
|
||||
|
@ -169,8 +170,9 @@ class JSPInstrumentationBasicTests extends AgentTestRunner {
|
|||
tags {
|
||||
"http.url" "http://localhost:$port/$jspWebappContext/getQuery.jsp"
|
||||
"http.method" "GET"
|
||||
"peer.hostname" "localhost"
|
||||
"peer.port" port
|
||||
"peer.hostname" "127.0.0.1"
|
||||
"peer.ipv4" "127.0.0.1"
|
||||
"peer.port" Integer
|
||||
"span.kind" "server"
|
||||
"component" "java-web-servlet"
|
||||
"span.origin.type" "org.apache.catalina.core.ApplicationFilterChain"
|
||||
|
@ -240,8 +242,9 @@ class JSPInstrumentationBasicTests extends AgentTestRunner {
|
|||
tags {
|
||||
"http.url" "http://localhost:$port/$jspWebappContext/post.jsp"
|
||||
"http.method" "POST"
|
||||
"peer.hostname" "localhost"
|
||||
"peer.port" port
|
||||
"peer.hostname" "127.0.0.1"
|
||||
"peer.ipv4" "127.0.0.1"
|
||||
"peer.port" Integer
|
||||
"span.kind" "server"
|
||||
"component" "java-web-servlet"
|
||||
"span.origin.type" "org.apache.catalina.core.ApplicationFilterChain"
|
||||
|
@ -308,8 +311,9 @@ class JSPInstrumentationBasicTests extends AgentTestRunner {
|
|||
tags {
|
||||
"http.url" "http://localhost:$port/$jspWebappContext/$jspFileName"
|
||||
"http.method" "GET"
|
||||
"peer.hostname" "localhost"
|
||||
"peer.port" port
|
||||
"peer.hostname" "127.0.0.1"
|
||||
"peer.ipv4" "127.0.0.1"
|
||||
"peer.port" Integer
|
||||
"span.kind" "server"
|
||||
"component" "java-web-servlet"
|
||||
"span.origin.type" "org.apache.catalina.core.ApplicationFilterChain"
|
||||
|
@ -390,8 +394,9 @@ class JSPInstrumentationBasicTests extends AgentTestRunner {
|
|||
tags {
|
||||
"http.url" "http://localhost:$port/$jspWebappContext/includes/includeHtml.jsp"
|
||||
"http.method" "GET"
|
||||
"peer.hostname" "localhost"
|
||||
"peer.port" port
|
||||
"peer.hostname" "127.0.0.1"
|
||||
"peer.ipv4" "127.0.0.1"
|
||||
"peer.port" Integer
|
||||
"span.kind" "server"
|
||||
"component" "java-web-servlet"
|
||||
"span.origin.type" "org.apache.catalina.core.ApplicationFilterChain"
|
||||
|
@ -457,8 +462,9 @@ class JSPInstrumentationBasicTests extends AgentTestRunner {
|
|||
tags {
|
||||
"http.url" "http://localhost:$port/$jspWebappContext/includes/includeMulti.jsp"
|
||||
"http.method" "GET"
|
||||
"peer.hostname" "localhost"
|
||||
"peer.port" port
|
||||
"peer.hostname" "127.0.0.1"
|
||||
"peer.ipv4" "127.0.0.1"
|
||||
"peer.port" Integer
|
||||
"span.kind" "server"
|
||||
"component" "java-web-servlet"
|
||||
"span.origin.type" "org.apache.catalina.core.ApplicationFilterChain"
|
||||
|
@ -580,8 +586,9 @@ class JSPInstrumentationBasicTests extends AgentTestRunner {
|
|||
tags {
|
||||
"http.url" "http://localhost:$port/$jspWebappContext/$jspFileName"
|
||||
"http.method" "GET"
|
||||
"peer.hostname" "localhost"
|
||||
"peer.port" port
|
||||
"peer.hostname" "127.0.0.1"
|
||||
"peer.ipv4" "127.0.0.1"
|
||||
"peer.port" Integer
|
||||
"span.kind" "server"
|
||||
"component" "java-web-servlet"
|
||||
"span.origin.type" "org.apache.catalina.core.ApplicationFilterChain"
|
||||
|
|
|
@ -94,8 +94,9 @@ class JSPInstrumentationForwardTests extends AgentTestRunner {
|
|||
tags {
|
||||
"http.url" "http://localhost:$port/$jspWebappContext/$forwardFromFileName"
|
||||
"http.method" "GET"
|
||||
"peer.hostname" "localhost"
|
||||
"peer.port" port
|
||||
"peer.hostname" "127.0.0.1"
|
||||
"peer.ipv4" "127.0.0.1"
|
||||
"peer.port" Integer
|
||||
"span.kind" "server"
|
||||
"component" "java-web-servlet"
|
||||
"span.origin.type" "org.apache.catalina.core.ApplicationFilterChain"
|
||||
|
@ -195,8 +196,9 @@ class JSPInstrumentationForwardTests extends AgentTestRunner {
|
|||
tags {
|
||||
"http.url" "http://localhost:$port/$jspWebappContext/forwards/forwardToHtml.jsp"
|
||||
"http.method" "GET"
|
||||
"peer.hostname" "localhost"
|
||||
"peer.port" port
|
||||
"peer.hostname" "127.0.0.1"
|
||||
"peer.ipv4" "127.0.0.1"
|
||||
"peer.port" Integer
|
||||
"span.kind" "server"
|
||||
"component" "java-web-servlet"
|
||||
"span.origin.type" "org.apache.catalina.core.ApplicationFilterChain"
|
||||
|
@ -262,8 +264,9 @@ class JSPInstrumentationForwardTests extends AgentTestRunner {
|
|||
tags {
|
||||
"http.url" "http://localhost:$port/$jspWebappContext/forwards/forwardToIncludeMulti.jsp"
|
||||
"http.method" "GET"
|
||||
"peer.hostname" "localhost"
|
||||
"peer.port" port
|
||||
"peer.hostname" "127.0.0.1"
|
||||
"peer.ipv4" "127.0.0.1"
|
||||
"peer.port" Integer
|
||||
"span.kind" "server"
|
||||
"component" "java-web-servlet"
|
||||
"span.origin.type" "org.apache.catalina.core.ApplicationFilterChain"
|
||||
|
@ -416,8 +419,9 @@ class JSPInstrumentationForwardTests extends AgentTestRunner {
|
|||
tags {
|
||||
"http.url" "http://localhost:$port/$jspWebappContext/forwards/forwardToJspForward.jsp"
|
||||
"http.method" "GET"
|
||||
"peer.hostname" "localhost"
|
||||
"peer.port" port
|
||||
"peer.hostname" "127.0.0.1"
|
||||
"peer.ipv4" "127.0.0.1"
|
||||
"peer.port" Integer
|
||||
"span.kind" "server"
|
||||
"component" "java-web-servlet"
|
||||
"span.origin.type" "org.apache.catalina.core.ApplicationFilterChain"
|
||||
|
@ -541,8 +545,9 @@ class JSPInstrumentationForwardTests extends AgentTestRunner {
|
|||
tags {
|
||||
"http.url" "http://localhost:$port/$jspWebappContext/forwards/forwardToCompileError.jsp"
|
||||
"http.method" "GET"
|
||||
"peer.hostname" "localhost"
|
||||
"peer.port" port
|
||||
"peer.hostname" "127.0.0.1"
|
||||
"peer.ipv4" "127.0.0.1"
|
||||
"peer.port" Integer
|
||||
"span.kind" "server"
|
||||
"component" "java-web-servlet"
|
||||
"span.origin.type" "org.apache.catalina.core.ApplicationFilterChain"
|
||||
|
@ -625,8 +630,9 @@ class JSPInstrumentationForwardTests extends AgentTestRunner {
|
|||
tags {
|
||||
"http.url" "http://localhost:$port/$jspWebappContext/forwards/forwardToNonExistent.jsp"
|
||||
"http.method" "GET"
|
||||
"peer.hostname" "localhost"
|
||||
"peer.port" port
|
||||
"peer.hostname" "127.0.0.1"
|
||||
"peer.ipv4" "127.0.0.1"
|
||||
"peer.port" Integer
|
||||
"span.kind" "server"
|
||||
"component" "java-web-servlet"
|
||||
"span.origin.type" "org.apache.catalina.core.ApplicationFilterChain"
|
||||
|
|
|
@ -12,7 +12,6 @@ import io.opentracing.Span;
|
|||
import io.opentracing.SpanContext;
|
||||
import io.opentracing.propagation.Format;
|
||||
import io.opentracing.util.GlobalTracer;
|
||||
import java.net.InetSocketAddress;
|
||||
|
||||
public class HttpServerRequestTracingHandler extends ChannelInboundHandlerAdapter {
|
||||
|
||||
|
@ -23,7 +22,6 @@ public class HttpServerRequestTracingHandler extends ChannelInboundHandlerAdapte
|
|||
return;
|
||||
}
|
||||
final HttpRequest request = (HttpRequest) msg;
|
||||
final InetSocketAddress remoteAddress = (InetSocketAddress) ctx.channel().remoteAddress();
|
||||
|
||||
final SpanContext extractedContext =
|
||||
GlobalTracer.get()
|
||||
|
@ -33,8 +31,8 @@ public class HttpServerRequestTracingHandler extends ChannelInboundHandlerAdapte
|
|||
GlobalTracer.get().buildSpan("netty.request").asChildOf(extractedContext).start();
|
||||
try (final Scope scope = GlobalTracer.get().scopeManager().activate(span, false)) {
|
||||
DECORATE.afterStart(span);
|
||||
DECORATE.onConnection(span, ctx.channel());
|
||||
DECORATE.onRequest(span, request);
|
||||
DECORATE.onPeerConnection(span, remoteAddress);
|
||||
|
||||
if (scope instanceof TraceScope) {
|
||||
((TraceScope) scope).setAsyncPropagation(true);
|
||||
|
|
|
@ -3,14 +3,18 @@ package datadog.trace.instrumentation.netty40.server;
|
|||
import static io.netty.handler.codec.http.HttpHeaders.Names.HOST;
|
||||
|
||||
import datadog.trace.agent.decorator.HttpServerDecorator;
|
||||
import io.netty.channel.Channel;
|
||||
import io.netty.handler.codec.http.HttpRequest;
|
||||
import io.netty.handler.codec.http.HttpResponse;
|
||||
import java.net.InetSocketAddress;
|
||||
import java.net.SocketAddress;
|
||||
import java.net.URI;
|
||||
import java.net.URISyntaxException;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
|
||||
@Slf4j
|
||||
public class NettyHttpServerDecorator extends HttpServerDecorator<HttpRequest, HttpResponse> {
|
||||
public class NettyHttpServerDecorator
|
||||
extends HttpServerDecorator<HttpRequest, Channel, HttpResponse> {
|
||||
public static final NettyHttpServerDecorator DECORATE = new NettyHttpServerDecorator();
|
||||
|
||||
@Override
|
||||
|
@ -29,28 +33,45 @@ public class NettyHttpServerDecorator extends HttpServerDecorator<HttpRequest, H
|
|||
}
|
||||
|
||||
@Override
|
||||
protected String url(final HttpRequest request) {
|
||||
protected URI url(final HttpRequest request) {
|
||||
// FIXME: This code is duplicated across netty integrations.
|
||||
try {
|
||||
URI uri = new URI(request.getUri());
|
||||
if ((uri.getHost() == null || uri.getHost().equals("")) && request.headers().contains(HOST)) {
|
||||
uri = new URI("http://" + request.headers().get(HOST) + request.getUri());
|
||||
}
|
||||
return new URI(uri.getScheme(), null, uri.getHost(), uri.getPort(), uri.getPath(), null, null)
|
||||
.toString();
|
||||
return new URI(
|
||||
uri.getScheme(), null, uri.getHost(), uri.getPort(), uri.getPath(), null, null);
|
||||
} catch (final URISyntaxException e) {
|
||||
log.debug("Cannot parse netty uri: {}", request.getUri());
|
||||
return request.getUri();
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String hostname(final HttpRequest httpRequest) {
|
||||
protected String peerHostname(final Channel channel) {
|
||||
final SocketAddress socketAddress = channel.remoteAddress();
|
||||
if (socketAddress instanceof InetSocketAddress) {
|
||||
return ((InetSocketAddress) socketAddress).getHostName();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Integer port(final HttpRequest httpRequest) {
|
||||
protected String peerHostIP(final Channel channel) {
|
||||
final SocketAddress socketAddress = channel.remoteAddress();
|
||||
if (socketAddress instanceof InetSocketAddress) {
|
||||
return ((InetSocketAddress) socketAddress).getAddress().getHostAddress();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Integer peerPort(final Channel channel) {
|
||||
final SocketAddress socketAddress = channel.remoteAddress();
|
||||
if (socketAddress instanceof InetSocketAddress) {
|
||||
return ((InetSocketAddress) socketAddress).getPort();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
|
|
|
@ -12,7 +12,6 @@ import io.opentracing.Span;
|
|||
import io.opentracing.SpanContext;
|
||||
import io.opentracing.propagation.Format;
|
||||
import io.opentracing.util.GlobalTracer;
|
||||
import java.net.InetSocketAddress;
|
||||
|
||||
public class HttpServerRequestTracingHandler extends ChannelInboundHandlerAdapter {
|
||||
|
||||
|
@ -23,7 +22,6 @@ public class HttpServerRequestTracingHandler extends ChannelInboundHandlerAdapte
|
|||
return;
|
||||
}
|
||||
final HttpRequest request = (HttpRequest) msg;
|
||||
final InetSocketAddress remoteAddress = (InetSocketAddress) ctx.channel().remoteAddress();
|
||||
|
||||
final SpanContext extractedContext =
|
||||
GlobalTracer.get()
|
||||
|
@ -33,8 +31,8 @@ public class HttpServerRequestTracingHandler extends ChannelInboundHandlerAdapte
|
|||
GlobalTracer.get().buildSpan("netty.request").asChildOf(extractedContext).start();
|
||||
try (final Scope scope = GlobalTracer.get().scopeManager().activate(span, false)) {
|
||||
DECORATE.afterStart(span);
|
||||
DECORATE.onConnection(span, ctx.channel());
|
||||
DECORATE.onRequest(span, request);
|
||||
DECORATE.onPeerConnection(span, remoteAddress);
|
||||
|
||||
if (scope instanceof TraceScope) {
|
||||
((TraceScope) scope).setAsyncPropagation(true);
|
||||
|
|
|
@ -3,14 +3,18 @@ package datadog.trace.instrumentation.netty41.server;
|
|||
import static io.netty.handler.codec.http.HttpHeaderNames.HOST;
|
||||
|
||||
import datadog.trace.agent.decorator.HttpServerDecorator;
|
||||
import io.netty.channel.Channel;
|
||||
import io.netty.handler.codec.http.HttpRequest;
|
||||
import io.netty.handler.codec.http.HttpResponse;
|
||||
import java.net.InetSocketAddress;
|
||||
import java.net.SocketAddress;
|
||||
import java.net.URI;
|
||||
import java.net.URISyntaxException;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
|
||||
@Slf4j
|
||||
public class NettyHttpServerDecorator extends HttpServerDecorator<HttpRequest, HttpResponse> {
|
||||
public class NettyHttpServerDecorator
|
||||
extends HttpServerDecorator<HttpRequest, Channel, HttpResponse> {
|
||||
public static final NettyHttpServerDecorator DECORATE = new NettyHttpServerDecorator();
|
||||
|
||||
@Override
|
||||
|
@ -29,28 +33,45 @@ public class NettyHttpServerDecorator extends HttpServerDecorator<HttpRequest, H
|
|||
}
|
||||
|
||||
@Override
|
||||
protected String url(final HttpRequest request) {
|
||||
protected URI url(final HttpRequest request) {
|
||||
// FIXME: This code is duplicated across netty integrations.
|
||||
try {
|
||||
URI uri = new URI(request.uri());
|
||||
if ((uri.getHost() == null || uri.getHost().equals("")) && request.headers().contains(HOST)) {
|
||||
uri = new URI("http://" + request.headers().get(HOST) + request.uri());
|
||||
}
|
||||
return new URI(uri.getScheme(), null, uri.getHost(), uri.getPort(), uri.getPath(), null, null)
|
||||
.toString();
|
||||
return new URI(
|
||||
uri.getScheme(), null, uri.getHost(), uri.getPort(), uri.getPath(), null, null);
|
||||
} catch (final URISyntaxException e) {
|
||||
log.debug("Cannot parse netty uri: {}", request.uri());
|
||||
return request.uri();
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String hostname(final HttpRequest httpRequest) {
|
||||
protected String peerHostname(final Channel channel) {
|
||||
final SocketAddress socketAddress = channel.remoteAddress();
|
||||
if (socketAddress instanceof InetSocketAddress) {
|
||||
return ((InetSocketAddress) socketAddress).getHostName();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Integer port(final HttpRequest httpRequest) {
|
||||
protected String peerHostIP(final Channel channel) {
|
||||
final SocketAddress socketAddress = channel.remoteAddress();
|
||||
if (socketAddress instanceof InetSocketAddress) {
|
||||
return ((InetSocketAddress) socketAddress).getAddress().getHostAddress();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Integer peerPort(final Channel channel) {
|
||||
final SocketAddress socketAddress = channel.remoteAddress();
|
||||
if (socketAddress instanceof InetSocketAddress) {
|
||||
return ((InetSocketAddress) socketAddress).getPort();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
|
|
|
@ -58,8 +58,6 @@ class Play26Test extends AgentTestRunner {
|
|||
"http.status_code" status
|
||||
"http.url" "http://localhost:$port/$path"
|
||||
"http.method" "GET"
|
||||
"peer.hostname" "localhost"
|
||||
"peer.port" port
|
||||
"span.kind" "server"
|
||||
"component" "akka-http-server"
|
||||
if (isError) {
|
||||
|
@ -78,8 +76,7 @@ class Play26Test extends AgentTestRunner {
|
|||
"http.status_code" status
|
||||
"http.url" "http://localhost:$port/$path"
|
||||
"http.method" "GET"
|
||||
"peer.hostname" "localhost"
|
||||
"peer.port" port
|
||||
"peer.ipv4" "127.0.0.1"
|
||||
"span.kind" "server"
|
||||
"component" "play-action"
|
||||
if (isError) {
|
||||
|
|
|
@ -12,7 +12,7 @@ import play.api.mvc.Result;
|
|||
import scala.Option;
|
||||
|
||||
@Slf4j
|
||||
public class PlayHttpServerDecorator extends HttpServerDecorator<Request, Result> {
|
||||
public class PlayHttpServerDecorator extends HttpServerDecorator<Request, Request, Result> {
|
||||
public static final PlayHttpServerDecorator DECORATE = new PlayHttpServerDecorator();
|
||||
|
||||
@Override
|
||||
|
@ -31,36 +31,36 @@ public class PlayHttpServerDecorator extends HttpServerDecorator<Request, Result
|
|||
}
|
||||
|
||||
@Override
|
||||
protected String url(final Request request) {
|
||||
protected URI url(final Request request) {
|
||||
// FIXME: This code is similar to that from the netty integrations.
|
||||
try {
|
||||
URI uri = new URI(request.uri());
|
||||
if ((uri.getHost() == null || uri.getHost().equals("")) && !request.host().isEmpty()) {
|
||||
uri = new URI("http://" + request.host() + request.uri());
|
||||
}
|
||||
return new URI(uri.getScheme(), null, uri.getHost(), uri.getPort(), uri.getPath(), null, null)
|
||||
.toString();
|
||||
return new URI(
|
||||
uri.getScheme(), null, uri.getHost(), uri.getPort(), uri.getPath(), null, null);
|
||||
} catch (final URISyntaxException e) {
|
||||
log.debug("Cannot parse uri: {}", request.uri());
|
||||
return request.uri();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String hostname(final Request httpRequest) {
|
||||
return httpRequest.domain();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Integer port(final Request httpRequest) {
|
||||
final String[] split = httpRequest.host().split(":");
|
||||
try {
|
||||
return split.length == 2 ? Integer.valueOf(split[1]) : null;
|
||||
} catch (final Exception e) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String peerHostname(final Request request) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String peerHostIP(final Request request) {
|
||||
return request.remoteAddress();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Integer peerPort(final Request request) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Integer status(final Result httpResponse) {
|
||||
return httpResponse.header().status();
|
||||
|
|
|
@ -91,6 +91,7 @@ public final class PlayInstrumentation extends Instrumenter.Default {
|
|||
scope = GlobalTracer.get().buildSpan("play.request").startActive(false);
|
||||
}
|
||||
DECORATE.afterStart(scope);
|
||||
DECORATE.onConnection(scope.span(), req);
|
||||
|
||||
if (GlobalTracer.get().scopeManager().active() instanceof TraceScope) {
|
||||
((TraceScope) GlobalTracer.get().scopeManager().active()).setAsyncPropagation(true);
|
||||
|
|
|
@ -57,8 +57,7 @@ class Play24Test extends AgentTestRunner {
|
|||
"http.status_code" status
|
||||
"http.url" "http://localhost:$port/$path"
|
||||
"http.method" "GET"
|
||||
"peer.hostname" "localhost"
|
||||
"peer.port" port
|
||||
"peer.ipv4" "127.0.0.1"
|
||||
"span.kind" "server"
|
||||
"component" "play-action"
|
||||
if (isError) {
|
||||
|
|
|
@ -1,3 +1,7 @@
|
|||
import static datadog.trace.agent.test.server.http.TestHttpServer.distributedRequestTrace
|
||||
import static datadog.trace.agent.test.server.http.TestHttpServer.httpServer
|
||||
import static datadog.trace.agent.test.utils.PortUtils.UNUSABLE_PORT
|
||||
|
||||
import datadog.trace.agent.test.AgentTestRunner
|
||||
import datadog.trace.agent.test.utils.OkHttpUtils
|
||||
import datadog.trace.api.DDSpanTypes
|
||||
|
@ -8,6 +12,8 @@ import io.opentracing.Scope
|
|||
import io.opentracing.Span
|
||||
import io.opentracing.tag.Tags
|
||||
import io.opentracing.util.GlobalTracer
|
||||
import java.util.concurrent.CountDownLatch
|
||||
import java.util.regex.Pattern
|
||||
import okhttp3.HttpUrl
|
||||
import okhttp3.OkHttpClient
|
||||
import okhttp3.Request
|
||||
|
@ -20,13 +26,6 @@ import ratpack.http.client.HttpClient
|
|||
import ratpack.path.PathBinding
|
||||
import ratpack.test.exec.ExecHarness
|
||||
|
||||
import java.util.concurrent.CountDownLatch
|
||||
import java.util.regex.Pattern
|
||||
|
||||
import static datadog.trace.agent.test.server.http.TestHttpServer.distributedRequestTrace
|
||||
import static datadog.trace.agent.test.server.http.TestHttpServer.httpServer
|
||||
import static datadog.trace.agent.test.utils.PortUtils.UNUSABLE_PORT
|
||||
|
||||
class RatpackTest extends AgentTestRunner {
|
||||
|
||||
OkHttpClient client = OkHttpUtils.client()
|
||||
|
@ -85,7 +84,9 @@ class RatpackTest extends AgentTestRunner {
|
|||
"$Tags.SPAN_KIND.key" Tags.SPAN_KIND_SERVER
|
||||
"$Tags.HTTP_METHOD.key" "GET"
|
||||
"$Tags.HTTP_STATUS.key" 200
|
||||
"$Tags.HTTP_URL.key" "/"
|
||||
"$Tags.HTTP_URL.key" "$app.address"
|
||||
"$Tags.PEER_HOSTNAME.key" "$app.address.host"
|
||||
"$Tags.PEER_PORT.key" Integer
|
||||
defaultTags()
|
||||
}
|
||||
}
|
||||
|
@ -149,7 +150,9 @@ class RatpackTest extends AgentTestRunner {
|
|||
"$Tags.SPAN_KIND.key" Tags.SPAN_KIND_SERVER
|
||||
"$Tags.HTTP_METHOD.key" "GET"
|
||||
"$Tags.HTTP_STATUS.key" 200
|
||||
"$Tags.HTTP_URL.key" "/a/b/baz"
|
||||
"$Tags.HTTP_URL.key" "${app.address}a/b/baz"
|
||||
"$Tags.PEER_HOSTNAME.key" "$app.address.host"
|
||||
"$Tags.PEER_PORT.key" Integer
|
||||
defaultTags()
|
||||
}
|
||||
}
|
||||
|
@ -209,7 +212,9 @@ class RatpackTest extends AgentTestRunner {
|
|||
"$Tags.SPAN_KIND.key" Tags.SPAN_KIND_SERVER
|
||||
"$Tags.HTTP_METHOD.key" "GET"
|
||||
"$Tags.HTTP_STATUS.key" 500
|
||||
"$Tags.HTTP_URL.key" "/"
|
||||
"$Tags.HTTP_URL.key" "$app.address"
|
||||
"$Tags.PEER_HOSTNAME.key" "$app.address.host"
|
||||
"$Tags.PEER_PORT.key" Integer
|
||||
errorTags(HandlerException, Pattern.compile("java.lang.ArithmeticException: Division( is)? undefined"))
|
||||
defaultTags()
|
||||
}
|
||||
|
@ -274,7 +279,9 @@ class RatpackTest extends AgentTestRunner {
|
|||
"$Tags.SPAN_KIND.key" Tags.SPAN_KIND_SERVER
|
||||
"$Tags.HTTP_METHOD.key" "GET"
|
||||
"$Tags.HTTP_STATUS.key" 500
|
||||
"$Tags.HTTP_URL.key" "/"
|
||||
"$Tags.HTTP_URL.key" "$app.address"
|
||||
"$Tags.PEER_HOSTNAME.key" "$app.address.host"
|
||||
"$Tags.PEER_PORT.key" Integer
|
||||
"$Tags.ERROR.key" true
|
||||
defaultTags()
|
||||
}
|
||||
|
@ -337,7 +344,9 @@ class RatpackTest extends AgentTestRunner {
|
|||
"$Tags.SPAN_KIND.key" Tags.SPAN_KIND_SERVER
|
||||
"$Tags.HTTP_METHOD.key" "GET"
|
||||
"$Tags.HTTP_STATUS.key" 500
|
||||
"$Tags.HTTP_URL.key" "/"
|
||||
"$Tags.HTTP_URL.key" "$app.address"
|
||||
"$Tags.PEER_HOSTNAME.key" "$app.address.host"
|
||||
"$Tags.PEER_PORT.key" Integer
|
||||
"$Tags.ERROR.key" true
|
||||
defaultTags()
|
||||
}
|
||||
|
@ -431,7 +440,9 @@ class RatpackTest extends AgentTestRunner {
|
|||
"$Tags.SPAN_KIND.key" Tags.SPAN_KIND_SERVER
|
||||
"$Tags.HTTP_METHOD.key" "GET"
|
||||
"$Tags.HTTP_STATUS.key" 200
|
||||
"$Tags.HTTP_URL.key" "/"
|
||||
"$Tags.HTTP_URL.key" "$app.address"
|
||||
"$Tags.PEER_HOSTNAME.key" "$app.address.host"
|
||||
"$Tags.PEER_PORT.key" Integer
|
||||
defaultTags()
|
||||
}
|
||||
}
|
||||
|
@ -539,7 +550,9 @@ class RatpackTest extends AgentTestRunner {
|
|||
"$Tags.SPAN_KIND.key" Tags.SPAN_KIND_SERVER
|
||||
"$Tags.HTTP_METHOD.key" "GET"
|
||||
"$Tags.HTTP_STATUS.key" 500
|
||||
"$Tags.HTTP_URL.key" "/"
|
||||
"$Tags.HTTP_URL.key" "$app.address"
|
||||
"$Tags.PEER_HOSTNAME.key" "$app.address.host"
|
||||
"$Tags.PEER_PORT.key" Integer
|
||||
"$Tags.ERROR.key" true
|
||||
defaultTags()
|
||||
}
|
||||
|
@ -642,7 +655,9 @@ class RatpackTest extends AgentTestRunner {
|
|||
"$Tags.SPAN_KIND.key" Tags.SPAN_KIND_SERVER
|
||||
"$Tags.HTTP_METHOD.key" "GET"
|
||||
"$Tags.HTTP_STATUS.key" 200
|
||||
"$Tags.HTTP_URL.key" "/"
|
||||
"$Tags.HTTP_URL.key" "$app.address"
|
||||
"$Tags.PEER_HOSTNAME.key" "$app.address.host"
|
||||
"$Tags.PEER_PORT.key" Integer
|
||||
defaultTags()
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,14 +1,19 @@
|
|||
package datadog.trace.instrumentation.ratpack;
|
||||
|
||||
import com.google.common.net.HostAndPort;
|
||||
import datadog.trace.agent.decorator.HttpServerDecorator;
|
||||
import datadog.trace.api.DDTags;
|
||||
import io.opentracing.Span;
|
||||
import java.net.URI;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import ratpack.handling.Context;
|
||||
import ratpack.http.Request;
|
||||
import ratpack.http.Response;
|
||||
import ratpack.http.Status;
|
||||
import ratpack.server.PublicAddress;
|
||||
|
||||
public class RatpackServerDecorator extends HttpServerDecorator<Request, Response> {
|
||||
@Slf4j
|
||||
public class RatpackServerDecorator extends HttpServerDecorator<Request, Request, Response> {
|
||||
public static final RatpackServerDecorator DECORATE = new RatpackServerDecorator();
|
||||
|
||||
@Override
|
||||
|
@ -27,18 +32,27 @@ public class RatpackServerDecorator extends HttpServerDecorator<Request, Respons
|
|||
}
|
||||
|
||||
@Override
|
||||
protected String url(final Request request) {
|
||||
return request.getUri();
|
||||
protected URI url(final Request request) {
|
||||
final HostAndPort address = request.getLocalAddress();
|
||||
// This call implicitly uses request via a threadlocal provided by ratpack.
|
||||
final PublicAddress publicAddress =
|
||||
PublicAddress.inferred(address.getPort() == 443 ? "https" : "http");
|
||||
return publicAddress.get(request.getPath());
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String hostname(final Request request) {
|
||||
return null;
|
||||
protected String peerHostname(final Request request) {
|
||||
return request.getRemoteAddress().getHostText();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Integer port(final Request request) {
|
||||
return null;
|
||||
protected String peerHostIP(final Request request) {
|
||||
return request.getRemoteAddress().getHostText();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Integer peerPort(final Request request) {
|
||||
return request.getRemoteAddress().getPort();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -40,6 +40,7 @@ public final class TracingHandler implements Handler {
|
|||
// Relying on executor instrumentation to assume the netty span is in context as the parent.
|
||||
final Span ratpackSpan = tracer.buildSpan("ratpack.handler").start();
|
||||
DECORATE.afterStart(ratpackSpan);
|
||||
DECORATE.onConnection(ratpackSpan, request);
|
||||
DECORATE.onRequest(ratpackSpan, request);
|
||||
|
||||
try (final Scope scope = tracer.scopeManager().activate(ratpackSpan, false)) {
|
||||
|
|
|
@ -1,3 +1,7 @@
|
|||
import static datadog.trace.agent.test.server.http.TestHttpServer.distributedRequestTrace
|
||||
import static datadog.trace.agent.test.server.http.TestHttpServer.httpServer
|
||||
import static datadog.trace.agent.test.utils.PortUtils.UNUSABLE_PORT
|
||||
|
||||
import datadog.trace.agent.test.AgentTestRunner
|
||||
import datadog.trace.agent.test.utils.OkHttpUtils
|
||||
import datadog.trace.api.DDSpanTypes
|
||||
|
@ -7,6 +11,8 @@ import io.opentracing.Scope
|
|||
import io.opentracing.Span
|
||||
import io.opentracing.tag.Tags
|
||||
import io.opentracing.util.GlobalTracer
|
||||
import java.util.concurrent.CountDownLatch
|
||||
import java.util.regex.Pattern
|
||||
import okhttp3.HttpUrl
|
||||
import okhttp3.OkHttpClient
|
||||
import okhttp3.Request
|
||||
|
@ -19,13 +25,6 @@ import ratpack.http.client.HttpClient
|
|||
import ratpack.path.PathBinding
|
||||
import ratpack.test.exec.ExecHarness
|
||||
|
||||
import java.util.concurrent.CountDownLatch
|
||||
import java.util.regex.Pattern
|
||||
|
||||
import static datadog.trace.agent.test.server.http.TestHttpServer.distributedRequestTrace
|
||||
import static datadog.trace.agent.test.server.http.TestHttpServer.httpServer
|
||||
import static datadog.trace.agent.test.utils.PortUtils.UNUSABLE_PORT
|
||||
|
||||
class RatpackTest extends AgentTestRunner {
|
||||
|
||||
OkHttpClient client = OkHttpUtils.client()
|
||||
|
@ -84,7 +83,9 @@ class RatpackTest extends AgentTestRunner {
|
|||
"$Tags.SPAN_KIND.key" Tags.SPAN_KIND_SERVER
|
||||
"$Tags.HTTP_METHOD.key" "GET"
|
||||
"$Tags.HTTP_STATUS.key" 200
|
||||
"$Tags.HTTP_URL.key" "/"
|
||||
"$Tags.HTTP_URL.key" "$app.address"
|
||||
"$Tags.PEER_HOSTNAME.key" "$app.address.host"
|
||||
"$Tags.PEER_PORT.key" Integer
|
||||
defaultTags()
|
||||
}
|
||||
}
|
||||
|
@ -148,7 +149,9 @@ class RatpackTest extends AgentTestRunner {
|
|||
"$Tags.SPAN_KIND.key" Tags.SPAN_KIND_SERVER
|
||||
"$Tags.HTTP_METHOD.key" "GET"
|
||||
"$Tags.HTTP_STATUS.key" 200
|
||||
"$Tags.HTTP_URL.key" "/a/b/baz"
|
||||
"$Tags.HTTP_URL.key" "${app.address}a/b/baz"
|
||||
"$Tags.PEER_HOSTNAME.key" "$app.address.host"
|
||||
"$Tags.PEER_PORT.key" Integer
|
||||
defaultTags()
|
||||
}
|
||||
}
|
||||
|
@ -208,7 +211,9 @@ class RatpackTest extends AgentTestRunner {
|
|||
"$Tags.SPAN_KIND.key" Tags.SPAN_KIND_SERVER
|
||||
"$Tags.HTTP_METHOD.key" "GET"
|
||||
"$Tags.HTTP_STATUS.key" 500
|
||||
"$Tags.HTTP_URL.key" "/"
|
||||
"$Tags.HTTP_URL.key" "$app.address"
|
||||
"$Tags.PEER_HOSTNAME.key" "$app.address.host"
|
||||
"$Tags.PEER_PORT.key" Integer
|
||||
errorTags(HandlerException, Pattern.compile("java.lang.ArithmeticException: Division( is)? undefined"))
|
||||
defaultTags()
|
||||
}
|
||||
|
@ -273,7 +278,9 @@ class RatpackTest extends AgentTestRunner {
|
|||
"$Tags.SPAN_KIND.key" Tags.SPAN_KIND_SERVER
|
||||
"$Tags.HTTP_METHOD.key" "GET"
|
||||
"$Tags.HTTP_STATUS.key" 500
|
||||
"$Tags.HTTP_URL.key" "/"
|
||||
"$Tags.HTTP_URL.key" "$app.address"
|
||||
"$Tags.PEER_HOSTNAME.key" "$app.address.host"
|
||||
"$Tags.PEER_PORT.key" Integer
|
||||
"$Tags.ERROR.key" true
|
||||
defaultTags()
|
||||
}
|
||||
|
@ -336,7 +343,9 @@ class RatpackTest extends AgentTestRunner {
|
|||
"$Tags.SPAN_KIND.key" Tags.SPAN_KIND_SERVER
|
||||
"$Tags.HTTP_METHOD.key" "GET"
|
||||
"$Tags.HTTP_STATUS.key" 500
|
||||
"$Tags.HTTP_URL.key" "/"
|
||||
"$Tags.HTTP_URL.key" "$app.address"
|
||||
"$Tags.PEER_HOSTNAME.key" "$app.address.host"
|
||||
"$Tags.PEER_PORT.key" Integer
|
||||
"$Tags.ERROR.key" true
|
||||
defaultTags()
|
||||
}
|
||||
|
@ -430,7 +439,9 @@ class RatpackTest extends AgentTestRunner {
|
|||
"$Tags.SPAN_KIND.key" Tags.SPAN_KIND_SERVER
|
||||
"$Tags.HTTP_METHOD.key" "GET"
|
||||
"$Tags.HTTP_STATUS.key" 200
|
||||
"$Tags.HTTP_URL.key" "/"
|
||||
"$Tags.HTTP_URL.key" "$app.address"
|
||||
"$Tags.PEER_HOSTNAME.key" "$app.address.host"
|
||||
"$Tags.PEER_PORT.key" Integer
|
||||
defaultTags()
|
||||
}
|
||||
}
|
||||
|
@ -538,7 +549,9 @@ class RatpackTest extends AgentTestRunner {
|
|||
"$Tags.SPAN_KIND.key" Tags.SPAN_KIND_SERVER
|
||||
"$Tags.HTTP_METHOD.key" "GET"
|
||||
"$Tags.HTTP_STATUS.key" 500
|
||||
"$Tags.HTTP_URL.key" "/"
|
||||
"$Tags.HTTP_URL.key" "$app.address"
|
||||
"$Tags.PEER_HOSTNAME.key" "$app.address.host"
|
||||
"$Tags.PEER_PORT.key" Integer
|
||||
errorTags(ConnectException, String)
|
||||
defaultTags()
|
||||
}
|
||||
|
@ -641,7 +654,9 @@ class RatpackTest extends AgentTestRunner {
|
|||
"$Tags.SPAN_KIND.key" Tags.SPAN_KIND_SERVER
|
||||
"$Tags.HTTP_METHOD.key" "GET"
|
||||
"$Tags.HTTP_STATUS.key" 200
|
||||
"$Tags.HTTP_URL.key" "/"
|
||||
"$Tags.HTTP_URL.key" "$app.address"
|
||||
"$Tags.PEER_HOSTNAME.key" "$app.address.host"
|
||||
"$Tags.PEER_PORT.key" Integer
|
||||
defaultTags()
|
||||
}
|
||||
}
|
||||
|
|
|
@ -39,8 +39,10 @@ public class Servlet2Advice {
|
|||
.withTag("span.origin.type", servlet.getClass().getName())
|
||||
.startActive(true);
|
||||
|
||||
DECORATE.afterStart(scope.span());
|
||||
DECORATE.onRequest(scope.span(), httpServletRequest);
|
||||
final Span span = scope.span();
|
||||
DECORATE.afterStart(span);
|
||||
DECORATE.onConnection(span, httpServletRequest);
|
||||
DECORATE.onRequest(span, httpServletRequest);
|
||||
|
||||
if (scope instanceof TraceScope) {
|
||||
((TraceScope) scope).setAsyncPropagation(true);
|
||||
|
|
|
@ -2,10 +2,12 @@ package datadog.trace.instrumentation.servlet2;
|
|||
|
||||
import datadog.trace.agent.decorator.HttpServerDecorator;
|
||||
import io.opentracing.Span;
|
||||
import java.net.URI;
|
||||
import javax.servlet.ServletResponse;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
|
||||
public class Servlet2Decorator extends HttpServerDecorator<HttpServletRequest, ServletResponse> {
|
||||
public class Servlet2Decorator
|
||||
extends HttpServerDecorator<HttpServletRequest, HttpServletRequest, ServletResponse> {
|
||||
public static final Servlet2Decorator DECORATE = new Servlet2Decorator();
|
||||
|
||||
@Override
|
||||
|
@ -24,18 +26,23 @@ public class Servlet2Decorator extends HttpServerDecorator<HttpServletRequest, S
|
|||
}
|
||||
|
||||
@Override
|
||||
protected String url(final HttpServletRequest httpServletRequest) {
|
||||
return httpServletRequest.getRequestURL().toString();
|
||||
protected URI url(final HttpServletRequest httpServletRequest) {
|
||||
return URI.create(httpServletRequest.getRequestURL().toString());
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String hostname(final HttpServletRequest httpServletRequest) {
|
||||
return httpServletRequest.getServerName();
|
||||
protected String peerHostname(final HttpServletRequest httpServletRequest) {
|
||||
return httpServletRequest.getRemoteHost();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Integer port(final HttpServletRequest httpServletRequest) {
|
||||
return httpServletRequest.getServerPort();
|
||||
protected String peerHostIP(final HttpServletRequest httpServletRequest) {
|
||||
return httpServletRequest.getRemoteAddr();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Integer peerPort(final HttpServletRequest httpServletRequest) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -91,8 +91,8 @@ class JettyServlet2Test extends AgentTestRunner {
|
|||
"http.method" "GET"
|
||||
"span.kind" "server"
|
||||
"component" "java-web-servlet"
|
||||
"peer.hostname" "localhost"
|
||||
"peer.port" port
|
||||
"peer.hostname" "127.0.0.1"
|
||||
"peer.ipv4" "127.0.0.1"
|
||||
"span.origin.type" "TestServlet2\$Sync"
|
||||
"servlet.context" "/ctx"
|
||||
if (auth) {
|
||||
|
@ -137,8 +137,8 @@ class JettyServlet2Test extends AgentTestRunner {
|
|||
"http.method" "GET"
|
||||
"span.kind" "server"
|
||||
"component" "java-web-servlet"
|
||||
"peer.hostname" "localhost"
|
||||
"peer.port" port
|
||||
"peer.hostname" "127.0.0.1"
|
||||
"peer.ipv4" "127.0.0.1"
|
||||
"span.origin.type" "TestServlet2\$Sync"
|
||||
"servlet.context" "/ctx"
|
||||
errorTags(RuntimeException, "some $path error")
|
||||
|
@ -179,8 +179,8 @@ class JettyServlet2Test extends AgentTestRunner {
|
|||
"http.method" "GET"
|
||||
"span.kind" "server"
|
||||
"component" "java-web-servlet"
|
||||
"peer.hostname" "localhost"
|
||||
"peer.port" port
|
||||
"peer.hostname" "127.0.0.1"
|
||||
"peer.ipv4" "127.0.0.1"
|
||||
"span.origin.type" "TestServlet2\$Sync"
|
||||
"servlet.context" "/ctx"
|
||||
defaultTags()
|
||||
|
|
|
@ -44,14 +44,16 @@ public class Servlet3Advice {
|
|||
.withTag("span.origin.type", servlet.getClass().getName())
|
||||
.startActive(false);
|
||||
|
||||
DECORATE.afterStart(scope.span());
|
||||
DECORATE.onRequest(scope.span(), httpServletRequest);
|
||||
final Span span = scope.span();
|
||||
DECORATE.afterStart(span);
|
||||
DECORATE.onConnection(span, httpServletRequest);
|
||||
DECORATE.onRequest(span, httpServletRequest);
|
||||
|
||||
if (scope instanceof TraceScope) {
|
||||
((TraceScope) scope).setAsyncPropagation(true);
|
||||
}
|
||||
|
||||
req.setAttribute(SERVLET_SPAN, scope.span());
|
||||
req.setAttribute(SERVLET_SPAN, span);
|
||||
return scope;
|
||||
}
|
||||
|
||||
|
|
|
@ -2,11 +2,12 @@ package datadog.trace.instrumentation.servlet3;
|
|||
|
||||
import datadog.trace.agent.decorator.HttpServerDecorator;
|
||||
import io.opentracing.Span;
|
||||
import java.net.URI;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
|
||||
public class Servlet3Decorator
|
||||
extends HttpServerDecorator<HttpServletRequest, HttpServletResponse> {
|
||||
extends HttpServerDecorator<HttpServletRequest, HttpServletRequest, HttpServletResponse> {
|
||||
public static final Servlet3Decorator DECORATE = new Servlet3Decorator();
|
||||
|
||||
@Override
|
||||
|
@ -25,18 +26,23 @@ public class Servlet3Decorator
|
|||
}
|
||||
|
||||
@Override
|
||||
protected String url(final HttpServletRequest httpServletRequest) {
|
||||
return httpServletRequest.getRequestURL().toString();
|
||||
protected URI url(final HttpServletRequest httpServletRequest) {
|
||||
return URI.create(httpServletRequest.getRequestURL().toString());
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String hostname(final HttpServletRequest httpServletRequest) {
|
||||
return httpServletRequest.getServerName();
|
||||
protected String peerHostname(final HttpServletRequest httpServletRequest) {
|
||||
return httpServletRequest.getRemoteHost();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Integer port(final HttpServletRequest httpServletRequest) {
|
||||
return httpServletRequest.getServerPort();
|
||||
protected String peerHostIP(final HttpServletRequest httpServletRequest) {
|
||||
return httpServletRequest.getRemoteAddr();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Integer peerPort(final HttpServletRequest httpServletRequest) {
|
||||
return httpServletRequest.getRemotePort();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -89,8 +89,9 @@ abstract class AbstractServlet3Test<CONTEXT> extends AgentTestRunner {
|
|||
"http.method" "GET"
|
||||
"span.kind" "server"
|
||||
"component" "java-web-servlet"
|
||||
"peer.hostname" "localhost"
|
||||
"peer.port" port
|
||||
"peer.hostname" "127.0.0.1"
|
||||
"peer.ipv4" "127.0.0.1"
|
||||
"peer.port" Integer
|
||||
"span.origin.type" { it == "TestServlet3\$$origin" || it == ApplicationFilterChain.name }
|
||||
"servlet.context" "/$context"
|
||||
"http.status_code" 200
|
||||
|
@ -156,8 +157,9 @@ abstract class AbstractServlet3Test<CONTEXT> extends AgentTestRunner {
|
|||
"http.method" "GET"
|
||||
"span.kind" "server"
|
||||
"component" "java-web-servlet"
|
||||
"peer.hostname" "localhost"
|
||||
"peer.port" port
|
||||
"peer.hostname" "127.0.0.1"
|
||||
"peer.ipv4" "127.0.0.1"
|
||||
"peer.port" Integer
|
||||
"span.origin.type" { it == "TestServlet3\$Dispatch$origin" || it == ApplicationFilterChain.name }
|
||||
"http.status_code" 200
|
||||
"servlet.context" "/$context"
|
||||
|
@ -181,8 +183,9 @@ abstract class AbstractServlet3Test<CONTEXT> extends AgentTestRunner {
|
|||
"http.method" "GET"
|
||||
"span.kind" "server"
|
||||
"component" "java-web-servlet"
|
||||
"peer.hostname" "localhost"
|
||||
"peer.port" port
|
||||
"peer.hostname" "127.0.0.1"
|
||||
"peer.ipv4" "127.0.0.1"
|
||||
"peer.port" Integer
|
||||
"span.origin.type" {
|
||||
it == "TestServlet3\$$origin" || it == "TestServlet3\$DispatchRecursive" || it == ApplicationFilterChain.name
|
||||
}
|
||||
|
@ -214,8 +217,9 @@ abstract class AbstractServlet3Test<CONTEXT> extends AgentTestRunner {
|
|||
"http.method" "GET"
|
||||
"span.kind" "server"
|
||||
"component" "java-web-servlet"
|
||||
"peer.hostname" "localhost"
|
||||
"peer.port" port
|
||||
"peer.hostname" "127.0.0.1"
|
||||
"peer.ipv4" "127.0.0.1"
|
||||
"peer.port" Integer
|
||||
"span.origin.type" { it == "TestServlet3\$Dispatch$origin" || it == ApplicationFilterChain.name }
|
||||
"http.status_code" 200
|
||||
"servlet.context" "/$context"
|
||||
|
@ -273,8 +277,9 @@ abstract class AbstractServlet3Test<CONTEXT> extends AgentTestRunner {
|
|||
"http.method" "GET"
|
||||
"span.kind" "server"
|
||||
"component" "java-web-servlet"
|
||||
"peer.hostname" "localhost"
|
||||
"peer.port" port
|
||||
"peer.hostname" "127.0.0.1"
|
||||
"peer.ipv4" "127.0.0.1"
|
||||
"peer.port" Integer
|
||||
"span.origin.type" { it == "TestServlet3\$Dispatch$origin" || it == ApplicationFilterChain.name }
|
||||
"http.status_code" 200
|
||||
"servlet.context" "/$context"
|
||||
|
@ -296,8 +301,9 @@ abstract class AbstractServlet3Test<CONTEXT> extends AgentTestRunner {
|
|||
"http.method" "GET"
|
||||
"span.kind" "server"
|
||||
"component" "java-web-servlet"
|
||||
"peer.hostname" "localhost"
|
||||
"peer.port" port
|
||||
"peer.hostname" "127.0.0.1"
|
||||
"peer.ipv4" "127.0.0.1"
|
||||
"peer.port" Integer
|
||||
"span.origin.type" {
|
||||
it == "TestServlet3\$$origin" || it == "TestServlet3\$DispatchRecursive" || it == ApplicationFilterChain.name
|
||||
}
|
||||
|
@ -387,8 +393,9 @@ abstract class AbstractServlet3Test<CONTEXT> extends AgentTestRunner {
|
|||
"http.method" "GET"
|
||||
"span.kind" "server"
|
||||
"component" "java-web-servlet"
|
||||
"peer.hostname" "localhost"
|
||||
"peer.port" port
|
||||
"peer.hostname" "127.0.0.1"
|
||||
"peer.ipv4" "127.0.0.1"
|
||||
"peer.port" Integer
|
||||
"span.origin.type" { it == "TestServlet3\$$origin" || it == ApplicationFilterChain.name }
|
||||
"servlet.context" "/$context"
|
||||
"http.status_code" 500
|
||||
|
@ -432,8 +439,9 @@ abstract class AbstractServlet3Test<CONTEXT> extends AgentTestRunner {
|
|||
"http.method" "GET"
|
||||
"span.kind" "server"
|
||||
"component" "java-web-servlet"
|
||||
"peer.hostname" "localhost"
|
||||
"peer.port" port
|
||||
"peer.hostname" "127.0.0.1"
|
||||
"peer.ipv4" "127.0.0.1"
|
||||
"peer.port" Integer
|
||||
"span.origin.type" { it == "TestServlet3\$$origin" || it == ApplicationFilterChain.name }
|
||||
"servlet.context" "/$context"
|
||||
"http.status_code" 500
|
||||
|
|
|
@ -56,8 +56,9 @@ class SparkJavaBasedTest extends AgentTestRunner {
|
|||
"component" "jetty-handler"
|
||||
"span.origin.type" spark.embeddedserver.jetty.JettyHandler.name
|
||||
"http.status_code" 200
|
||||
"peer.hostname" "localhost"
|
||||
"peer.port" port
|
||||
"peer.hostname" "127.0.0.1"
|
||||
"peer.ipv4" "127.0.0.1"
|
||||
"peer.port" Integer
|
||||
defaultTags()
|
||||
}
|
||||
}
|
||||
|
|
|
@ -5,6 +5,7 @@ import datadog.trace.api.DDSpanTypes;
|
|||
import datadog.trace.api.DDTags;
|
||||
import io.opentracing.Scope;
|
||||
import io.opentracing.Span;
|
||||
import java.net.URI;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
|
@ -13,7 +14,7 @@ import org.springframework.web.servlet.ModelAndView;
|
|||
|
||||
@Slf4j
|
||||
public class SpringWebHttpServerDecorator
|
||||
extends HttpServerDecorator<HttpServletRequest, HttpServletResponse> {
|
||||
extends HttpServerDecorator<HttpServletRequest, HttpServletRequest, HttpServletResponse> {
|
||||
public static final SpringWebHttpServerDecorator DECORATE = new SpringWebHttpServerDecorator();
|
||||
public static final SpringWebHttpServerDecorator DECORATE_RENDER =
|
||||
new SpringWebHttpServerDecorator() {
|
||||
|
@ -39,18 +40,23 @@ public class SpringWebHttpServerDecorator
|
|||
}
|
||||
|
||||
@Override
|
||||
protected String url(final HttpServletRequest httpServletRequest) {
|
||||
return httpServletRequest.getRequestURL().toString();
|
||||
protected URI url(final HttpServletRequest httpServletRequest) {
|
||||
return URI.create(httpServletRequest.getRequestURL().toString());
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String hostname(final HttpServletRequest httpServletRequest) {
|
||||
return httpServletRequest.getServerName();
|
||||
protected String peerHostname(final HttpServletRequest httpServletRequest) {
|
||||
return httpServletRequest.getRemoteHost();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Integer port(final HttpServletRequest httpServletRequest) {
|
||||
return httpServletRequest.getServerPort();
|
||||
protected String peerHostIP(final HttpServletRequest httpServletRequest) {
|
||||
return httpServletRequest.getRemoteAddr();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Integer peerPort(final HttpServletRequest httpServletRequest) {
|
||||
return httpServletRequest.getRemotePort();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -44,8 +44,9 @@ class SpringBootBasedTest extends AgentTestRunner {
|
|||
tags {
|
||||
"http.url" "http://localhost:$port/"
|
||||
"http.method" "GET"
|
||||
"peer.hostname" "localhost"
|
||||
"peer.port" port
|
||||
"peer.hostname" "127.0.0.1"
|
||||
"peer.ipv4" "127.0.0.1"
|
||||
"peer.port" Integer
|
||||
"span.kind" "server"
|
||||
"span.origin.type" "org.apache.catalina.core.ApplicationFilterChain"
|
||||
"component" "java-web-servlet"
|
||||
|
@ -81,8 +82,9 @@ class SpringBootBasedTest extends AgentTestRunner {
|
|||
tags {
|
||||
"http.url" "http://localhost:$port/param/$param/"
|
||||
"http.method" "GET"
|
||||
"peer.hostname" "localhost"
|
||||
"peer.port" port
|
||||
"peer.hostname" "127.0.0.1"
|
||||
"peer.ipv4" "127.0.0.1"
|
||||
"peer.port" Integer
|
||||
"span.kind" "server"
|
||||
"span.origin.type" "org.apache.catalina.core.ApplicationFilterChain"
|
||||
"component" "java-web-servlet"
|
||||
|
@ -120,8 +122,9 @@ class SpringBootBasedTest extends AgentTestRunner {
|
|||
tags {
|
||||
"http.url" "http://localhost:$port/param/asdf1234/"
|
||||
"http.method" "GET"
|
||||
"peer.hostname" "localhost"
|
||||
"peer.port" port
|
||||
"peer.hostname" "127.0.0.1"
|
||||
"peer.ipv4" "127.0.0.1"
|
||||
"peer.port" Integer
|
||||
"span.kind" "server"
|
||||
"span.origin.type" "org.apache.catalina.core.ApplicationFilterChain"
|
||||
"component" "java-web-servlet"
|
||||
|
@ -140,8 +143,9 @@ class SpringBootBasedTest extends AgentTestRunner {
|
|||
tags {
|
||||
"http.url" "http://localhost:$port/error"
|
||||
"http.method" "GET"
|
||||
"peer.hostname" "localhost"
|
||||
"peer.port" port
|
||||
"peer.hostname" "127.0.0.1"
|
||||
"peer.ipv4" "127.0.0.1"
|
||||
"peer.port" Integer
|
||||
"span.kind" "server"
|
||||
"span.origin.type" "org.apache.catalina.core.ApplicationFilterChain"
|
||||
"component" "java-web-servlet"
|
||||
|
@ -174,8 +178,9 @@ class SpringBootBasedTest extends AgentTestRunner {
|
|||
tags {
|
||||
"http.url" "http://localhost:$port/invalid"
|
||||
"http.method" "GET"
|
||||
"peer.hostname" "localhost"
|
||||
"peer.port" port
|
||||
"peer.hostname" "127.0.0.1"
|
||||
"peer.ipv4" "127.0.0.1"
|
||||
"peer.port" Integer
|
||||
"span.kind" "server"
|
||||
"span.origin.type" "org.apache.catalina.core.ApplicationFilterChain"
|
||||
"component" "java-web-servlet"
|
||||
|
@ -196,8 +201,9 @@ class SpringBootBasedTest extends AgentTestRunner {
|
|||
tags {
|
||||
"http.url" "http://localhost:$port/error"
|
||||
"http.method" "GET"
|
||||
"peer.hostname" "localhost"
|
||||
"peer.port" port
|
||||
"peer.hostname" "127.0.0.1"
|
||||
"peer.ipv4" "127.0.0.1"
|
||||
"peer.port" Integer
|
||||
"span.kind" "server"
|
||||
"span.origin.type" "org.apache.catalina.core.ApplicationFilterChain"
|
||||
"component" "java-web-servlet"
|
||||
|
@ -232,8 +238,9 @@ class SpringBootBasedTest extends AgentTestRunner {
|
|||
tags {
|
||||
"http.url" "http://localhost:$port/error/qwerty/"
|
||||
"http.method" "GET"
|
||||
"peer.hostname" "localhost"
|
||||
"peer.port" port
|
||||
"peer.hostname" "127.0.0.1"
|
||||
"peer.ipv4" "127.0.0.1"
|
||||
"peer.port" Integer
|
||||
"span.kind" "server"
|
||||
"span.origin.type" "org.apache.catalina.core.ApplicationFilterChain"
|
||||
"component" "java-web-servlet"
|
||||
|
@ -255,8 +262,9 @@ class SpringBootBasedTest extends AgentTestRunner {
|
|||
tags {
|
||||
"http.url" "http://localhost:$port/error"
|
||||
"http.method" "GET"
|
||||
"peer.hostname" "localhost"
|
||||
"peer.port" port
|
||||
"peer.hostname" "127.0.0.1"
|
||||
"peer.ipv4" "127.0.0.1"
|
||||
"peer.port" Integer
|
||||
"span.kind" "server"
|
||||
"span.origin.type" "org.apache.catalina.core.ApplicationFilterChain"
|
||||
"component" "java-web-servlet"
|
||||
|
@ -286,8 +294,9 @@ class SpringBootBasedTest extends AgentTestRunner {
|
|||
tags {
|
||||
"http.url" "http://localhost:$port/validated"
|
||||
"http.method" "POST"
|
||||
"peer.hostname" "localhost"
|
||||
"peer.port" port
|
||||
"peer.hostname" "127.0.0.1"
|
||||
"peer.ipv4" "127.0.0.1"
|
||||
"peer.port" Integer
|
||||
"span.kind" "server"
|
||||
"span.origin.type" "org.apache.catalina.core.ApplicationFilterChain"
|
||||
"component" "java-web-servlet"
|
||||
|
@ -323,8 +332,9 @@ class SpringBootBasedTest extends AgentTestRunner {
|
|||
tags {
|
||||
"http.url" "http://localhost:$port/validated"
|
||||
"http.method" "POST"
|
||||
"peer.hostname" "localhost"
|
||||
"peer.port" port
|
||||
"peer.hostname" "127.0.0.1"
|
||||
"peer.ipv4" "127.0.0.1"
|
||||
"peer.port" Integer
|
||||
"span.kind" "server"
|
||||
"span.origin.type" "org.apache.catalina.core.ApplicationFilterChain"
|
||||
"component" "java-web-servlet"
|
||||
|
@ -349,8 +359,9 @@ class SpringBootBasedTest extends AgentTestRunner {
|
|||
tags {
|
||||
"http.url" "http://localhost:$port/error"
|
||||
"http.method" "POST"
|
||||
"peer.hostname" "localhost"
|
||||
"peer.port" port
|
||||
"peer.hostname" "127.0.0.1"
|
||||
"peer.ipv4" "127.0.0.1"
|
||||
"peer.port" Integer
|
||||
"span.kind" "server"
|
||||
"span.origin.type" "org.apache.catalina.core.ApplicationFilterChain"
|
||||
"component" "java-web-servlet"
|
||||
|
|
Loading…
Reference in New Issue