Use HelperInjector to include instrumentation helper classes.
Move instrumentation helpers out of helpers subproject and into the appropriate instrumentation module.
This commit is contained in:
parent
876ea794e9
commit
0abf3f342d
|
@ -21,39 +21,17 @@ dependencies {
|
||||||
compile project(':dd-java-agent:tooling')
|
compile project(':dd-java-agent:tooling')
|
||||||
compile project(':dd-trace-annotations')
|
compile project(':dd-trace-annotations')
|
||||||
|
|
||||||
compile(project(':dd-java-agent:integrations:apache-httpclient-4.3')) {
|
compile(project(':dd-java-agent:integrations:apache-httpclient-4.3'))
|
||||||
transitive = false
|
compile(project(':dd-java-agent:integrations:aws-sdk'))
|
||||||
}
|
compile(project(':dd-java-agent:integrations:datastax-cassandra-3.2'))
|
||||||
compile(project(':dd-java-agent:integrations:aws-sdk')) {
|
compile(project(':dd-java-agent:integrations:jms-1'))
|
||||||
transitive = false
|
compile(project(':dd-java-agent:integrations:jms-2'))
|
||||||
}
|
compile(project(':dd-java-agent:integrations:mongo-3.1'))
|
||||||
compile(project(':dd-java-agent:integrations:datastax-cassandra-3.2')) {
|
compile(project(':dd-java-agent:integrations:mongo-async-3.3'))
|
||||||
transitive = false
|
compile(project(':dd-java-agent:integrations:okhttp-3'))
|
||||||
}
|
compile project(':dd-java-agent:integrations:servlet-2')
|
||||||
compile(project(':dd-java-agent:integrations:jms-1')) {
|
compile project(':dd-java-agent:integrations:servlet-3')
|
||||||
transitive = false
|
compile(project(':dd-java-agent:integrations:spring-web'))
|
||||||
}
|
|
||||||
compile(project(':dd-java-agent:integrations:jms-2')) {
|
|
||||||
transitive = false
|
|
||||||
}
|
|
||||||
compile(project(':dd-java-agent:integrations:mongo-3.1')) {
|
|
||||||
transitive = false
|
|
||||||
}
|
|
||||||
compile(project(':dd-java-agent:integrations:mongo-async-3.3')) {
|
|
||||||
transitive = false
|
|
||||||
}
|
|
||||||
compile(project(':dd-java-agent:integrations:okhttp-3')) {
|
|
||||||
transitive = false
|
|
||||||
}
|
|
||||||
compile(project(':dd-java-agent:integrations:servlet-2')) {
|
|
||||||
transitive = false
|
|
||||||
}
|
|
||||||
compile(project(':dd-java-agent:integrations:servlet-3')) {
|
|
||||||
transitive = false
|
|
||||||
}
|
|
||||||
compile(project(':dd-java-agent:integrations:spring-web')) {
|
|
||||||
transitive = false
|
|
||||||
}
|
|
||||||
|
|
||||||
compile deps.bytebuddy
|
compile deps.bytebuddy
|
||||||
|
|
||||||
|
@ -64,10 +42,6 @@ dependencies {
|
||||||
// ^ Generally a bad idea for libraries, but we're shadowing.
|
// ^ Generally a bad idea for libraries, but we're shadowing.
|
||||||
|
|
||||||
testCompile deps.opentracingMock
|
testCompile deps.opentracingMock
|
||||||
|
|
||||||
testCompile(project(path: ':dd-java-agent:integrations:helpers')) {
|
|
||||||
transitive = false
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
project(':dd-java-agent:integrations:helpers').afterEvaluate { helperProject ->
|
project(':dd-java-agent:integrations:helpers').afterEvaluate { helperProject ->
|
||||||
|
|
|
@ -25,10 +25,9 @@ versionScan {
|
||||||
apply from: "${rootDir}/gradle/java.gradle"
|
apply from: "${rootDir}/gradle/java.gradle"
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
compile group: 'org.apache.httpcomponents', name: 'httpclient', version: '4.3'
|
compileOnly group: 'org.apache.httpcomponents', name: 'httpclient', version: '4.3'
|
||||||
|
|
||||||
compile project(':dd-trace')
|
compile project(':dd-trace')
|
||||||
compile project(':dd-java-agent:integrations:helpers')
|
|
||||||
compile project(':dd-java-agent:tooling')
|
compile project(':dd-java-agent:tooling')
|
||||||
|
|
||||||
compile deps.bytebuddy
|
compile deps.bytebuddy
|
||||||
|
|
|
@ -3,9 +3,9 @@ package dd.inst.apachehttpclient;
|
||||||
import static dd.trace.ClassLoaderMatcher.classLoaderHasClasses;
|
import static dd.trace.ClassLoaderMatcher.classLoaderHasClasses;
|
||||||
import static net.bytebuddy.matcher.ElementMatchers.*;
|
import static net.bytebuddy.matcher.ElementMatchers.*;
|
||||||
|
|
||||||
import com.datadoghq.agent.integration.DDTracingClientExec;
|
|
||||||
import com.google.auto.service.AutoService;
|
import com.google.auto.service.AutoService;
|
||||||
import dd.trace.DDAdvice;
|
import dd.trace.DDAdvice;
|
||||||
|
import dd.trace.HelperInjector;
|
||||||
import dd.trace.Instrumenter;
|
import dd.trace.Instrumenter;
|
||||||
import io.opentracing.util.GlobalTracer;
|
import io.opentracing.util.GlobalTracer;
|
||||||
import net.bytebuddy.agent.builder.AgentBuilder;
|
import net.bytebuddy.agent.builder.AgentBuilder;
|
||||||
|
@ -31,6 +31,7 @@ public class ApacheHttpClientInstrumentation implements Instrumenter {
|
||||||
"org.apache.http.client.protocol.HttpClientContext",
|
"org.apache.http.client.protocol.HttpClientContext",
|
||||||
"org.apache.http.conn.routing.HttpRoute",
|
"org.apache.http.conn.routing.HttpRoute",
|
||||||
"org.apache.http.impl.execchain.ClientExecChain"))
|
"org.apache.http.impl.execchain.ClientExecChain"))
|
||||||
|
.transform(new HelperInjector("dd.inst.apachehttpclient.DDTracingClientExec"))
|
||||||
.transform(
|
.transform(
|
||||||
DDAdvice.create()
|
DDAdvice.create()
|
||||||
.advice(
|
.advice(
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
package com.datadoghq.agent.integration;
|
package dd.inst.apachehttpclient;
|
||||||
|
|
||||||
import io.opentracing.ActiveSpan;
|
import io.opentracing.ActiveSpan;
|
||||||
import io.opentracing.Tracer;
|
import io.opentracing.Tracer;
|
|
@ -17,6 +17,9 @@ apply from: "${rootDir}/gradle/java.gradle"
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
compileOnly group: 'com.amazonaws', name: 'aws-java-sdk-core', version: '1.11.119'
|
compileOnly group: 'com.amazonaws', name: 'aws-java-sdk-core', version: '1.11.119'
|
||||||
|
compile('io.opentracing.contrib:opentracing-aws-sdk:0.0.2') {
|
||||||
|
transitive = false
|
||||||
|
}
|
||||||
|
|
||||||
compile project(':dd-trace')
|
compile project(':dd-trace')
|
||||||
compile project(':dd-java-agent:tooling')
|
compile project(':dd-java-agent:tooling')
|
||||||
|
@ -24,6 +27,4 @@ dependencies {
|
||||||
compile deps.bytebuddy
|
compile deps.bytebuddy
|
||||||
compile deps.opentracing
|
compile deps.opentracing
|
||||||
compile deps.autoservice
|
compile deps.autoservice
|
||||||
|
|
||||||
compile group: 'io.opentracing.contrib', name: 'opentracing-aws-sdk', version: '0.0.2'
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -9,6 +9,7 @@ import com.amazonaws.client.builder.AwsClientBuilder;
|
||||||
import com.amazonaws.handlers.RequestHandler2;
|
import com.amazonaws.handlers.RequestHandler2;
|
||||||
import com.google.auto.service.AutoService;
|
import com.google.auto.service.AutoService;
|
||||||
import dd.trace.DDAdvice;
|
import dd.trace.DDAdvice;
|
||||||
|
import dd.trace.HelperInjector;
|
||||||
import dd.trace.Instrumenter;
|
import dd.trace.Instrumenter;
|
||||||
import io.opentracing.contrib.aws.TracingRequestHandler;
|
import io.opentracing.contrib.aws.TracingRequestHandler;
|
||||||
import io.opentracing.util.GlobalTracer;
|
import io.opentracing.util.GlobalTracer;
|
||||||
|
@ -29,6 +30,10 @@ public final class AWSClientInstrumentation implements Instrumenter {
|
||||||
classLoaderHasClasses(
|
classLoaderHasClasses(
|
||||||
"com.amazonaws.http.client.HttpClientFactory",
|
"com.amazonaws.http.client.HttpClientFactory",
|
||||||
"com.amazonaws.http.apache.utils.ApacheUtils"))
|
"com.amazonaws.http.apache.utils.ApacheUtils"))
|
||||||
|
.transform(
|
||||||
|
new HelperInjector(
|
||||||
|
"io.opentracing.contrib.aws.TracingRequestHandler",
|
||||||
|
"io.opentracing.contrib.aws.SpanDecorator"))
|
||||||
.transform(
|
.transform(
|
||||||
DDAdvice.create()
|
DDAdvice.create()
|
||||||
.advice(
|
.advice(
|
||||||
|
|
|
@ -32,11 +32,12 @@ versionScan {
|
||||||
apply from: "${rootDir}/gradle/java.gradle"
|
apply from: "${rootDir}/gradle/java.gradle"
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
compile group: 'com.datastax.cassandra', name: 'cassandra-driver-core', version: '3.2.0'
|
compileOnly group: 'com.datastax.cassandra', name: 'cassandra-driver-core', version: '3.2.0'
|
||||||
|
compile('io.opentracing.contrib:opentracing-cassandra-driver:0.0.2') {
|
||||||
|
transitive = false
|
||||||
|
}
|
||||||
|
|
||||||
compile project(':dd-trace')
|
compile project(':dd-trace')
|
||||||
// include helpers to pick up opentracing-cassandra-driver helper
|
|
||||||
compile project(':dd-java-agent:integrations:helpers')
|
|
||||||
compile project(':dd-java-agent:tooling')
|
compile project(':dd-java-agent:tooling')
|
||||||
|
|
||||||
compile deps.bytebuddy
|
compile deps.bytebuddy
|
||||||
|
|
|
@ -6,6 +6,7 @@ import static net.bytebuddy.matcher.ElementMatchers.*;
|
||||||
import com.datastax.driver.core.Session;
|
import com.datastax.driver.core.Session;
|
||||||
import com.google.auto.service.AutoService;
|
import com.google.auto.service.AutoService;
|
||||||
import dd.trace.DDAdvice;
|
import dd.trace.DDAdvice;
|
||||||
|
import dd.trace.HelperInjector;
|
||||||
import dd.trace.Instrumenter;
|
import dd.trace.Instrumenter;
|
||||||
import io.opentracing.Tracer;
|
import io.opentracing.Tracer;
|
||||||
import io.opentracing.util.GlobalTracer;
|
import io.opentracing.util.GlobalTracer;
|
||||||
|
@ -35,6 +36,13 @@ public class CassandraClientInstrumentation implements Instrumenter {
|
||||||
"com.google.common.base.Function",
|
"com.google.common.base.Function",
|
||||||
"com.google.common.util.concurrent.Futures",
|
"com.google.common.util.concurrent.Futures",
|
||||||
"com.google.common.util.concurrent.ListenableFuture"))
|
"com.google.common.util.concurrent.ListenableFuture"))
|
||||||
|
.transform(
|
||||||
|
new HelperInjector(
|
||||||
|
"io.opentracing.contrib.cassandra.TracingSession",
|
||||||
|
"io.opentracing.contrib.cassandra.TracingSession$1",
|
||||||
|
"io.opentracing.contrib.cassandra.TracingSession$2",
|
||||||
|
"io.opentracing.contrib.cassandra.TracingCluster",
|
||||||
|
"io.opentracing.contrib.cassandra.TracingCluster$1"))
|
||||||
.transform(
|
.transform(
|
||||||
DDAdvice.create()
|
DDAdvice.create()
|
||||||
.advice(
|
.advice(
|
||||||
|
|
|
@ -11,11 +11,6 @@ dependencies {
|
||||||
compileOnly project(':dd-trace-annotations')
|
compileOnly project(':dd-trace-annotations')
|
||||||
compileOnly deps.slf4j
|
compileOnly deps.slf4j
|
||||||
|
|
||||||
compile group: 'io.opentracing.contrib', name: 'opentracing-web-servlet-filter', version: '0.0.9'
|
|
||||||
compile group: 'io.opentracing.contrib', name: 'opentracing-okhttp3', version: '0.0.5'
|
|
||||||
compile group: 'io.opentracing.contrib', name: 'opentracing-aws-sdk', version: '0.0.2'
|
|
||||||
compile group: 'io.opentracing.contrib', name: 'opentracing-cassandra-driver', version: '0.0.2'
|
|
||||||
|
|
||||||
compileOnly group: 'org.mongodb', name: 'mongo-java-driver', version: '3.4.2'
|
compileOnly group: 'org.mongodb', name: 'mongo-java-driver', version: '3.4.2'
|
||||||
compileOnly group: 'org.mongodb', name: 'mongodb-driver-async', version: '3.4.2'
|
compileOnly group: 'org.mongodb', name: 'mongodb-driver-async', version: '3.4.2'
|
||||||
compileOnly group: 'com.squareup.okhttp3', name: 'okhttp', version: '3.6.0'
|
compileOnly group: 'com.squareup.okhttp3', name: 'okhttp', version: '3.6.0'
|
||||||
|
|
|
@ -15,7 +15,6 @@ apply from: "${rootDir}/gradle/java.gradle"
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
compileOnly group: 'javax.jms', name: 'jms-api', version: '1.1-rev-1'
|
compileOnly group: 'javax.jms', name: 'jms-api', version: '1.1-rev-1'
|
||||||
compileOnly project(':dd-java-agent:integrations:helpers')
|
|
||||||
|
|
||||||
compile deps.bytebuddy
|
compile deps.bytebuddy
|
||||||
compile deps.opentracing
|
compile deps.opentracing
|
||||||
|
@ -24,7 +23,6 @@ dependencies {
|
||||||
compile project(':dd-trace')
|
compile project(':dd-trace')
|
||||||
compile project(':dd-java-agent:tooling')
|
compile project(':dd-java-agent:tooling')
|
||||||
testCompile project(':dd-java-agent:tooling').sourceSets.test.output
|
testCompile project(':dd-java-agent:tooling').sourceSets.test.output
|
||||||
testCompile project(':dd-java-agent:integrations:helpers')
|
|
||||||
|
|
||||||
testCompile group: 'org.apache.activemq.tooling', name: 'activemq-junit', version: '5.14.5'
|
testCompile group: 'org.apache.activemq.tooling', name: 'activemq-junit', version: '5.14.5'
|
||||||
testCompile group: 'org.apache.activemq', name: 'activemq-pool', version: '5.14.5'
|
testCompile group: 'org.apache.activemq', name: 'activemq-pool', version: '5.14.5'
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
package com.datadoghq.agent.integration;
|
package dd.inst.jms.util;
|
||||||
|
|
||||||
import javax.jms.Destination;
|
import javax.jms.Destination;
|
||||||
import javax.jms.Message;
|
import javax.jms.Message;
|
|
@ -1,4 +1,4 @@
|
||||||
package com.datadoghq.agent.integration;
|
package dd.inst.jms.util;
|
||||||
|
|
||||||
import io.opentracing.propagation.TextMap;
|
import io.opentracing.propagation.TextMap;
|
||||||
import java.util.Enumeration;
|
import java.util.Enumeration;
|
||||||
|
@ -21,7 +21,7 @@ public class MessagePropertyTextMap implements TextMap {
|
||||||
public Iterator<Map.Entry<String, String>> iterator() {
|
public Iterator<Map.Entry<String, String>> iterator() {
|
||||||
final Map<String, String> map = new HashMap<>();
|
final Map<String, String> map = new HashMap<>();
|
||||||
try {
|
try {
|
||||||
final Enumeration enumeration = message.getPropertyNames();
|
final Enumeration<?> enumeration = message.getPropertyNames();
|
||||||
if (enumeration != null) {
|
if (enumeration != null) {
|
||||||
while (enumeration.hasMoreElements()) {
|
while (enumeration.hasMoreElements()) {
|
||||||
final String key = (String) enumeration.nextElement();
|
final String key = (String) enumeration.nextElement();
|
|
@ -1,6 +1,6 @@
|
||||||
package dd.inst.jms1;
|
package dd.inst.jms1;
|
||||||
|
|
||||||
import static com.datadoghq.agent.integration.JmsUtil.toResourceName;
|
import static dd.inst.jms.util.JmsUtil.toResourceName;
|
||||||
import static dd.trace.ClassLoaderMatcher.classLoaderHasClasses;
|
import static dd.trace.ClassLoaderMatcher.classLoaderHasClasses;
|
||||||
import static net.bytebuddy.matcher.ElementMatchers.hasSuperType;
|
import static net.bytebuddy.matcher.ElementMatchers.hasSuperType;
|
||||||
import static net.bytebuddy.matcher.ElementMatchers.isInterface;
|
import static net.bytebuddy.matcher.ElementMatchers.isInterface;
|
||||||
|
@ -9,10 +9,11 @@ import static net.bytebuddy.matcher.ElementMatchers.named;
|
||||||
import static net.bytebuddy.matcher.ElementMatchers.not;
|
import static net.bytebuddy.matcher.ElementMatchers.not;
|
||||||
import static net.bytebuddy.matcher.ElementMatchers.takesArguments;
|
import static net.bytebuddy.matcher.ElementMatchers.takesArguments;
|
||||||
|
|
||||||
import com.datadoghq.agent.integration.MessagePropertyTextMap;
|
|
||||||
import com.datadoghq.trace.DDTags;
|
import com.datadoghq.trace.DDTags;
|
||||||
import com.google.auto.service.AutoService;
|
import com.google.auto.service.AutoService;
|
||||||
|
import dd.inst.jms.util.MessagePropertyTextMap;
|
||||||
import dd.trace.DDAdvice;
|
import dd.trace.DDAdvice;
|
||||||
|
import dd.trace.HelperInjector;
|
||||||
import dd.trace.Instrumenter;
|
import dd.trace.Instrumenter;
|
||||||
import io.opentracing.ActiveSpan;
|
import io.opentracing.ActiveSpan;
|
||||||
import io.opentracing.SpanContext;
|
import io.opentracing.SpanContext;
|
||||||
|
@ -28,6 +29,8 @@ import net.bytebuddy.asm.Advice;
|
||||||
|
|
||||||
@AutoService(Instrumenter.class)
|
@AutoService(Instrumenter.class)
|
||||||
public final class JMS1MessageConsumerInstrumentation implements Instrumenter {
|
public final class JMS1MessageConsumerInstrumentation implements Instrumenter {
|
||||||
|
public static final HelperInjector JMS1_HELPER_INJECTOR =
|
||||||
|
new HelperInjector("dd.inst.jms.util.JmsUtil", "dd.inst.jms.util.MessagePropertyTextMap");
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public AgentBuilder instrument(final AgentBuilder agentBuilder) {
|
public AgentBuilder instrument(final AgentBuilder agentBuilder) {
|
||||||
|
@ -35,6 +38,7 @@ public final class JMS1MessageConsumerInstrumentation implements Instrumenter {
|
||||||
.type(
|
.type(
|
||||||
not(isInterface()).and(hasSuperType(named("javax.jms.MessageConsumer"))),
|
not(isInterface()).and(hasSuperType(named("javax.jms.MessageConsumer"))),
|
||||||
not(classLoaderHasClasses("javax.jms.JMSContext", "javax.jms.CompletionListener")))
|
not(classLoaderHasClasses("javax.jms.JMSContext", "javax.jms.CompletionListener")))
|
||||||
|
.transform(JMS1_HELPER_INJECTOR)
|
||||||
.transform(
|
.transform(
|
||||||
DDAdvice.create()
|
DDAdvice.create()
|
||||||
.advice(
|
.advice(
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
package dd.inst.jms1;
|
package dd.inst.jms1;
|
||||||
|
|
||||||
import static com.datadoghq.agent.integration.JmsUtil.toResourceName;
|
import static dd.inst.jms.util.JmsUtil.toResourceName;
|
||||||
import static dd.trace.ClassLoaderMatcher.classLoaderHasClasses;
|
import static dd.trace.ClassLoaderMatcher.classLoaderHasClasses;
|
||||||
import static net.bytebuddy.matcher.ElementMatchers.hasSuperType;
|
import static net.bytebuddy.matcher.ElementMatchers.hasSuperType;
|
||||||
import static net.bytebuddy.matcher.ElementMatchers.isInterface;
|
import static net.bytebuddy.matcher.ElementMatchers.isInterface;
|
||||||
|
@ -9,9 +9,9 @@ import static net.bytebuddy.matcher.ElementMatchers.named;
|
||||||
import static net.bytebuddy.matcher.ElementMatchers.not;
|
import static net.bytebuddy.matcher.ElementMatchers.not;
|
||||||
import static net.bytebuddy.matcher.ElementMatchers.takesArgument;
|
import static net.bytebuddy.matcher.ElementMatchers.takesArgument;
|
||||||
|
|
||||||
import com.datadoghq.agent.integration.MessagePropertyTextMap;
|
|
||||||
import com.datadoghq.trace.DDTags;
|
import com.datadoghq.trace.DDTags;
|
||||||
import com.google.auto.service.AutoService;
|
import com.google.auto.service.AutoService;
|
||||||
|
import dd.inst.jms.util.MessagePropertyTextMap;
|
||||||
import dd.trace.DDAdvice;
|
import dd.trace.DDAdvice;
|
||||||
import dd.trace.Instrumenter;
|
import dd.trace.Instrumenter;
|
||||||
import io.opentracing.ActiveSpan;
|
import io.opentracing.ActiveSpan;
|
||||||
|
@ -34,6 +34,7 @@ public final class JMS1MessageListenerInstrumentation implements Instrumenter {
|
||||||
.type(
|
.type(
|
||||||
not(isInterface()).and(hasSuperType(named("javax.jms.MessageListener"))),
|
not(isInterface()).and(hasSuperType(named("javax.jms.MessageListener"))),
|
||||||
not(classLoaderHasClasses("javax.jms.JMSContext", "javax.jms.CompletionListener")))
|
not(classLoaderHasClasses("javax.jms.JMSContext", "javax.jms.CompletionListener")))
|
||||||
|
.transform(JMS1MessageConsumerInstrumentation.JMS1_HELPER_INJECTOR)
|
||||||
.transform(
|
.transform(
|
||||||
DDAdvice.create()
|
DDAdvice.create()
|
||||||
.advice(
|
.advice(
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
package dd.inst.jms1;
|
package dd.inst.jms1;
|
||||||
|
|
||||||
import static com.datadoghq.agent.integration.JmsUtil.toResourceName;
|
import static dd.inst.jms.util.JmsUtil.toResourceName;
|
||||||
import static dd.trace.ClassLoaderMatcher.classLoaderHasClasses;
|
import static dd.trace.ClassLoaderMatcher.classLoaderHasClasses;
|
||||||
import static net.bytebuddy.matcher.ElementMatchers.hasSuperType;
|
import static net.bytebuddy.matcher.ElementMatchers.hasSuperType;
|
||||||
import static net.bytebuddy.matcher.ElementMatchers.isInterface;
|
import static net.bytebuddy.matcher.ElementMatchers.isInterface;
|
||||||
|
@ -9,9 +9,9 @@ import static net.bytebuddy.matcher.ElementMatchers.named;
|
||||||
import static net.bytebuddy.matcher.ElementMatchers.not;
|
import static net.bytebuddy.matcher.ElementMatchers.not;
|
||||||
import static net.bytebuddy.matcher.ElementMatchers.takesArgument;
|
import static net.bytebuddy.matcher.ElementMatchers.takesArgument;
|
||||||
|
|
||||||
import com.datadoghq.agent.integration.MessagePropertyTextMap;
|
|
||||||
import com.datadoghq.trace.DDTags;
|
import com.datadoghq.trace.DDTags;
|
||||||
import com.google.auto.service.AutoService;
|
import com.google.auto.service.AutoService;
|
||||||
|
import dd.inst.jms.util.MessagePropertyTextMap;
|
||||||
import dd.trace.DDAdvice;
|
import dd.trace.DDAdvice;
|
||||||
import dd.trace.Instrumenter;
|
import dd.trace.Instrumenter;
|
||||||
import io.opentracing.ActiveSpan;
|
import io.opentracing.ActiveSpan;
|
||||||
|
@ -35,6 +35,7 @@ public final class JMS1MessageProducerInstrumentation implements Instrumenter {
|
||||||
.type(
|
.type(
|
||||||
not(isInterface()).and(hasSuperType(named("javax.jms.MessageProducer"))),
|
not(isInterface()).and(hasSuperType(named("javax.jms.MessageProducer"))),
|
||||||
not(classLoaderHasClasses("javax.jms.JMSContext", "javax.jms.CompletionListener")))
|
not(classLoaderHasClasses("javax.jms.JMSContext", "javax.jms.CompletionListener")))
|
||||||
|
.transform(JMS1MessageConsumerInstrumentation.JMS1_HELPER_INJECTOR)
|
||||||
.transform(
|
.transform(
|
||||||
DDAdvice.create()
|
DDAdvice.create()
|
||||||
.advice(
|
.advice(
|
||||||
|
|
|
@ -14,8 +14,11 @@ versionScan {
|
||||||
apply from: "${rootDir}/gradle/java.gradle"
|
apply from: "${rootDir}/gradle/java.gradle"
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
|
// use jms1 helpers
|
||||||
|
compile(project(':dd-java-agent:integrations:jms-1')) {
|
||||||
|
transitive = false
|
||||||
|
}
|
||||||
compileOnly group: 'javax.jms', name: 'javax.jms-api', version: '2.0.1'
|
compileOnly group: 'javax.jms', name: 'javax.jms-api', version: '2.0.1'
|
||||||
compileOnly project(':dd-java-agent:integrations:helpers')
|
|
||||||
|
|
||||||
compile deps.bytebuddy
|
compile deps.bytebuddy
|
||||||
compile deps.opentracing
|
compile deps.opentracing
|
||||||
|
@ -24,7 +27,6 @@ dependencies {
|
||||||
compile project(':dd-trace')
|
compile project(':dd-trace')
|
||||||
compile project(':dd-java-agent:tooling')
|
compile project(':dd-java-agent:tooling')
|
||||||
testCompile project(':dd-java-agent:tooling').sourceSets.test.output
|
testCompile project(':dd-java-agent:tooling').sourceSets.test.output
|
||||||
testCompile project(':dd-java-agent:integrations:helpers')
|
|
||||||
|
|
||||||
testCompile group: 'org.hornetq', name: 'hornetq-jms-client', version: '2.4.7.Final'
|
testCompile group: 'org.hornetq', name: 'hornetq-jms-client', version: '2.4.7.Final'
|
||||||
testCompile group: 'org.hornetq', name: 'hornetq-jms-server', version: '2.4.7.Final'
|
testCompile group: 'org.hornetq', name: 'hornetq-jms-server', version: '2.4.7.Final'
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
package dd.inst.jms2;
|
package dd.inst.jms2;
|
||||||
|
|
||||||
import static com.datadoghq.agent.integration.JmsUtil.toResourceName;
|
import static dd.inst.jms.util.JmsUtil.toResourceName;
|
||||||
import static dd.trace.ClassLoaderMatcher.classLoaderHasClasses;
|
import static dd.trace.ClassLoaderMatcher.classLoaderHasClasses;
|
||||||
import static net.bytebuddy.matcher.ElementMatchers.hasSuperType;
|
import static net.bytebuddy.matcher.ElementMatchers.hasSuperType;
|
||||||
import static net.bytebuddy.matcher.ElementMatchers.isInterface;
|
import static net.bytebuddy.matcher.ElementMatchers.isInterface;
|
||||||
|
@ -9,10 +9,11 @@ import static net.bytebuddy.matcher.ElementMatchers.named;
|
||||||
import static net.bytebuddy.matcher.ElementMatchers.not;
|
import static net.bytebuddy.matcher.ElementMatchers.not;
|
||||||
import static net.bytebuddy.matcher.ElementMatchers.takesArguments;
|
import static net.bytebuddy.matcher.ElementMatchers.takesArguments;
|
||||||
|
|
||||||
import com.datadoghq.agent.integration.MessagePropertyTextMap;
|
|
||||||
import com.datadoghq.trace.DDTags;
|
import com.datadoghq.trace.DDTags;
|
||||||
import com.google.auto.service.AutoService;
|
import com.google.auto.service.AutoService;
|
||||||
|
import dd.inst.jms.util.MessagePropertyTextMap;
|
||||||
import dd.trace.DDAdvice;
|
import dd.trace.DDAdvice;
|
||||||
|
import dd.trace.HelperInjector;
|
||||||
import dd.trace.Instrumenter;
|
import dd.trace.Instrumenter;
|
||||||
import io.opentracing.ActiveSpan;
|
import io.opentracing.ActiveSpan;
|
||||||
import io.opentracing.SpanContext;
|
import io.opentracing.SpanContext;
|
||||||
|
@ -28,6 +29,8 @@ import net.bytebuddy.asm.Advice;
|
||||||
|
|
||||||
@AutoService(Instrumenter.class)
|
@AutoService(Instrumenter.class)
|
||||||
public final class JMS2MessageConsumerInstrumentation implements Instrumenter {
|
public final class JMS2MessageConsumerInstrumentation implements Instrumenter {
|
||||||
|
public static final HelperInjector JMS2_HELPER_INJECTOR =
|
||||||
|
new HelperInjector("dd.inst.jms.util.JmsUtil", "dd.inst.jms.util.MessagePropertyTextMap");
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public AgentBuilder instrument(final AgentBuilder agentBuilder) {
|
public AgentBuilder instrument(final AgentBuilder agentBuilder) {
|
||||||
|
@ -35,6 +38,7 @@ public final class JMS2MessageConsumerInstrumentation implements Instrumenter {
|
||||||
.type(
|
.type(
|
||||||
not(isInterface()).and(hasSuperType(named("javax.jms.MessageConsumer"))),
|
not(isInterface()).and(hasSuperType(named("javax.jms.MessageConsumer"))),
|
||||||
classLoaderHasClasses("javax.jms.JMSContext", "javax.jms.CompletionListener"))
|
classLoaderHasClasses("javax.jms.JMSContext", "javax.jms.CompletionListener"))
|
||||||
|
.transform(JMS2_HELPER_INJECTOR)
|
||||||
.transform(
|
.transform(
|
||||||
DDAdvice.create()
|
DDAdvice.create()
|
||||||
.advice(
|
.advice(
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
package dd.inst.jms2;
|
package dd.inst.jms2;
|
||||||
|
|
||||||
import static com.datadoghq.agent.integration.JmsUtil.toResourceName;
|
import static dd.inst.jms.util.JmsUtil.toResourceName;
|
||||||
import static dd.trace.ClassLoaderMatcher.classLoaderHasClasses;
|
import static dd.trace.ClassLoaderMatcher.classLoaderHasClasses;
|
||||||
import static net.bytebuddy.matcher.ElementMatchers.hasSuperType;
|
import static net.bytebuddy.matcher.ElementMatchers.hasSuperType;
|
||||||
import static net.bytebuddy.matcher.ElementMatchers.isInterface;
|
import static net.bytebuddy.matcher.ElementMatchers.isInterface;
|
||||||
|
@ -9,9 +9,9 @@ import static net.bytebuddy.matcher.ElementMatchers.named;
|
||||||
import static net.bytebuddy.matcher.ElementMatchers.not;
|
import static net.bytebuddy.matcher.ElementMatchers.not;
|
||||||
import static net.bytebuddy.matcher.ElementMatchers.takesArgument;
|
import static net.bytebuddy.matcher.ElementMatchers.takesArgument;
|
||||||
|
|
||||||
import com.datadoghq.agent.integration.MessagePropertyTextMap;
|
|
||||||
import com.datadoghq.trace.DDTags;
|
import com.datadoghq.trace.DDTags;
|
||||||
import com.google.auto.service.AutoService;
|
import com.google.auto.service.AutoService;
|
||||||
|
import dd.inst.jms.util.MessagePropertyTextMap;
|
||||||
import dd.trace.DDAdvice;
|
import dd.trace.DDAdvice;
|
||||||
import dd.trace.Instrumenter;
|
import dd.trace.Instrumenter;
|
||||||
import io.opentracing.ActiveSpan;
|
import io.opentracing.ActiveSpan;
|
||||||
|
@ -34,6 +34,7 @@ public final class JMS2MessageListenerInstrumentation implements Instrumenter {
|
||||||
.type(
|
.type(
|
||||||
not(isInterface()).and(hasSuperType(named("javax.jms.MessageListener"))),
|
not(isInterface()).and(hasSuperType(named("javax.jms.MessageListener"))),
|
||||||
classLoaderHasClasses("javax.jms.JMSContext", "javax.jms.CompletionListener"))
|
classLoaderHasClasses("javax.jms.JMSContext", "javax.jms.CompletionListener"))
|
||||||
|
.transform(JMS2MessageConsumerInstrumentation.JMS2_HELPER_INJECTOR)
|
||||||
.transform(
|
.transform(
|
||||||
DDAdvice.create()
|
DDAdvice.create()
|
||||||
.advice(
|
.advice(
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
package dd.inst.jms2;
|
package dd.inst.jms2;
|
||||||
|
|
||||||
import static com.datadoghq.agent.integration.JmsUtil.toResourceName;
|
import static dd.inst.jms.util.JmsUtil.toResourceName;
|
||||||
import static dd.trace.ClassLoaderMatcher.classLoaderHasClasses;
|
import static dd.trace.ClassLoaderMatcher.classLoaderHasClasses;
|
||||||
import static net.bytebuddy.matcher.ElementMatchers.hasSuperType;
|
import static net.bytebuddy.matcher.ElementMatchers.hasSuperType;
|
||||||
import static net.bytebuddy.matcher.ElementMatchers.isInterface;
|
import static net.bytebuddy.matcher.ElementMatchers.isInterface;
|
||||||
|
@ -9,9 +9,9 @@ import static net.bytebuddy.matcher.ElementMatchers.named;
|
||||||
import static net.bytebuddy.matcher.ElementMatchers.not;
|
import static net.bytebuddy.matcher.ElementMatchers.not;
|
||||||
import static net.bytebuddy.matcher.ElementMatchers.takesArgument;
|
import static net.bytebuddy.matcher.ElementMatchers.takesArgument;
|
||||||
|
|
||||||
import com.datadoghq.agent.integration.MessagePropertyTextMap;
|
|
||||||
import com.datadoghq.trace.DDTags;
|
import com.datadoghq.trace.DDTags;
|
||||||
import com.google.auto.service.AutoService;
|
import com.google.auto.service.AutoService;
|
||||||
|
import dd.inst.jms.util.MessagePropertyTextMap;
|
||||||
import dd.trace.DDAdvice;
|
import dd.trace.DDAdvice;
|
||||||
import dd.trace.Instrumenter;
|
import dd.trace.Instrumenter;
|
||||||
import io.opentracing.ActiveSpan;
|
import io.opentracing.ActiveSpan;
|
||||||
|
@ -35,6 +35,7 @@ public final class JMS2MessageProducerInstrumentation implements Instrumenter {
|
||||||
.type(
|
.type(
|
||||||
not(isInterface()).and(hasSuperType(named("javax.jms.MessageProducer"))),
|
not(isInterface()).and(hasSuperType(named("javax.jms.MessageProducer"))),
|
||||||
classLoaderHasClasses("javax.jms.JMSContext", "javax.jms.CompletionListener"))
|
classLoaderHasClasses("javax.jms.JMSContext", "javax.jms.CompletionListener"))
|
||||||
|
.transform(JMS2MessageConsumerInstrumentation.JMS2_HELPER_INJECTOR)
|
||||||
.transform(
|
.transform(
|
||||||
DDAdvice.create()
|
DDAdvice.create()
|
||||||
.advice(
|
.advice(
|
||||||
|
|
|
@ -13,12 +13,13 @@ versionScan {
|
||||||
apply from: "${rootDir}/gradle/java.gradle"
|
apply from: "${rootDir}/gradle/java.gradle"
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
compile group: 'org.mongodb', name: 'mongo-java-driver', version: '3.4.2'
|
compileOnly group: 'org.mongodb', name: 'mongo-java-driver', version: '3.4.2'
|
||||||
|
|
||||||
compile project(':dd-trace')
|
compile project(':dd-trace')
|
||||||
compile project(':dd-java-agent:integrations:helpers')
|
|
||||||
compile project(':dd-java-agent:tooling')
|
compile project(':dd-java-agent:tooling')
|
||||||
|
|
||||||
compile deps.bytebuddy
|
compile deps.bytebuddy
|
||||||
compile deps.opentracing
|
compile deps.opentracing
|
||||||
|
|
||||||
|
testCompile group: 'org.mongodb', name: 'mongo-java-driver', version: '3.4.2'
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
package com.datadoghq.agent.integration;
|
package dd.inst.mongo;
|
||||||
|
|
||||||
import com.datadoghq.trace.DDTags;
|
import com.datadoghq.trace.DDTags;
|
||||||
import com.mongodb.event.CommandFailedEvent;
|
import com.mongodb.event.CommandFailedEvent;
|
|
@ -2,10 +2,10 @@ package dd.inst.mongo;
|
||||||
|
|
||||||
import static net.bytebuddy.matcher.ElementMatchers.*;
|
import static net.bytebuddy.matcher.ElementMatchers.*;
|
||||||
|
|
||||||
import com.datadoghq.agent.integration.DDTracingCommandListener;
|
|
||||||
import com.google.auto.service.AutoService;
|
import com.google.auto.service.AutoService;
|
||||||
import com.mongodb.MongoClientOptions;
|
import com.mongodb.MongoClientOptions;
|
||||||
import dd.trace.DDAdvice;
|
import dd.trace.DDAdvice;
|
||||||
|
import dd.trace.HelperInjector;
|
||||||
import dd.trace.Instrumenter;
|
import dd.trace.Instrumenter;
|
||||||
import io.opentracing.util.GlobalTracer;
|
import io.opentracing.util.GlobalTracer;
|
||||||
import java.lang.reflect.Modifier;
|
import java.lang.reflect.Modifier;
|
||||||
|
@ -15,6 +15,8 @@ import net.bytebuddy.description.type.TypeDescription;
|
||||||
|
|
||||||
@AutoService(Instrumenter.class)
|
@AutoService(Instrumenter.class)
|
||||||
public final class MongoClientInstrumentation implements Instrumenter {
|
public final class MongoClientInstrumentation implements Instrumenter {
|
||||||
|
public static final HelperInjector MONGO_HELPER_INJECTOR =
|
||||||
|
new HelperInjector("dd.inst.mongo.DDTracingCommandListener");
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public AgentBuilder instrument(AgentBuilder agentBuilder) {
|
public AgentBuilder instrument(AgentBuilder agentBuilder) {
|
||||||
|
@ -32,6 +34,7 @@ public final class MongoClientInstrumentation implements Instrumenter {
|
||||||
null,
|
null,
|
||||||
new TypeDescription.Generic[] {})))
|
new TypeDescription.Generic[] {})))
|
||||||
.and(isPublic()))))
|
.and(isPublic()))))
|
||||||
|
.transform(MONGO_HELPER_INJECTOR)
|
||||||
.transform(
|
.transform(
|
||||||
DDAdvice.create()
|
DDAdvice.create()
|
||||||
.advice(
|
.advice(
|
||||||
|
|
|
@ -2,7 +2,6 @@ package dd.inst.mongo;
|
||||||
|
|
||||||
import static org.assertj.core.api.Java6Assertions.assertThat;
|
import static org.assertj.core.api.Java6Assertions.assertThat;
|
||||||
|
|
||||||
import com.datadoghq.agent.integration.DDTracingCommandListener;
|
|
||||||
import com.datadoghq.trace.DDSpan;
|
import com.datadoghq.trace.DDSpan;
|
||||||
import com.datadoghq.trace.DDTracer;
|
import com.datadoghq.trace.DDTracer;
|
||||||
import com.mongodb.ServerAddress;
|
import com.mongodb.ServerAddress;
|
||||||
|
|
|
@ -13,12 +13,15 @@ versionScan {
|
||||||
apply from: "${rootDir}/gradle/java.gradle"
|
apply from: "${rootDir}/gradle/java.gradle"
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
compile group: 'org.mongodb', name: 'mongodb-driver-async', version: '3.4.2'
|
// use mongo listener
|
||||||
|
compile(project(':dd-java-agent:integrations:mongo-3.1')) {
|
||||||
|
transitive = false
|
||||||
|
}
|
||||||
|
compileOnly group: 'org.mongodb', name: 'mongodb-driver-async', version: '3.4.2'
|
||||||
|
|
||||||
compile project(':dd-trace')
|
compile project(':dd-trace')
|
||||||
compile project(':dd-java-agent:integrations:helpers')
|
|
||||||
compile project(':dd-java-agent:tooling')
|
compile project(':dd-java-agent:tooling')
|
||||||
|
|
||||||
compile deps.bytebuddy
|
compile deps.bytebuddy
|
||||||
compile deps.opentracing
|
compile deps.opentracing
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,7 +2,6 @@ package dd.inst.mongo;
|
||||||
|
|
||||||
import static net.bytebuddy.matcher.ElementMatchers.*;
|
import static net.bytebuddy.matcher.ElementMatchers.*;
|
||||||
|
|
||||||
import com.datadoghq.agent.integration.DDTracingCommandListener;
|
|
||||||
import com.google.auto.service.AutoService;
|
import com.google.auto.service.AutoService;
|
||||||
import com.mongodb.async.client.MongoClientSettings;
|
import com.mongodb.async.client.MongoClientSettings;
|
||||||
import dd.trace.DDAdvice;
|
import dd.trace.DDAdvice;
|
||||||
|
@ -32,6 +31,7 @@ public final class MongoAsyncClientInstrumentation implements Instrumenter {
|
||||||
null,
|
null,
|
||||||
new TypeDescription.Generic[] {})))
|
new TypeDescription.Generic[] {})))
|
||||||
.and(isPublic()))))
|
.and(isPublic()))))
|
||||||
|
.transform(MongoClientInstrumentation.MONGO_HELPER_INJECTOR)
|
||||||
.transform(
|
.transform(
|
||||||
DDAdvice.create()
|
DDAdvice.create()
|
||||||
.advice(
|
.advice(
|
||||||
|
|
|
@ -15,14 +15,17 @@ versionScan {
|
||||||
apply from: "${rootDir}/gradle/java.gradle"
|
apply from: "${rootDir}/gradle/java.gradle"
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
compile group: 'com.squareup.okhttp3', name: 'okhttp', version: '3.0.0'
|
compileOnly group: 'com.squareup.okhttp3', name: 'okhttp', version: '3.0.0'
|
||||||
|
compile('io.opentracing.contrib:opentracing-okhttp3:0.0.5') {
|
||||||
|
transitive = false
|
||||||
|
}
|
||||||
|
|
||||||
compile project(':dd-trace')
|
compile project(':dd-trace')
|
||||||
compile project(':dd-java-agent:integrations:helpers')
|
|
||||||
compile project(':dd-java-agent:tooling')
|
compile project(':dd-java-agent:tooling')
|
||||||
|
|
||||||
compile deps.bytebuddy
|
compile deps.bytebuddy
|
||||||
compile deps.opentracing
|
compile deps.opentracing
|
||||||
|
|
||||||
|
testCompile group: 'com.squareup.okhttp3', name: 'okhttp', version: '3.0.0'
|
||||||
testCompile project(':dd-java-agent:tooling').sourceSets.test.output
|
testCompile project(':dd-java-agent:tooling').sourceSets.test.output
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,13 +1,14 @@
|
||||||
package dd.inst.okhttp3;
|
package dd.inst.okhttp3;
|
||||||
|
|
||||||
import static dd.trace.ClassLoaderMatcher.classLoaderHasClasses;
|
import static dd.trace.ClassLoaderMatcher.classLoaderHasClasses;
|
||||||
import static dd.trace.ExceptionHandlers.defaultExceptionHandler;
|
|
||||||
import static io.opentracing.contrib.okhttp3.OkHttpClientSpanDecorator.STANDARD_TAGS;
|
import static io.opentracing.contrib.okhttp3.OkHttpClientSpanDecorator.STANDARD_TAGS;
|
||||||
import static net.bytebuddy.matcher.ElementMatchers.isConstructor;
|
import static net.bytebuddy.matcher.ElementMatchers.isConstructor;
|
||||||
import static net.bytebuddy.matcher.ElementMatchers.named;
|
import static net.bytebuddy.matcher.ElementMatchers.named;
|
||||||
import static net.bytebuddy.matcher.ElementMatchers.takesArgument;
|
import static net.bytebuddy.matcher.ElementMatchers.takesArgument;
|
||||||
|
|
||||||
import com.google.auto.service.AutoService;
|
import com.google.auto.service.AutoService;
|
||||||
|
import dd.trace.DDAdvice;
|
||||||
|
import dd.trace.HelperInjector;
|
||||||
import dd.trace.Instrumenter;
|
import dd.trace.Instrumenter;
|
||||||
import io.opentracing.contrib.okhttp3.TracingInterceptor;
|
import io.opentracing.contrib.okhttp3.TracingInterceptor;
|
||||||
import io.opentracing.util.GlobalTracer;
|
import io.opentracing.util.GlobalTracer;
|
||||||
|
@ -27,11 +28,23 @@ public class OkHttp3Instrumentation implements Instrumenter {
|
||||||
named("okhttp3.OkHttpClient"),
|
named("okhttp3.OkHttpClient"),
|
||||||
classLoaderHasClasses("okhttp3.Cookie", "okhttp3.ConnectionPool", "okhttp3.Headers"))
|
classLoaderHasClasses("okhttp3.Cookie", "okhttp3.ConnectionPool", "okhttp3.Headers"))
|
||||||
.transform(
|
.transform(
|
||||||
new AgentBuilder.Transformer.ForAdvice()
|
new HelperInjector(
|
||||||
|
"io.opentracing.contrib.okhttp3.OkHttpClientSpanDecorator",
|
||||||
|
"io.opentracing.contrib.okhttp3.OkHttpClientSpanDecorator$1",
|
||||||
|
"io.opentracing.contrib.okhttp3.TagWrapper",
|
||||||
|
"io.opentracing.contrib.okhttp3.TracingInterceptor",
|
||||||
|
"io.opentracing.contrib.okhttp3.RequestBuilderInjectAdapter",
|
||||||
|
"io.opentracing.contrib.okhttp3.TracingCallFactory",
|
||||||
|
"io.opentracing.contrib.okhttp3.TracingCallFactory$NetworkInterceptor",
|
||||||
|
"io.opentracing.contrib.okhttp3.TracingCallFactory$1",
|
||||||
|
"io.opentracing.contrib.okhttp3.concurrent.TracingExecutorService",
|
||||||
|
"io.opentracing.contrib.okhttp3.concurrent.TracedCallable",
|
||||||
|
"io.opentracing.contrib.okhttp3.concurrent.TracedRunnable"))
|
||||||
|
.transform(
|
||||||
|
DDAdvice.create()
|
||||||
.advice(
|
.advice(
|
||||||
isConstructor().and(takesArgument(0, named("okhttp3.OkHttpClient$Builder"))),
|
isConstructor().and(takesArgument(0, named("okhttp3.OkHttpClient$Builder"))),
|
||||||
OkHttp3Advice.class.getName())
|
OkHttp3Advice.class.getName()))
|
||||||
.withExceptionHandler(defaultExceptionHandler()))
|
|
||||||
.asDecorator();
|
.asDecorator();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -14,7 +14,9 @@ apply from: "${rootDir}/gradle/java.gradle"
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
compileOnly group: 'javax.servlet', name: 'servlet-api', version: '2.3'
|
compileOnly group: 'javax.servlet', name: 'servlet-api', version: '2.3'
|
||||||
compileOnly group: 'io.opentracing.contrib', name: 'opentracing-web-servlet-filter', version: '0.0.9'
|
compile('io.opentracing.contrib:opentracing-web-servlet-filter:0.0.9') {
|
||||||
|
transitive = false
|
||||||
|
}
|
||||||
|
|
||||||
compile project(':dd-trace')
|
compile project(':dd-trace')
|
||||||
compile project(':dd-java-agent:tooling')
|
compile project(':dd-java-agent:tooling')
|
||||||
|
|
|
@ -8,6 +8,7 @@ import static net.bytebuddy.matcher.ElementMatchers.takesArgument;
|
||||||
|
|
||||||
import com.google.auto.service.AutoService;
|
import com.google.auto.service.AutoService;
|
||||||
import dd.trace.DDAdvice;
|
import dd.trace.DDAdvice;
|
||||||
|
import dd.trace.HelperInjector;
|
||||||
import dd.trace.Instrumenter;
|
import dd.trace.Instrumenter;
|
||||||
import io.opentracing.ActiveSpan;
|
import io.opentracing.ActiveSpan;
|
||||||
import io.opentracing.SpanContext;
|
import io.opentracing.SpanContext;
|
||||||
|
@ -35,6 +36,14 @@ public final class HttpServlet2Instrumentation implements Instrumenter {
|
||||||
.and(
|
.and(
|
||||||
classLoaderHasClasses(
|
classLoaderHasClasses(
|
||||||
"javax.servlet.ServletContextEvent", "javax.servlet.FilterChain")))
|
"javax.servlet.ServletContextEvent", "javax.servlet.FilterChain")))
|
||||||
|
.transform(
|
||||||
|
new HelperInjector(
|
||||||
|
"io.opentracing.contrib.web.servlet.filter.HttpServletRequestExtractAdapter",
|
||||||
|
"io.opentracing.contrib.web.servlet.filter.HttpServletRequestExtractAdapter$MultivaluedMapFlatIterator",
|
||||||
|
"io.opentracing.contrib.web.servlet.filter.ServletFilterSpanDecorator",
|
||||||
|
"io.opentracing.contrib.web.servlet.filter.ServletFilterSpanDecorator$1",
|
||||||
|
"io.opentracing.contrib.web.servlet.filter.TracingFilter",
|
||||||
|
"io.opentracing.contrib.web.servlet.filter.TracingFilter$1"))
|
||||||
.transform(
|
.transform(
|
||||||
DDAdvice.create()
|
DDAdvice.create()
|
||||||
.advice(
|
.advice(
|
||||||
|
|
|
@ -15,7 +15,9 @@ apply from: "${rootDir}/gradle/java.gradle"
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
compileOnly group: 'javax.servlet', name: 'javax.servlet-api', version: '3.0.1'
|
compileOnly group: 'javax.servlet', name: 'javax.servlet-api', version: '3.0.1'
|
||||||
compileOnly group: 'io.opentracing.contrib', name: 'opentracing-web-servlet-filter', version: '0.0.9'
|
compile('io.opentracing.contrib:opentracing-web-servlet-filter:0.0.9') {
|
||||||
|
transitive = false
|
||||||
|
}
|
||||||
|
|
||||||
compile project(':dd-trace')
|
compile project(':dd-trace')
|
||||||
compile project(':dd-java-agent:tooling')
|
compile project(':dd-java-agent:tooling')
|
||||||
|
|
|
@ -7,6 +7,7 @@ import static net.bytebuddy.matcher.ElementMatchers.takesArgument;
|
||||||
|
|
||||||
import com.google.auto.service.AutoService;
|
import com.google.auto.service.AutoService;
|
||||||
import dd.trace.DDAdvice;
|
import dd.trace.DDAdvice;
|
||||||
|
import dd.trace.HelperInjector;
|
||||||
import dd.trace.Instrumenter;
|
import dd.trace.Instrumenter;
|
||||||
import io.opentracing.ActiveSpan;
|
import io.opentracing.ActiveSpan;
|
||||||
import io.opentracing.SpanContext;
|
import io.opentracing.SpanContext;
|
||||||
|
@ -35,6 +36,14 @@ public final class HttpServlet3Instrumentation implements Instrumenter {
|
||||||
.type(
|
.type(
|
||||||
named("javax.servlet.http.HttpServlet"),
|
named("javax.servlet.http.HttpServlet"),
|
||||||
classLoaderHasClasses("javax.servlet.AsyncEvent", "javax.servlet.AsyncListener"))
|
classLoaderHasClasses("javax.servlet.AsyncEvent", "javax.servlet.AsyncListener"))
|
||||||
|
.transform(
|
||||||
|
new HelperInjector(
|
||||||
|
"io.opentracing.contrib.web.servlet.filter.HttpServletRequestExtractAdapter",
|
||||||
|
"io.opentracing.contrib.web.servlet.filter.HttpServletRequestExtractAdapter$MultivaluedMapFlatIterator",
|
||||||
|
"io.opentracing.contrib.web.servlet.filter.ServletFilterSpanDecorator",
|
||||||
|
"io.opentracing.contrib.web.servlet.filter.ServletFilterSpanDecorator$1",
|
||||||
|
"io.opentracing.contrib.web.servlet.filter.TracingFilter",
|
||||||
|
"io.opentracing.contrib.web.servlet.filter.TracingFilter$1"))
|
||||||
.transform(
|
.transform(
|
||||||
DDAdvice.create()
|
DDAdvice.create()
|
||||||
.advice(
|
.advice(
|
||||||
|
|
Loading…
Reference in New Issue