From b62266fd520da1d4ad820a8194640e8600e6237d Mon Sep 17 00:00:00 2001 From: Luca Abbati Date: Tue, 9 Jul 2019 21:13:00 -0400 Subject: [PATCH 1/7] First draft of jersey 1.19 client instrumentation --- .../jax-rs-client-1/jax-rs-client-1.gradle | 57 +++++++++++ .../jaxrs/v1/InjectAdapter.java | 27 ++++++ .../jaxrs/v1/JaxRsClientV1Decorator.java | 47 +++++++++ .../v1/JaxRsClientV1Instrumentation.java | 96 +++++++++++++++++++ settings.gradle | 1 + 5 files changed, 228 insertions(+) create mode 100644 dd-java-agent/instrumentation/jax-rs-client/jax-rs-client-1/jax-rs-client-1.gradle create mode 100644 dd-java-agent/instrumentation/jax-rs-client/jax-rs-client-1/src/main/java/datadog/trace/instrumentation/jaxrs/v1/InjectAdapter.java create mode 100644 dd-java-agent/instrumentation/jax-rs-client/jax-rs-client-1/src/main/java/datadog/trace/instrumentation/jaxrs/v1/JaxRsClientV1Decorator.java create mode 100644 dd-java-agent/instrumentation/jax-rs-client/jax-rs-client-1/src/main/java/datadog/trace/instrumentation/jaxrs/v1/JaxRsClientV1Instrumentation.java diff --git a/dd-java-agent/instrumentation/jax-rs-client/jax-rs-client-1/jax-rs-client-1.gradle b/dd-java-agent/instrumentation/jax-rs-client/jax-rs-client-1/jax-rs-client-1.gradle new file mode 100644 index 0000000000..9cde2997d4 --- /dev/null +++ b/dd-java-agent/instrumentation/jax-rs-client/jax-rs-client-1/jax-rs-client-1.gradle @@ -0,0 +1,57 @@ +ext { + jerseyClientVersion = '1.19.1' +} + +muzzle { + pass { + group = "javax.ws.rs" + module = "javax.ws.rs-api" + versions = "[1.0,2.0)" + } +// pass { +// // We want to support the dropwizard clients too. +// group = 'io.dropwizard' +// module = 'dropwizard-client' +// versions = "[0.8.0,)" +// assertInverse = true +// } +} + +apply from: "${rootDir}/gradle/java.gradle" + +apply plugin: 'org.unbroken-dome.test-sets' + +testSets { + latestDepTest { + dirName = 'test' + } +} + +dependencies { + compileOnly group: 'com.sun.jersey', name: 'jersey-client', version: jerseyClientVersion + //compileOnly group: 'javax.ws.rs', name: 'javax.ws.rs-api', version: '2.0.1' + //compileOnly group: 'javax.annotation', name: 'javax.annotation-api', version: '1.2' + + compile deps.bytebuddy + compile deps.opentracing + annotationProcessor deps.autoservice + implementation deps.autoservice + + compile project(':dd-java-agent:agent-tooling') + + testCompile project(':dd-java-agent:testing') + testCompile project(':dd-java-agent:instrumentation:java-concurrent') + + testCompile group: 'com.sun.jersey', name: 'jersey-client', version: jerseyClientVersion + +// testCompile group: 'org.apache.cxf', name: 'cxf-rt-rs-client', version: '3.1.0' + // Doesn't work with CXF 3.0.x because their context is wrong: + // https://github.com/apache/cxf/commit/335c7bad2436f08d6d54180212df5a52157c9f21 + +// testCompile group: 'javax.xml.bind', name: 'jaxb-api', version: '2.2.3' + +// latestDepTestCompile group: 'org.glassfish.jersey.inject', name: 'jersey-hk2', version: '2.27' + latestDepTestCompile group: 'com.sun.jersey', name: 'jersey-client', version: jerseyClientVersion +// latestDepTestCompile group: 'org.apache.cxf', name: 'cxf-rt-rs-client', version: '3.2.6' +// latestDepTestCompile group: 'org.jboss.resteasy', name: 'resteasy-client', version: '3.0.26.Final' +} diff --git a/dd-java-agent/instrumentation/jax-rs-client/jax-rs-client-1/src/main/java/datadog/trace/instrumentation/jaxrs/v1/InjectAdapter.java b/dd-java-agent/instrumentation/jax-rs-client/jax-rs-client-1/src/main/java/datadog/trace/instrumentation/jaxrs/v1/InjectAdapter.java new file mode 100644 index 0000000000..44d4f73c49 --- /dev/null +++ b/dd-java-agent/instrumentation/jax-rs-client/jax-rs-client-1/src/main/java/datadog/trace/instrumentation/jaxrs/v1/InjectAdapter.java @@ -0,0 +1,27 @@ +package datadog.trace.instrumentation.jaxrs.v1; + +import io.opentracing.propagation.TextMap; + +import javax.ws.rs.core.MultivaluedMap; +import java.util.Iterator; +import java.util.Map; + +public final class InjectAdapter implements TextMap { + private final MultivaluedMap map; + + public InjectAdapter(final MultivaluedMap map) { + this.map = map; + } + + @Override + public Iterator> iterator() { + throw new UnsupportedOperationException( + "InjectAdapter should only be used with Tracer.inject()"); + } + + @Override + public void put(final String key, final String value) { + // Don't allow duplicates. + map.putSingle(key, value); + } +} diff --git a/dd-java-agent/instrumentation/jax-rs-client/jax-rs-client-1/src/main/java/datadog/trace/instrumentation/jaxrs/v1/JaxRsClientV1Decorator.java b/dd-java-agent/instrumentation/jax-rs-client/jax-rs-client-1/src/main/java/datadog/trace/instrumentation/jaxrs/v1/JaxRsClientV1Decorator.java new file mode 100644 index 0000000000..3c4f00a947 --- /dev/null +++ b/dd-java-agent/instrumentation/jax-rs-client/jax-rs-client-1/src/main/java/datadog/trace/instrumentation/jaxrs/v1/JaxRsClientV1Decorator.java @@ -0,0 +1,47 @@ +package datadog.trace.instrumentation.jaxrs.v1; + +import com.sun.jersey.api.client.ClientRequest; +import com.sun.jersey.api.client.ClientResponse; +import datadog.trace.agent.decorator.HttpClientDecorator; + +import java.net.URI; + +public class JaxRsClientV1Decorator + extends HttpClientDecorator { + public static final JaxRsClientV1Decorator DECORATE = new JaxRsClientV1Decorator(); + + @Override + protected String[] instrumentationNames() { + return new String[] {"jax-rs", "jaxrs", "jax-rs-client"}; + } + + @Override + protected String component() { + return "jax-rs.client"; + } + + @Override + protected String method(final ClientRequest httpRequest) { + return httpRequest.getMethod(); + } + + @Override + protected URI url(final ClientRequest httpRequest) { + return httpRequest.getURI(); + } + + @Override + protected String hostname(final ClientRequest httpRequest) { + return httpRequest.getURI().getHost(); + } + + @Override + protected Integer port(final ClientRequest httpRequest) { + return httpRequest.getURI().getPort(); + } + + @Override + protected Integer status(ClientResponse clientResponse) { + return clientResponse.getStatus(); + } +} diff --git a/dd-java-agent/instrumentation/jax-rs-client/jax-rs-client-1/src/main/java/datadog/trace/instrumentation/jaxrs/v1/JaxRsClientV1Instrumentation.java b/dd-java-agent/instrumentation/jax-rs-client/jax-rs-client-1/src/main/java/datadog/trace/instrumentation/jaxrs/v1/JaxRsClientV1Instrumentation.java new file mode 100644 index 0000000000..5fd568cb89 --- /dev/null +++ b/dd-java-agent/instrumentation/jax-rs-client/jax-rs-client-1/src/main/java/datadog/trace/instrumentation/jaxrs/v1/JaxRsClientV1Instrumentation.java @@ -0,0 +1,96 @@ +package datadog.trace.instrumentation.jaxrs.v1; + +import static datadog.trace.agent.tooling.ByteBuddyElementMatchers.safeHasSuperType; +import static net.bytebuddy.matcher.ElementMatchers.named; +import static net.bytebuddy.matcher.ElementMatchers.returns; +import static net.bytebuddy.matcher.ElementMatchers.takesArgument; +import static datadog.trace.instrumentation.jaxrs.v1.JaxRsClientV1Decorator.DECORATE; +import com.google.auto.service.AutoService; +import com.sun.jersey.api.client.ClientRequest; +import com.sun.jersey.api.client.ClientResponse; +import datadog.trace.agent.tooling.Instrumenter; +import datadog.trace.api.DDTags; +import io.opentracing.Scope; +import io.opentracing.Span; +import io.opentracing.propagation.Format; +import io.opentracing.util.GlobalTracer; +import net.bytebuddy.asm.Advice; +import net.bytebuddy.description.method.MethodDescription; +import net.bytebuddy.description.type.TypeDescription; +import net.bytebuddy.matcher.ElementMatcher; +import static java.util.Collections.singletonMap; + +import java.util.Map; + +@AutoService(Instrumenter.class) +public final class JaxRsClientV1Instrumentation extends Instrumenter.Default { + + public JaxRsClientV1Instrumentation() { + super("jax-rs", "jaxrs", "jax-rs-client"); + } + + @Override + public ElementMatcher typeMatcher() { + return safeHasSuperType(named("com.sun.jersey.api.client.ClientHandler")); + } + + @Override + public String[] helperClassNames() { + return new String[] { + "datadog.trace.agent.decorator.BaseDecorator", + "datadog.trace.agent.decorator.ClientDecorator", + "datadog.trace.agent.decorator.HttpClientDecorator", + packageName + ".JaxRsClientDecorator", + packageName + ".ClientTracingFeature", + packageName + ".ClientTracingFilter", + packageName + ".InjectAdapter", + }; + } + + @Override + public Map, String> transformers() { + return singletonMap( + named("handle") + .and(takesArgument(2, named("com.sun.jersey.api.client.ClientRequest"))) + .and(returns(named("com.sun.jersey.api.client.ClientResponse"))), + HandleAdvice.class.getName() + ); + } + + public static class HandleAdvice { + + @Advice.OnMethodEnter + public static Span onEnter(@Advice.Argument(value = 1) final ClientRequest request) { + + // WARNING: this might be a chain...so we only have to trace the first int he chain. + + final Span span = + GlobalTracer.get() + .buildSpan("jax-rs.client.call") + .withTag(DDTags.RESOURCE_NAME, request.getMethod() + " jax-rs.client.call") + .start(); + try (final Scope scope = GlobalTracer.get().scopeManager().activate(span, false)) { + DECORATE.afterStart(span); + DECORATE.onRequest(span, request); + + GlobalTracer.get() + .inject( + span.context(), + Format.Builtin.HTTP_HEADERS, + new InjectAdapter(request.getHeaders())); + + request.getProperties().put("dd.span", span); + } + + return span; + } + + @Advice.OnMethodExit + public static void onExit(@Advice.Argument(value = 1) final ClientRequest request, ClientResponse response) { + Span span = (Span) request.getProperties().get("dd.span"); + DECORATE.onResponse(span, response); + DECORATE.beforeFinish(span); + span.finish(); + } + } +} diff --git a/settings.gradle b/settings.gradle index 23b68dd31f..fdd496b6d2 100644 --- a/settings.gradle +++ b/settings.gradle @@ -52,6 +52,7 @@ include ':dd-java-agent:instrumentation:jax-rs-annotations' include ':dd-java-agent:instrumentation:jax-rs-client' include ':dd-java-agent:instrumentation:jax-rs-client:connection-error-handling-jersey' include ':dd-java-agent:instrumentation:jax-rs-client:connection-error-handling-resteasy' +include ':dd-java-agent:instrumentation:jax-rs-client:jax-rs-client-1' include ':dd-java-agent:instrumentation:java-concurrent' include ':dd-java-agent:instrumentation:java-concurrent:kotlin-testing' include ':dd-java-agent:instrumentation:java-concurrent:scala-testing' From 0f5dd2413c28276d4bc8759e4895c92d7271476f Mon Sep 17 00:00:00 2001 From: Luca Abbati Date: Tue, 9 Jul 2019 22:49:44 -0400 Subject: [PATCH 2/7] Add tests for Jersey V1 client --- .../v1/JaxRsClientV1Instrumentation.java | 57 +++++++++++-------- .../src/test/groovy/JaxRsClientV1Test.groovy | 35 ++++++++++++ 2 files changed, 69 insertions(+), 23 deletions(-) create mode 100644 dd-java-agent/instrumentation/jax-rs-client/jax-rs-client-1/src/test/groovy/JaxRsClientV1Test.groovy diff --git a/dd-java-agent/instrumentation/jax-rs-client/jax-rs-client-1/src/main/java/datadog/trace/instrumentation/jaxrs/v1/JaxRsClientV1Instrumentation.java b/dd-java-agent/instrumentation/jax-rs-client/jax-rs-client-1/src/main/java/datadog/trace/instrumentation/jaxrs/v1/JaxRsClientV1Instrumentation.java index 5fd568cb89..8258d5f2ef 100644 --- a/dd-java-agent/instrumentation/jax-rs-client/jax-rs-client-1/src/main/java/datadog/trace/instrumentation/jaxrs/v1/JaxRsClientV1Instrumentation.java +++ b/dd-java-agent/instrumentation/jax-rs-client/jax-rs-client-1/src/main/java/datadog/trace/instrumentation/jaxrs/v1/JaxRsClientV1Instrumentation.java @@ -6,6 +6,7 @@ import static net.bytebuddy.matcher.ElementMatchers.returns; import static net.bytebuddy.matcher.ElementMatchers.takesArgument; import static datadog.trace.instrumentation.jaxrs.v1.JaxRsClientV1Decorator.DECORATE; import com.google.auto.service.AutoService; +import com.sun.jersey.api.client.ClientHandler; import com.sun.jersey.api.client.ClientRequest; import com.sun.jersey.api.client.ClientResponse; import datadog.trace.agent.tooling.Instrumenter; @@ -60,37 +61,47 @@ public final class JaxRsClientV1Instrumentation extends Instrumenter.Default { public static class HandleAdvice { @Advice.OnMethodEnter - public static Span onEnter(@Advice.Argument(value = 1) final ClientRequest request) { + public static void onEnter(@Advice.Argument(value = 1) final ClientRequest request, ClientHandler thisObj) { - // WARNING: this might be a chain...so we only have to trace the first int he chain. + // WARNING: this might be a chain...so we only have to trace the first in the chain. + boolean isRootClientHandler = null == request.getProperties().get("dd.span"); + if (isRootClientHandler) { + final Span span = + GlobalTracer.get() + .buildSpan("jax-rs.client.call") + .withTag(DDTags.RESOURCE_NAME, request.getMethod() + " jax-rs.client.call") + .start(); + try (final Scope scope = GlobalTracer.get().scopeManager().activate(span, false)) { + DECORATE.afterStart(span); + DECORATE.onRequest(span, request); - final Span span = - GlobalTracer.get() - .buildSpan("jax-rs.client.call") - .withTag(DDTags.RESOURCE_NAME, request.getMethod() + " jax-rs.client.call") - .start(); - try (final Scope scope = GlobalTracer.get().scopeManager().activate(span, false)) { - DECORATE.afterStart(span); - DECORATE.onRequest(span, request); + GlobalTracer.get() + .inject( + span.context(), + Format.Builtin.HTTP_HEADERS, + new InjectAdapter(request.getHeaders())); - GlobalTracer.get() - .inject( - span.context(), - Format.Builtin.HTTP_HEADERS, - new InjectAdapter(request.getHeaders())); - - request.getProperties().put("dd.span", span); + request.getProperties().put("dd.span", span); + request.getProperties().put("dd.root.handler.hash", thisObj.hashCode()); + } } - - return span; } @Advice.OnMethodExit - public static void onExit(@Advice.Argument(value = 1) final ClientRequest request, ClientResponse response) { + public static void onExit(@Advice.Argument(value = 1) final ClientRequest request, ClientResponse response, ClientHandler thisObj) { Span span = (Span) request.getProperties().get("dd.span"); - DECORATE.onResponse(span, response); - DECORATE.beforeFinish(span); - span.finish(); + if (null == span) { + return; + } + + request.getProperties().get("dd.root.handler.hash"); + + if (thisObj.hashCode() == (Integer) request.getProperties().get("dd.root.handler.hash")) { + // this is the root span, closing all the things + DECORATE.onResponse(span, response); + DECORATE.beforeFinish(span); + span.finish(); + } } } } diff --git a/dd-java-agent/instrumentation/jax-rs-client/jax-rs-client-1/src/test/groovy/JaxRsClientV1Test.groovy b/dd-java-agent/instrumentation/jax-rs-client/jax-rs-client-1/src/test/groovy/JaxRsClientV1Test.groovy new file mode 100644 index 0000000000..64087fd7fa --- /dev/null +++ b/dd-java-agent/instrumentation/jax-rs-client/jax-rs-client-1/src/test/groovy/JaxRsClientV1Test.groovy @@ -0,0 +1,35 @@ +import com.sun.jersey.api.client.Client +import com.sun.jersey.api.client.ClientResponse +import com.sun.jersey.client.impl.ClientRequestImpl +import datadog.trace.agent.test.base.HttpClientTest +import datadog.trace.instrumentation.jaxrs.v1.JaxRsClientV1Decorator + +abstract class JaxRsClientV1Test extends HttpClientTest { + + @Override + int doRequest(String method, URI uri, Map headers, Closure callback) { + + Client client = Client.create() + def resource = client.resource(uri) + headers.each { resource.header(it.key, it.value) } + def body = BODY_METHODS.contains(method) ? new ClientRequestImpl(uri, method) : null + ClientResponse response = resource.method(method, body) + callback?.call() + + return response.status + } + + @Override + JaxRsClientV1Decorator decorator() { + return JaxRsClientV1Decorator.DECORATE + } + + @Override + String expectedOperationName() { + return "jax-rs.client.call" + } + + boolean testRedirects() { + false + } +} From 3ab63e700599c55cfcc922713a7ba13a1d3d1fff Mon Sep 17 00:00:00 2001 From: Luca Abbati Date: Wed, 10 Jul 2019 08:43:31 -0400 Subject: [PATCH 3/7] Some refactoring in tests --- .../jax-rs-client-1/jax-rs-client-1.gradle | 2 +- .../jaxrs/v1/InjectAdapter.java | 3 +- .../jaxrs/v1/JaxRsClientV1Decorator.java | 4 +- .../v1/JaxRsClientV1Instrumentation.java | 46 +++++++++++-------- .../src/test/groovy/JaxRsClientV1Test.groovy | 6 +-- 5 files changed, 34 insertions(+), 27 deletions(-) diff --git a/dd-java-agent/instrumentation/jax-rs-client/jax-rs-client-1/jax-rs-client-1.gradle b/dd-java-agent/instrumentation/jax-rs-client/jax-rs-client-1/jax-rs-client-1.gradle index 9cde2997d4..0aa14f2a55 100644 --- a/dd-java-agent/instrumentation/jax-rs-client/jax-rs-client-1/jax-rs-client-1.gradle +++ b/dd-java-agent/instrumentation/jax-rs-client/jax-rs-client-1/jax-rs-client-1.gradle @@ -51,7 +51,7 @@ dependencies { // testCompile group: 'javax.xml.bind', name: 'jaxb-api', version: '2.2.3' // latestDepTestCompile group: 'org.glassfish.jersey.inject', name: 'jersey-hk2', version: '2.27' - latestDepTestCompile group: 'com.sun.jersey', name: 'jersey-client', version: jerseyClientVersion + latestDepTestCompile group: 'com.sun.jersey', name: 'jersey-client', version: '1.19.4' // latestDepTestCompile group: 'org.apache.cxf', name: 'cxf-rt-rs-client', version: '3.2.6' // latestDepTestCompile group: 'org.jboss.resteasy', name: 'resteasy-client', version: '3.0.26.Final' } diff --git a/dd-java-agent/instrumentation/jax-rs-client/jax-rs-client-1/src/main/java/datadog/trace/instrumentation/jaxrs/v1/InjectAdapter.java b/dd-java-agent/instrumentation/jax-rs-client/jax-rs-client-1/src/main/java/datadog/trace/instrumentation/jaxrs/v1/InjectAdapter.java index 44d4f73c49..98f4ec6c5a 100644 --- a/dd-java-agent/instrumentation/jax-rs-client/jax-rs-client-1/src/main/java/datadog/trace/instrumentation/jaxrs/v1/InjectAdapter.java +++ b/dd-java-agent/instrumentation/jax-rs-client/jax-rs-client-1/src/main/java/datadog/trace/instrumentation/jaxrs/v1/InjectAdapter.java @@ -1,10 +1,9 @@ package datadog.trace.instrumentation.jaxrs.v1; import io.opentracing.propagation.TextMap; - -import javax.ws.rs.core.MultivaluedMap; import java.util.Iterator; import java.util.Map; +import javax.ws.rs.core.MultivaluedMap; public final class InjectAdapter implements TextMap { private final MultivaluedMap map; diff --git a/dd-java-agent/instrumentation/jax-rs-client/jax-rs-client-1/src/main/java/datadog/trace/instrumentation/jaxrs/v1/JaxRsClientV1Decorator.java b/dd-java-agent/instrumentation/jax-rs-client/jax-rs-client-1/src/main/java/datadog/trace/instrumentation/jaxrs/v1/JaxRsClientV1Decorator.java index 3c4f00a947..0ee31cef43 100644 --- a/dd-java-agent/instrumentation/jax-rs-client/jax-rs-client-1/src/main/java/datadog/trace/instrumentation/jaxrs/v1/JaxRsClientV1Decorator.java +++ b/dd-java-agent/instrumentation/jax-rs-client/jax-rs-client-1/src/main/java/datadog/trace/instrumentation/jaxrs/v1/JaxRsClientV1Decorator.java @@ -3,11 +3,9 @@ package datadog.trace.instrumentation.jaxrs.v1; import com.sun.jersey.api.client.ClientRequest; import com.sun.jersey.api.client.ClientResponse; import datadog.trace.agent.decorator.HttpClientDecorator; - import java.net.URI; -public class JaxRsClientV1Decorator - extends HttpClientDecorator { +public class JaxRsClientV1Decorator extends HttpClientDecorator { public static final JaxRsClientV1Decorator DECORATE = new JaxRsClientV1Decorator(); @Override diff --git a/dd-java-agent/instrumentation/jax-rs-client/jax-rs-client-1/src/main/java/datadog/trace/instrumentation/jaxrs/v1/JaxRsClientV1Instrumentation.java b/dd-java-agent/instrumentation/jax-rs-client/jax-rs-client-1/src/main/java/datadog/trace/instrumentation/jaxrs/v1/JaxRsClientV1Instrumentation.java index 8258d5f2ef..791caeb8f6 100644 --- a/dd-java-agent/instrumentation/jax-rs-client/jax-rs-client-1/src/main/java/datadog/trace/instrumentation/jaxrs/v1/JaxRsClientV1Instrumentation.java +++ b/dd-java-agent/instrumentation/jax-rs-client/jax-rs-client-1/src/main/java/datadog/trace/instrumentation/jaxrs/v1/JaxRsClientV1Instrumentation.java @@ -1,10 +1,12 @@ package datadog.trace.instrumentation.jaxrs.v1; import static datadog.trace.agent.tooling.ByteBuddyElementMatchers.safeHasSuperType; +import static datadog.trace.instrumentation.jaxrs.v1.JaxRsClientV1Decorator.DECORATE; +import static java.util.Collections.singletonMap; import static net.bytebuddy.matcher.ElementMatchers.named; import static net.bytebuddy.matcher.ElementMatchers.returns; import static net.bytebuddy.matcher.ElementMatchers.takesArgument; -import static datadog.trace.instrumentation.jaxrs.v1.JaxRsClientV1Decorator.DECORATE; + import com.google.auto.service.AutoService; import com.sun.jersey.api.client.ClientHandler; import com.sun.jersey.api.client.ClientRequest; @@ -15,13 +17,11 @@ import io.opentracing.Scope; import io.opentracing.Span; import io.opentracing.propagation.Format; import io.opentracing.util.GlobalTracer; +import java.util.Map; import net.bytebuddy.asm.Advice; import net.bytebuddy.description.method.MethodDescription; import net.bytebuddy.description.type.TypeDescription; import net.bytebuddy.matcher.ElementMatcher; -import static java.util.Collections.singletonMap; - -import java.util.Map; @AutoService(Instrumenter.class) public final class JaxRsClientV1Instrumentation extends Instrumenter.Default { @@ -50,36 +50,40 @@ public final class JaxRsClientV1Instrumentation extends Instrumenter.Default { @Override public Map, String> transformers() { + System.out.println("######### REGISTERING"); return singletonMap( named("handle") - .and(takesArgument(2, named("com.sun.jersey.api.client.ClientRequest"))) - .and(returns(named("com.sun.jersey.api.client.ClientResponse"))), - HandleAdvice.class.getName() - ); + .and(takesArgument(0, safeHasSuperType(named("com.sun.jersey.api.client.ClientRequest")))) + .and(returns(safeHasSuperType(named("com.sun.jersey.api.client.ClientResponse")))), + HandleAdvice.class.getName()); } public static class HandleAdvice { @Advice.OnMethodEnter - public static void onEnter(@Advice.Argument(value = 1) final ClientRequest request, ClientHandler thisObj) { + public static void onEnter( + @Advice.Argument(value = 0) final ClientRequest request, + @Advice.This final ClientHandler thisObj) { + + System.out.println("############ ON HANDLE ENTER"); // WARNING: this might be a chain...so we only have to trace the first in the chain. boolean isRootClientHandler = null == request.getProperties().get("dd.span"); if (isRootClientHandler) { final Span span = - GlobalTracer.get() - .buildSpan("jax-rs.client.call") - .withTag(DDTags.RESOURCE_NAME, request.getMethod() + " jax-rs.client.call") - .start(); + GlobalTracer.get() + .buildSpan("jax-rs.client.call") + .withTag(DDTags.RESOURCE_NAME, request.getMethod() + " jax-rs.client.call") + .start(); try (final Scope scope = GlobalTracer.get().scopeManager().activate(span, false)) { DECORATE.afterStart(span); DECORATE.onRequest(span, request); GlobalTracer.get() - .inject( - span.context(), - Format.Builtin.HTTP_HEADERS, - new InjectAdapter(request.getHeaders())); + .inject( + span.context(), + Format.Builtin.HTTP_HEADERS, + new InjectAdapter(request.getHeaders())); request.getProperties().put("dd.span", span); request.getProperties().put("dd.root.handler.hash", thisObj.hashCode()); @@ -88,7 +92,13 @@ public final class JaxRsClientV1Instrumentation extends Instrumenter.Default { } @Advice.OnMethodExit - public static void onExit(@Advice.Argument(value = 1) final ClientRequest request, ClientResponse response, ClientHandler thisObj) { + public static void onExit( + @Advice.Argument(value = 0) final ClientRequest request, + @Advice.Return final ClientResponse response, + @Advice.This final ClientHandler thisObj) { + + System.out.println("############ ON HANDLE ENTER"); + Span span = (Span) request.getProperties().get("dd.span"); if (null == span) { return; diff --git a/dd-java-agent/instrumentation/jax-rs-client/jax-rs-client-1/src/test/groovy/JaxRsClientV1Test.groovy b/dd-java-agent/instrumentation/jax-rs-client/jax-rs-client-1/src/test/groovy/JaxRsClientV1Test.groovy index 64087fd7fa..38f2ffe769 100644 --- a/dd-java-agent/instrumentation/jax-rs-client/jax-rs-client-1/src/test/groovy/JaxRsClientV1Test.groovy +++ b/dd-java-agent/instrumentation/jax-rs-client/jax-rs-client-1/src/test/groovy/JaxRsClientV1Test.groovy @@ -4,16 +4,16 @@ import com.sun.jersey.client.impl.ClientRequestImpl import datadog.trace.agent.test.base.HttpClientTest import datadog.trace.instrumentation.jaxrs.v1.JaxRsClientV1Decorator -abstract class JaxRsClientV1Test extends HttpClientTest { +class JaxRsClientV1Test extends HttpClientTest { @Override int doRequest(String method, URI uri, Map headers, Closure callback) { - Client client = Client.create() def resource = client.resource(uri) headers.each { resource.header(it.key, it.value) } def body = BODY_METHODS.contains(method) ? new ClientRequestImpl(uri, method) : null - ClientResponse response = resource.method(method, body) + ClientResponse response = resource.method(method, ClientResponse.class, body) + println "################## RESPOSNE #####################" + response callback?.call() return response.status From c16a0844d83f1b6f28ddbc1b4aa46b93218eb012 Mon Sep 17 00:00:00 2001 From: Luca Abbati Date: Wed, 10 Jul 2019 13:05:12 -0400 Subject: [PATCH 4/7] Enable tracing of jax-rs client in sun package --- .../trace/agent/tooling/AgentInstaller.java | 7 ++++++- .../jaxrs/v1/JaxRsClientV1Instrumentation.java | 18 ++++++++---------- .../src/test/groovy/JaxRsClientV1Test.groovy | 1 - 3 files changed, 14 insertions(+), 12 deletions(-) diff --git a/dd-java-agent/agent-tooling/src/main/java/datadog/trace/agent/tooling/AgentInstaller.java b/dd-java-agent/agent-tooling/src/main/java/datadog/trace/agent/tooling/AgentInstaller.java index b51197d4ad..7af1543707 100644 --- a/dd-java-agent/agent-tooling/src/main/java/datadog/trace/agent/tooling/AgentInstaller.java +++ b/dd-java-agent/agent-tooling/src/main/java/datadog/trace/agent/tooling/AgentInstaller.java @@ -107,7 +107,12 @@ public class AgentInstaller { // Working around until a long-term fix for modules can be // put in place. .and(not(named("java.util.logging.LogManager$Cleaner"))))))) - .or(nameStartsWith("com.sun.").and(not(nameStartsWith("com.sun.messaging.")))) + .or( + nameStartsWith("com.sun.") + .and( + not( + nameStartsWith("com.sun.messaging.") + .or(nameStartsWith("com.sun.jersey.api.client"))))) .or( nameStartsWith("sun.") .and( diff --git a/dd-java-agent/instrumentation/jax-rs-client/jax-rs-client-1/src/main/java/datadog/trace/instrumentation/jaxrs/v1/JaxRsClientV1Instrumentation.java b/dd-java-agent/instrumentation/jax-rs-client/jax-rs-client-1/src/main/java/datadog/trace/instrumentation/jaxrs/v1/JaxRsClientV1Instrumentation.java index 791caeb8f6..e880d9e835 100644 --- a/dd-java-agent/instrumentation/jax-rs-client/jax-rs-client-1/src/main/java/datadog/trace/instrumentation/jaxrs/v1/JaxRsClientV1Instrumentation.java +++ b/dd-java-agent/instrumentation/jax-rs-client/jax-rs-client-1/src/main/java/datadog/trace/instrumentation/jaxrs/v1/JaxRsClientV1Instrumentation.java @@ -41,9 +41,7 @@ public final class JaxRsClientV1Instrumentation extends Instrumenter.Default { "datadog.trace.agent.decorator.BaseDecorator", "datadog.trace.agent.decorator.ClientDecorator", "datadog.trace.agent.decorator.HttpClientDecorator", - packageName + ".JaxRsClientDecorator", - packageName + ".ClientTracingFeature", - packageName + ".ClientTracingFilter", + packageName + ".JaxRsClientV1Decorator", packageName + ".InjectAdapter", }; } @@ -53,7 +51,9 @@ public final class JaxRsClientV1Instrumentation extends Instrumenter.Default { System.out.println("######### REGISTERING"); return singletonMap( named("handle") - .and(takesArgument(0, safeHasSuperType(named("com.sun.jersey.api.client.ClientRequest")))) + .and( + takesArgument( + 0, safeHasSuperType(named("com.sun.jersey.api.client.ClientRequest")))) .and(returns(safeHasSuperType(named("com.sun.jersey.api.client.ClientResponse")))), HandleAdvice.class.getName()); } @@ -65,8 +65,6 @@ public final class JaxRsClientV1Instrumentation extends Instrumenter.Default { @Advice.Argument(value = 0) final ClientRequest request, @Advice.This final ClientHandler thisObj) { - System.out.println("############ ON HANDLE ENTER"); - // WARNING: this might be a chain...so we only have to trace the first in the chain. boolean isRootClientHandler = null == request.getProperties().get("dd.span"); if (isRootClientHandler) { @@ -91,13 +89,13 @@ public final class JaxRsClientV1Instrumentation extends Instrumenter.Default { } } - @Advice.OnMethodExit + @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class) public static void onExit( @Advice.Argument(value = 0) final ClientRequest request, @Advice.Return final ClientResponse response, - @Advice.This final ClientHandler thisObj) { - - System.out.println("############ ON HANDLE ENTER"); + @Advice.This final ClientHandler thisObj, + @Advice.Thrown final Throwable throwable + ) { Span span = (Span) request.getProperties().get("dd.span"); if (null == span) { diff --git a/dd-java-agent/instrumentation/jax-rs-client/jax-rs-client-1/src/test/groovy/JaxRsClientV1Test.groovy b/dd-java-agent/instrumentation/jax-rs-client/jax-rs-client-1/src/test/groovy/JaxRsClientV1Test.groovy index 38f2ffe769..0d7ebba53c 100644 --- a/dd-java-agent/instrumentation/jax-rs-client/jax-rs-client-1/src/test/groovy/JaxRsClientV1Test.groovy +++ b/dd-java-agent/instrumentation/jax-rs-client/jax-rs-client-1/src/test/groovy/JaxRsClientV1Test.groovy @@ -13,7 +13,6 @@ class JaxRsClientV1Test extends HttpClientTest { headers.each { resource.header(it.key, it.value) } def body = BODY_METHODS.contains(method) ? new ClientRequestImpl(uri, method) : null ClientResponse response = resource.method(method, ClientResponse.class, body) - println "################## RESPOSNE #####################" + response callback?.call() return response.status From 5526fd0ca30f539b9738426d7d873371cf9fd125 Mon Sep 17 00:00:00 2001 From: Tyler Benson Date: Wed, 10 Jul 2019 13:10:49 -0600 Subject: [PATCH 5/7] Jersey client 1.9 cleanup --- .../jax-rs-client-1/jax-rs-client-1.gradle | 41 +++++----------- .../v1/JaxRsClientV1Instrumentation.java | 49 +++++++------------ .../src/test/groovy/JaxRsClientV1Test.groovy | 20 ++++++-- .../jaxrs/ClientTracingFilter.java | 3 -- 4 files changed, 46 insertions(+), 67 deletions(-) diff --git a/dd-java-agent/instrumentation/jax-rs-client/jax-rs-client-1/jax-rs-client-1.gradle b/dd-java-agent/instrumentation/jax-rs-client/jax-rs-client-1/jax-rs-client-1.gradle index 0aa14f2a55..395265d0ec 100644 --- a/dd-java-agent/instrumentation/jax-rs-client/jax-rs-client-1/jax-rs-client-1.gradle +++ b/dd-java-agent/instrumentation/jax-rs-client/jax-rs-client-1/jax-rs-client-1.gradle @@ -1,20 +1,15 @@ -ext { - jerseyClientVersion = '1.19.1' -} - muzzle { pass { - group = "javax.ws.rs" - module = "javax.ws.rs-api" - versions = "[1.0,2.0)" + group = "com.sun.jersey" + module = "jersey-client" + versions = "[1.9,)" + // We can't assert inverse because 1.1.5.2 was a weird release that also works. + } + fail { + group = "com.sun.jersey" + module = "jersey-client" + versions = "[1.2,1.9)" } -// pass { -// // We want to support the dropwizard clients too. -// group = 'io.dropwizard' -// module = 'dropwizard-client' -// versions = "[0.8.0,)" -// assertInverse = true -// } } apply from: "${rootDir}/gradle/java.gradle" @@ -28,9 +23,7 @@ testSets { } dependencies { - compileOnly group: 'com.sun.jersey', name: 'jersey-client', version: jerseyClientVersion - //compileOnly group: 'javax.ws.rs', name: 'javax.ws.rs-api', version: '2.0.1' - //compileOnly group: 'javax.annotation', name: 'javax.annotation-api', version: '1.2' + compileOnly group: 'com.sun.jersey', name: 'jersey-client', version: '1.9' compile deps.bytebuddy compile deps.opentracing @@ -40,18 +33,8 @@ dependencies { compile project(':dd-java-agent:agent-tooling') testCompile project(':dd-java-agent:testing') - testCompile project(':dd-java-agent:instrumentation:java-concurrent') - testCompile group: 'com.sun.jersey', name: 'jersey-client', version: jerseyClientVersion - -// testCompile group: 'org.apache.cxf', name: 'cxf-rt-rs-client', version: '3.1.0' - // Doesn't work with CXF 3.0.x because their context is wrong: - // https://github.com/apache/cxf/commit/335c7bad2436f08d6d54180212df5a52157c9f21 + testCompile group: 'com.sun.jersey', name: 'jersey-client', version: '1.9' -// testCompile group: 'javax.xml.bind', name: 'jaxb-api', version: '2.2.3' - -// latestDepTestCompile group: 'org.glassfish.jersey.inject', name: 'jersey-hk2', version: '2.27' - latestDepTestCompile group: 'com.sun.jersey', name: 'jersey-client', version: '1.19.4' -// latestDepTestCompile group: 'org.apache.cxf', name: 'cxf-rt-rs-client', version: '3.2.6' -// latestDepTestCompile group: 'org.jboss.resteasy', name: 'resteasy-client', version: '3.0.26.Final' + latestDepTestCompile group: 'com.sun.jersey', name: 'jersey-client', version: '+' } diff --git a/dd-java-agent/instrumentation/jax-rs-client/jax-rs-client-1/src/main/java/datadog/trace/instrumentation/jaxrs/v1/JaxRsClientV1Instrumentation.java b/dd-java-agent/instrumentation/jax-rs-client/jax-rs-client-1/src/main/java/datadog/trace/instrumentation/jaxrs/v1/JaxRsClientV1Instrumentation.java index e880d9e835..517fc5a94c 100644 --- a/dd-java-agent/instrumentation/jax-rs-client/jax-rs-client-1/src/main/java/datadog/trace/instrumentation/jaxrs/v1/JaxRsClientV1Instrumentation.java +++ b/dd-java-agent/instrumentation/jax-rs-client/jax-rs-client-1/src/main/java/datadog/trace/instrumentation/jaxrs/v1/JaxRsClientV1Instrumentation.java @@ -15,6 +15,7 @@ import datadog.trace.agent.tooling.Instrumenter; import datadog.trace.api.DDTags; import io.opentracing.Scope; import io.opentracing.Span; +import io.opentracing.Tracer; import io.opentracing.propagation.Format; import io.opentracing.util.GlobalTracer; import java.util.Map; @@ -48,7 +49,6 @@ public final class JaxRsClientV1Instrumentation extends Instrumenter.Default { @Override public Map, String> transformers() { - System.out.println("######### REGISTERING"); return singletonMap( named("handle") .and( @@ -61,54 +61,41 @@ public final class JaxRsClientV1Instrumentation extends Instrumenter.Default { public static class HandleAdvice { @Advice.OnMethodEnter - public static void onEnter( + public static Scope onEnter( @Advice.Argument(value = 0) final ClientRequest request, @Advice.This final ClientHandler thisObj) { // WARNING: this might be a chain...so we only have to trace the first in the chain. - boolean isRootClientHandler = null == request.getProperties().get("dd.span"); + final boolean isRootClientHandler = null == request.getProperties().get("dd.span"); if (isRootClientHandler) { + final Tracer tracer = GlobalTracer.get(); final Span span = - GlobalTracer.get() + tracer .buildSpan("jax-rs.client.call") .withTag(DDTags.RESOURCE_NAME, request.getMethod() + " jax-rs.client.call") .start(); - try (final Scope scope = GlobalTracer.get().scopeManager().activate(span, false)) { - DECORATE.afterStart(span); - DECORATE.onRequest(span, request); + DECORATE.afterStart(span); + DECORATE.onRequest(span, request); + request.getProperties().put("dd.span", span); - GlobalTracer.get() - .inject( - span.context(), - Format.Builtin.HTTP_HEADERS, - new InjectAdapter(request.getHeaders())); - - request.getProperties().put("dd.span", span); - request.getProperties().put("dd.root.handler.hash", thisObj.hashCode()); - } + tracer.inject( + span.context(), Format.Builtin.HTTP_HEADERS, new InjectAdapter(request.getHeaders())); + return tracer.scopeManager().activate(span, true); } + return null; } @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class) public static void onExit( - @Advice.Argument(value = 0) final ClientRequest request, + @Advice.Enter final Scope scope, @Advice.Return final ClientResponse response, - @Advice.This final ClientHandler thisObj, - @Advice.Thrown final Throwable throwable - ) { - - Span span = (Span) request.getProperties().get("dd.span"); - if (null == span) { - return; - } - - request.getProperties().get("dd.root.handler.hash"); - - if (thisObj.hashCode() == (Integer) request.getProperties().get("dd.root.handler.hash")) { - // this is the root span, closing all the things + @Advice.Thrown final Throwable throwable) { + if (null != scope) { + final Span span = scope.span(); DECORATE.onResponse(span, response); + DECORATE.onError(span, throwable); DECORATE.beforeFinish(span); - span.finish(); + scope.close(); } } } diff --git a/dd-java-agent/instrumentation/jax-rs-client/jax-rs-client-1/src/test/groovy/JaxRsClientV1Test.groovy b/dd-java-agent/instrumentation/jax-rs-client/jax-rs-client-1/src/test/groovy/JaxRsClientV1Test.groovy index 0d7ebba53c..b4070a3083 100644 --- a/dd-java-agent/instrumentation/jax-rs-client/jax-rs-client-1/src/test/groovy/JaxRsClientV1Test.groovy +++ b/dd-java-agent/instrumentation/jax-rs-client/jax-rs-client-1/src/test/groovy/JaxRsClientV1Test.groovy @@ -1,17 +1,29 @@ import com.sun.jersey.api.client.Client import com.sun.jersey.api.client.ClientResponse -import com.sun.jersey.client.impl.ClientRequestImpl +import com.sun.jersey.api.client.filter.CsrfProtectionFilter +import com.sun.jersey.api.client.filter.GZIPContentEncodingFilter +import com.sun.jersey.api.client.filter.LoggingFilter import datadog.trace.agent.test.base.HttpClientTest import datadog.trace.instrumentation.jaxrs.v1.JaxRsClientV1Decorator +import spock.lang.Shared class JaxRsClientV1Test extends HttpClientTest { + @Shared + Client client = Client.create() + + def setupSpec() { + // Add filters to ensure spans aren't duplicated. + client.addFilter(new LoggingFilter()) + client.addFilter(new GZIPContentEncodingFilter()) + client.addFilter(new CsrfProtectionFilter()) + } + @Override int doRequest(String method, URI uri, Map headers, Closure callback) { - Client client = Client.create() - def resource = client.resource(uri) + def resource = client.resource(uri).requestBuilder headers.each { resource.header(it.key, it.value) } - def body = BODY_METHODS.contains(method) ? new ClientRequestImpl(uri, method) : null + def body = BODY_METHODS.contains(method) ? "" : null ClientResponse response = resource.method(method, ClientResponse.class, body) callback?.call() diff --git a/dd-java-agent/instrumentation/jax-rs-client/src/main/java/datadog/trace/instrumentation/jaxrs/ClientTracingFilter.java b/dd-java-agent/instrumentation/jax-rs-client/src/main/java/datadog/trace/instrumentation/jaxrs/ClientTracingFilter.java index a32c1942d4..d3e54a4c2b 100644 --- a/dd-java-agent/instrumentation/jax-rs-client/src/main/java/datadog/trace/instrumentation/jaxrs/ClientTracingFilter.java +++ b/dd-java-agent/instrumentation/jax-rs-client/src/main/java/datadog/trace/instrumentation/jaxrs/ClientTracingFilter.java @@ -31,8 +31,6 @@ public class ClientTracingFilter implements ClientRequestFilter, ClientResponseF DECORATE.afterStart(span); DECORATE.onRequest(span, requestContext); - log.debug("{} - client span started", span); - GlobalTracer.get() .inject( span.context(), @@ -52,7 +50,6 @@ public class ClientTracingFilter implements ClientRequestFilter, ClientResponseF DECORATE.onResponse(span, responseContext); DECORATE.beforeFinish(span); span.finish(); - log.debug("{} - client spanObj finished", spanObj); } } } From 4486c3a6fff949b8accb8c7d4d5af820841e6a3d Mon Sep 17 00:00:00 2001 From: Tyler Benson Date: Wed, 10 Jul 2019 13:25:48 -0600 Subject: [PATCH 6/7] Change jax-rs-client project names to match versions --- .../jax-rs-client-1.9.gradle} | 0 .../trace/instrumentation/jaxrs/v1/InjectAdapter.java | 0 .../instrumentation/jaxrs/v1/JaxRsClientV1Decorator.java | 0 .../jaxrs/v1/JaxRsClientV1Instrumentation.java | 0 .../src/test/groovy/JaxRsClientV1Test.groovy | 0 .../connection-error-handling-jersey.gradle | 2 +- .../JerseyClientConnectionErrorInstrumentation.java | 0 .../connection-error-handling-resteasy.gradle | 2 +- .../ResteasyClientConnectionErrorInstrumentation.java | 0 .../jax-rs-client-2.0.gradle} | 4 ++-- .../trace/instrumentation/jaxrs/ClientTracingFeature.java | 0 .../trace/instrumentation/jaxrs/ClientTracingFilter.java | 0 .../trace/instrumentation/jaxrs/InjectAdapter.java | 0 .../trace/instrumentation/jaxrs/JaxRsClientDecorator.java | 0 .../instrumentation/jaxrs/JaxRsClientInstrumentation.java | 0 .../src/test/groovy/JaxRsClientAsyncTest.groovy | 0 .../src/test/groovy/JaxRsClientTest.groovy | 0 settings.gradle | 8 ++++---- 18 files changed, 8 insertions(+), 8 deletions(-) rename dd-java-agent/instrumentation/{jax-rs-client/jax-rs-client-1/jax-rs-client-1.gradle => jax-rs-client-1.9/jax-rs-client-1.9.gradle} (100%) rename dd-java-agent/instrumentation/{jax-rs-client/jax-rs-client-1 => jax-rs-client-1.9}/src/main/java/datadog/trace/instrumentation/jaxrs/v1/InjectAdapter.java (100%) rename dd-java-agent/instrumentation/{jax-rs-client/jax-rs-client-1 => jax-rs-client-1.9}/src/main/java/datadog/trace/instrumentation/jaxrs/v1/JaxRsClientV1Decorator.java (100%) rename dd-java-agent/instrumentation/{jax-rs-client/jax-rs-client-1 => jax-rs-client-1.9}/src/main/java/datadog/trace/instrumentation/jaxrs/v1/JaxRsClientV1Instrumentation.java (100%) rename dd-java-agent/instrumentation/{jax-rs-client/jax-rs-client-1 => jax-rs-client-1.9}/src/test/groovy/JaxRsClientV1Test.groovy (100%) rename dd-java-agent/instrumentation/{jax-rs-client => jax-rs-client-2.0}/connection-error-handling-jersey/connection-error-handling-jersey.gradle (98%) rename dd-java-agent/instrumentation/{jax-rs-client => jax-rs-client-2.0}/connection-error-handling-jersey/src/main/java/datadog/trace/instrumentation/connection_error/jersey/JerseyClientConnectionErrorInstrumentation.java (100%) rename dd-java-agent/instrumentation/{jax-rs-client => jax-rs-client-2.0}/connection-error-handling-resteasy/connection-error-handling-resteasy.gradle (98%) rename dd-java-agent/instrumentation/{jax-rs-client => jax-rs-client-2.0}/connection-error-handling-resteasy/src/main/java/datadog/trace/instrumentation/connection_error/resteasy/ResteasyClientConnectionErrorInstrumentation.java (100%) rename dd-java-agent/instrumentation/{jax-rs-client/jax-rs-client.gradle => jax-rs-client-2.0/jax-rs-client-2.0.gradle} (95%) rename dd-java-agent/instrumentation/{jax-rs-client => jax-rs-client-2.0}/src/main/java/datadog/trace/instrumentation/jaxrs/ClientTracingFeature.java (100%) rename dd-java-agent/instrumentation/{jax-rs-client => jax-rs-client-2.0}/src/main/java/datadog/trace/instrumentation/jaxrs/ClientTracingFilter.java (100%) rename dd-java-agent/instrumentation/{jax-rs-client => jax-rs-client-2.0}/src/main/java/datadog/trace/instrumentation/jaxrs/InjectAdapter.java (100%) rename dd-java-agent/instrumentation/{jax-rs-client => jax-rs-client-2.0}/src/main/java/datadog/trace/instrumentation/jaxrs/JaxRsClientDecorator.java (100%) rename dd-java-agent/instrumentation/{jax-rs-client => jax-rs-client-2.0}/src/main/java/datadog/trace/instrumentation/jaxrs/JaxRsClientInstrumentation.java (100%) rename dd-java-agent/instrumentation/{jax-rs-client => jax-rs-client-2.0}/src/test/groovy/JaxRsClientAsyncTest.groovy (100%) rename dd-java-agent/instrumentation/{jax-rs-client => jax-rs-client-2.0}/src/test/groovy/JaxRsClientTest.groovy (100%) diff --git a/dd-java-agent/instrumentation/jax-rs-client/jax-rs-client-1/jax-rs-client-1.gradle b/dd-java-agent/instrumentation/jax-rs-client-1.9/jax-rs-client-1.9.gradle similarity index 100% rename from dd-java-agent/instrumentation/jax-rs-client/jax-rs-client-1/jax-rs-client-1.gradle rename to dd-java-agent/instrumentation/jax-rs-client-1.9/jax-rs-client-1.9.gradle diff --git a/dd-java-agent/instrumentation/jax-rs-client/jax-rs-client-1/src/main/java/datadog/trace/instrumentation/jaxrs/v1/InjectAdapter.java b/dd-java-agent/instrumentation/jax-rs-client-1.9/src/main/java/datadog/trace/instrumentation/jaxrs/v1/InjectAdapter.java similarity index 100% rename from dd-java-agent/instrumentation/jax-rs-client/jax-rs-client-1/src/main/java/datadog/trace/instrumentation/jaxrs/v1/InjectAdapter.java rename to dd-java-agent/instrumentation/jax-rs-client-1.9/src/main/java/datadog/trace/instrumentation/jaxrs/v1/InjectAdapter.java diff --git a/dd-java-agent/instrumentation/jax-rs-client/jax-rs-client-1/src/main/java/datadog/trace/instrumentation/jaxrs/v1/JaxRsClientV1Decorator.java b/dd-java-agent/instrumentation/jax-rs-client-1.9/src/main/java/datadog/trace/instrumentation/jaxrs/v1/JaxRsClientV1Decorator.java similarity index 100% rename from dd-java-agent/instrumentation/jax-rs-client/jax-rs-client-1/src/main/java/datadog/trace/instrumentation/jaxrs/v1/JaxRsClientV1Decorator.java rename to dd-java-agent/instrumentation/jax-rs-client-1.9/src/main/java/datadog/trace/instrumentation/jaxrs/v1/JaxRsClientV1Decorator.java diff --git a/dd-java-agent/instrumentation/jax-rs-client/jax-rs-client-1/src/main/java/datadog/trace/instrumentation/jaxrs/v1/JaxRsClientV1Instrumentation.java b/dd-java-agent/instrumentation/jax-rs-client-1.9/src/main/java/datadog/trace/instrumentation/jaxrs/v1/JaxRsClientV1Instrumentation.java similarity index 100% rename from dd-java-agent/instrumentation/jax-rs-client/jax-rs-client-1/src/main/java/datadog/trace/instrumentation/jaxrs/v1/JaxRsClientV1Instrumentation.java rename to dd-java-agent/instrumentation/jax-rs-client-1.9/src/main/java/datadog/trace/instrumentation/jaxrs/v1/JaxRsClientV1Instrumentation.java diff --git a/dd-java-agent/instrumentation/jax-rs-client/jax-rs-client-1/src/test/groovy/JaxRsClientV1Test.groovy b/dd-java-agent/instrumentation/jax-rs-client-1.9/src/test/groovy/JaxRsClientV1Test.groovy similarity index 100% rename from dd-java-agent/instrumentation/jax-rs-client/jax-rs-client-1/src/test/groovy/JaxRsClientV1Test.groovy rename to dd-java-agent/instrumentation/jax-rs-client-1.9/src/test/groovy/JaxRsClientV1Test.groovy diff --git a/dd-java-agent/instrumentation/jax-rs-client/connection-error-handling-jersey/connection-error-handling-jersey.gradle b/dd-java-agent/instrumentation/jax-rs-client-2.0/connection-error-handling-jersey/connection-error-handling-jersey.gradle similarity index 98% rename from dd-java-agent/instrumentation/jax-rs-client/connection-error-handling-jersey/connection-error-handling-jersey.gradle rename to dd-java-agent/instrumentation/jax-rs-client-2.0/connection-error-handling-jersey/connection-error-handling-jersey.gradle index 4176977ab8..e52bb3dc2f 100644 --- a/dd-java-agent/instrumentation/jax-rs-client/connection-error-handling-jersey/connection-error-handling-jersey.gradle +++ b/dd-java-agent/instrumentation/jax-rs-client-2.0/connection-error-handling-jersey/connection-error-handling-jersey.gradle @@ -18,5 +18,5 @@ dependencies { compile project(':dd-java-agent:agent-tooling') - compileOnly project(':dd-java-agent:instrumentation:jax-rs-client') + compileOnly project(':dd-java-agent:instrumentation:jax-rs-client-2.0') } diff --git a/dd-java-agent/instrumentation/jax-rs-client/connection-error-handling-jersey/src/main/java/datadog/trace/instrumentation/connection_error/jersey/JerseyClientConnectionErrorInstrumentation.java b/dd-java-agent/instrumentation/jax-rs-client-2.0/connection-error-handling-jersey/src/main/java/datadog/trace/instrumentation/connection_error/jersey/JerseyClientConnectionErrorInstrumentation.java similarity index 100% rename from dd-java-agent/instrumentation/jax-rs-client/connection-error-handling-jersey/src/main/java/datadog/trace/instrumentation/connection_error/jersey/JerseyClientConnectionErrorInstrumentation.java rename to dd-java-agent/instrumentation/jax-rs-client-2.0/connection-error-handling-jersey/src/main/java/datadog/trace/instrumentation/connection_error/jersey/JerseyClientConnectionErrorInstrumentation.java diff --git a/dd-java-agent/instrumentation/jax-rs-client/connection-error-handling-resteasy/connection-error-handling-resteasy.gradle b/dd-java-agent/instrumentation/jax-rs-client-2.0/connection-error-handling-resteasy/connection-error-handling-resteasy.gradle similarity index 98% rename from dd-java-agent/instrumentation/jax-rs-client/connection-error-handling-resteasy/connection-error-handling-resteasy.gradle rename to dd-java-agent/instrumentation/jax-rs-client-2.0/connection-error-handling-resteasy/connection-error-handling-resteasy.gradle index cbcc82521f..d0ff0a908a 100644 --- a/dd-java-agent/instrumentation/jax-rs-client/connection-error-handling-resteasy/connection-error-handling-resteasy.gradle +++ b/dd-java-agent/instrumentation/jax-rs-client-2.0/connection-error-handling-resteasy/connection-error-handling-resteasy.gradle @@ -18,5 +18,5 @@ dependencies { compile project(':dd-java-agent:agent-tooling') - compileOnly project(':dd-java-agent:instrumentation:jax-rs-client') + compileOnly project(':dd-java-agent:instrumentation:jax-rs-client-2.0') } diff --git a/dd-java-agent/instrumentation/jax-rs-client/connection-error-handling-resteasy/src/main/java/datadog/trace/instrumentation/connection_error/resteasy/ResteasyClientConnectionErrorInstrumentation.java b/dd-java-agent/instrumentation/jax-rs-client-2.0/connection-error-handling-resteasy/src/main/java/datadog/trace/instrumentation/connection_error/resteasy/ResteasyClientConnectionErrorInstrumentation.java similarity index 100% rename from dd-java-agent/instrumentation/jax-rs-client/connection-error-handling-resteasy/src/main/java/datadog/trace/instrumentation/connection_error/resteasy/ResteasyClientConnectionErrorInstrumentation.java rename to dd-java-agent/instrumentation/jax-rs-client-2.0/connection-error-handling-resteasy/src/main/java/datadog/trace/instrumentation/connection_error/resteasy/ResteasyClientConnectionErrorInstrumentation.java diff --git a/dd-java-agent/instrumentation/jax-rs-client/jax-rs-client.gradle b/dd-java-agent/instrumentation/jax-rs-client-2.0/jax-rs-client-2.0.gradle similarity index 95% rename from dd-java-agent/instrumentation/jax-rs-client/jax-rs-client.gradle rename to dd-java-agent/instrumentation/jax-rs-client-2.0/jax-rs-client-2.0.gradle index 17017e084b..b862293722 100644 --- a/dd-java-agent/instrumentation/jax-rs-client/jax-rs-client.gradle +++ b/dd-java-agent/instrumentation/jax-rs-client-2.0/jax-rs-client-2.0.gradle @@ -37,8 +37,8 @@ dependencies { testCompile project(':dd-java-agent:testing') testCompile project(':dd-java-agent:instrumentation:java-concurrent') - testCompile project(':dd-java-agent:instrumentation:jax-rs-client:connection-error-handling-jersey') - testCompile project(':dd-java-agent:instrumentation:jax-rs-client:connection-error-handling-resteasy') + testCompile project(':dd-java-agent:instrumentation:jax-rs-client-2.0:connection-error-handling-jersey') + testCompile project(':dd-java-agent:instrumentation:jax-rs-client-2.0:connection-error-handling-resteasy') testCompile group: 'javax.ws.rs', name: 'javax.ws.rs-api', version: '2.0.1' diff --git a/dd-java-agent/instrumentation/jax-rs-client/src/main/java/datadog/trace/instrumentation/jaxrs/ClientTracingFeature.java b/dd-java-agent/instrumentation/jax-rs-client-2.0/src/main/java/datadog/trace/instrumentation/jaxrs/ClientTracingFeature.java similarity index 100% rename from dd-java-agent/instrumentation/jax-rs-client/src/main/java/datadog/trace/instrumentation/jaxrs/ClientTracingFeature.java rename to dd-java-agent/instrumentation/jax-rs-client-2.0/src/main/java/datadog/trace/instrumentation/jaxrs/ClientTracingFeature.java diff --git a/dd-java-agent/instrumentation/jax-rs-client/src/main/java/datadog/trace/instrumentation/jaxrs/ClientTracingFilter.java b/dd-java-agent/instrumentation/jax-rs-client-2.0/src/main/java/datadog/trace/instrumentation/jaxrs/ClientTracingFilter.java similarity index 100% rename from dd-java-agent/instrumentation/jax-rs-client/src/main/java/datadog/trace/instrumentation/jaxrs/ClientTracingFilter.java rename to dd-java-agent/instrumentation/jax-rs-client-2.0/src/main/java/datadog/trace/instrumentation/jaxrs/ClientTracingFilter.java diff --git a/dd-java-agent/instrumentation/jax-rs-client/src/main/java/datadog/trace/instrumentation/jaxrs/InjectAdapter.java b/dd-java-agent/instrumentation/jax-rs-client-2.0/src/main/java/datadog/trace/instrumentation/jaxrs/InjectAdapter.java similarity index 100% rename from dd-java-agent/instrumentation/jax-rs-client/src/main/java/datadog/trace/instrumentation/jaxrs/InjectAdapter.java rename to dd-java-agent/instrumentation/jax-rs-client-2.0/src/main/java/datadog/trace/instrumentation/jaxrs/InjectAdapter.java diff --git a/dd-java-agent/instrumentation/jax-rs-client/src/main/java/datadog/trace/instrumentation/jaxrs/JaxRsClientDecorator.java b/dd-java-agent/instrumentation/jax-rs-client-2.0/src/main/java/datadog/trace/instrumentation/jaxrs/JaxRsClientDecorator.java similarity index 100% rename from dd-java-agent/instrumentation/jax-rs-client/src/main/java/datadog/trace/instrumentation/jaxrs/JaxRsClientDecorator.java rename to dd-java-agent/instrumentation/jax-rs-client-2.0/src/main/java/datadog/trace/instrumentation/jaxrs/JaxRsClientDecorator.java diff --git a/dd-java-agent/instrumentation/jax-rs-client/src/main/java/datadog/trace/instrumentation/jaxrs/JaxRsClientInstrumentation.java b/dd-java-agent/instrumentation/jax-rs-client-2.0/src/main/java/datadog/trace/instrumentation/jaxrs/JaxRsClientInstrumentation.java similarity index 100% rename from dd-java-agent/instrumentation/jax-rs-client/src/main/java/datadog/trace/instrumentation/jaxrs/JaxRsClientInstrumentation.java rename to dd-java-agent/instrumentation/jax-rs-client-2.0/src/main/java/datadog/trace/instrumentation/jaxrs/JaxRsClientInstrumentation.java diff --git a/dd-java-agent/instrumentation/jax-rs-client/src/test/groovy/JaxRsClientAsyncTest.groovy b/dd-java-agent/instrumentation/jax-rs-client-2.0/src/test/groovy/JaxRsClientAsyncTest.groovy similarity index 100% rename from dd-java-agent/instrumentation/jax-rs-client/src/test/groovy/JaxRsClientAsyncTest.groovy rename to dd-java-agent/instrumentation/jax-rs-client-2.0/src/test/groovy/JaxRsClientAsyncTest.groovy diff --git a/dd-java-agent/instrumentation/jax-rs-client/src/test/groovy/JaxRsClientTest.groovy b/dd-java-agent/instrumentation/jax-rs-client-2.0/src/test/groovy/JaxRsClientTest.groovy similarity index 100% rename from dd-java-agent/instrumentation/jax-rs-client/src/test/groovy/JaxRsClientTest.groovy rename to dd-java-agent/instrumentation/jax-rs-client-2.0/src/test/groovy/JaxRsClientTest.groovy diff --git a/settings.gradle b/settings.gradle index fdd496b6d2..dcd99258c7 100644 --- a/settings.gradle +++ b/settings.gradle @@ -49,10 +49,10 @@ include ':dd-java-agent:instrumentation:hibernate:core-4.3' include ':dd-java-agent:instrumentation:http-url-connection' include ':dd-java-agent:instrumentation:hystrix-1.4' include ':dd-java-agent:instrumentation:jax-rs-annotations' -include ':dd-java-agent:instrumentation:jax-rs-client' -include ':dd-java-agent:instrumentation:jax-rs-client:connection-error-handling-jersey' -include ':dd-java-agent:instrumentation:jax-rs-client:connection-error-handling-resteasy' -include ':dd-java-agent:instrumentation:jax-rs-client:jax-rs-client-1' +include ':dd-java-agent:instrumentation:jax-rs-client-1.9' +include ':dd-java-agent:instrumentation:jax-rs-client-2.0' +include ':dd-java-agent:instrumentation:jax-rs-client-2.0:connection-error-handling-jersey' +include ':dd-java-agent:instrumentation:jax-rs-client-2.0:connection-error-handling-resteasy' include ':dd-java-agent:instrumentation:java-concurrent' include ':dd-java-agent:instrumentation:java-concurrent:kotlin-testing' include ':dd-java-agent:instrumentation:java-concurrent:scala-testing' From 5624cef4af2190912a4abef960db0cd098eb3abc Mon Sep 17 00:00:00 2001 From: Tyler Benson Date: Wed, 10 Jul 2019 14:08:50 -0600 Subject: [PATCH 7/7] fix check --- .../jax-rs-client-1.9/src/test/groovy/JaxRsClientV1Test.groovy | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dd-java-agent/instrumentation/jax-rs-client-1.9/src/test/groovy/JaxRsClientV1Test.groovy b/dd-java-agent/instrumentation/jax-rs-client-1.9/src/test/groovy/JaxRsClientV1Test.groovy index b4070a3083..ac24e76c2a 100644 --- a/dd-java-agent/instrumentation/jax-rs-client-1.9/src/test/groovy/JaxRsClientV1Test.groovy +++ b/dd-java-agent/instrumentation/jax-rs-client-1.9/src/test/groovy/JaxRsClientV1Test.groovy @@ -24,7 +24,7 @@ class JaxRsClientV1Test extends HttpClientTest { def resource = client.resource(uri).requestBuilder headers.each { resource.header(it.key, it.value) } def body = BODY_METHODS.contains(method) ? "" : null - ClientResponse response = resource.method(method, ClientResponse.class, body) + ClientResponse response = resource.method(method, ClientResponse, body) callback?.call() return response.status