Cleanup method signatures and servlet 2 instrumentation
adding the abstract servlet instrumentation reduces code duplication and makes it more similar to servlet 3 instrumentation.
This commit is contained in:
parent
c246966e5f
commit
4583d12b31
|
@ -158,7 +158,7 @@ public interface Instrumenter {
|
|||
}
|
||||
|
||||
@Override
|
||||
public ElementMatcher<? super ClassLoader> classLoaderMatcher() {
|
||||
public ElementMatcher<ClassLoader> classLoaderMatcher() {
|
||||
return any();
|
||||
}
|
||||
|
||||
|
|
|
@ -48,7 +48,7 @@ public final class AkkaHttpClientInstrumentation extends Instrumenter.Default {
|
|||
}
|
||||
|
||||
@Override
|
||||
public ElementMatcher<? super TypeDescription> typeMatcher() {
|
||||
public ElementMatcher<TypeDescription> typeMatcher() {
|
||||
return named("akka.http.scaladsl.HttpExt");
|
||||
}
|
||||
|
||||
|
|
|
@ -46,7 +46,7 @@ public final class AkkaHttpServerInstrumentation extends Instrumenter.Default {
|
|||
}
|
||||
|
||||
@Override
|
||||
public ElementMatcher<? super TypeDescription> typeMatcher() {
|
||||
public ElementMatcher<TypeDescription> typeMatcher() {
|
||||
return named("akka.http.scaladsl.HttpExt");
|
||||
}
|
||||
|
||||
|
|
|
@ -19,6 +19,7 @@ import java.util.Collections;
|
|||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import net.bytebuddy.asm.Advice;
|
||||
import net.bytebuddy.description.type.TypeDescription;
|
||||
import net.bytebuddy.matcher.ElementMatcher;
|
||||
import org.apache.http.impl.execchain.ClientExecChain;
|
||||
|
||||
|
@ -30,13 +31,13 @@ public class ApacheHttpClientInstrumentation extends Instrumenter.Default {
|
|||
}
|
||||
|
||||
@Override
|
||||
public ElementMatcher typeMatcher() {
|
||||
public ElementMatcher<TypeDescription> typeMatcher() {
|
||||
return named("org.apache.http.impl.client.HttpClientBuilder")
|
||||
.or(safeHasSuperType(named("org.apache.http.impl.client.CloseableHttpClient")));
|
||||
}
|
||||
|
||||
@Override
|
||||
public ElementMatcher<? super ClassLoader> classLoaderMatcher() {
|
||||
public ElementMatcher<ClassLoader> classLoaderMatcher() {
|
||||
return classLoaderHasClasses(
|
||||
"org.apache.http.HttpException",
|
||||
"org.apache.http.HttpRequest",
|
||||
|
|
|
@ -14,6 +14,7 @@ import java.util.HashMap;
|
|||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import net.bytebuddy.asm.Advice;
|
||||
import net.bytebuddy.description.type.TypeDescription;
|
||||
import net.bytebuddy.matcher.ElementMatcher;
|
||||
|
||||
/**
|
||||
|
@ -28,13 +29,13 @@ public final class AWSClientInstrumentation extends Instrumenter.Default {
|
|||
}
|
||||
|
||||
@Override
|
||||
public ElementMatcher typeMatcher() {
|
||||
public ElementMatcher<TypeDescription> typeMatcher() {
|
||||
return named("com.amazonaws.AmazonWebServiceClient")
|
||||
.and(declaresField(named("requestHandler2s")));
|
||||
}
|
||||
|
||||
@Override
|
||||
public ElementMatcher<? super ClassLoader> classLoaderMatcher() {
|
||||
public ElementMatcher<ClassLoader> classLoaderMatcher() {
|
||||
return classLoaderHasClasses("com.amazonaws.http.client.HttpClientFactory")
|
||||
.and(
|
||||
not(
|
||||
|
@ -52,7 +53,7 @@ public final class AWSClientInstrumentation extends Instrumenter.Default {
|
|||
|
||||
@Override
|
||||
public Map<ElementMatcher, String> transformers() {
|
||||
Map<ElementMatcher, String> transformers = new HashMap<>();
|
||||
final Map<ElementMatcher, String> transformers = new HashMap<>();
|
||||
transformers.put(isConstructor(), AWSClientAdvice.class.getName());
|
||||
return transformers;
|
||||
}
|
||||
|
|
|
@ -14,6 +14,7 @@ import java.util.HashMap;
|
|||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import net.bytebuddy.asm.Advice;
|
||||
import net.bytebuddy.description.type.TypeDescription;
|
||||
import net.bytebuddy.matcher.ElementMatcher;
|
||||
|
||||
/**
|
||||
|
@ -29,7 +30,7 @@ public final class AWSClientInstrumentation extends Instrumenter.Default {
|
|||
}
|
||||
|
||||
@Override
|
||||
public ElementMatcher typeMatcher() {
|
||||
public ElementMatcher<TypeDescription> typeMatcher() {
|
||||
return isAbstract()
|
||||
.and(
|
||||
named("com.amazonaws.AmazonWebServiceClient")
|
||||
|
@ -37,7 +38,7 @@ public final class AWSClientInstrumentation extends Instrumenter.Default {
|
|||
}
|
||||
|
||||
@Override
|
||||
public ElementMatcher<? super ClassLoader> classLoaderMatcher() {
|
||||
public ElementMatcher<ClassLoader> classLoaderMatcher() {
|
||||
return classLoaderHasClasses("com.amazonaws.HandlerContextAware");
|
||||
}
|
||||
|
||||
|
@ -51,7 +52,7 @@ public final class AWSClientInstrumentation extends Instrumenter.Default {
|
|||
|
||||
@Override
|
||||
public Map<ElementMatcher, String> transformers() {
|
||||
Map<ElementMatcher, String> transformers = new HashMap<>();
|
||||
final Map<ElementMatcher, String> transformers = new HashMap<>();
|
||||
transformers.put(isConstructor(), AWSClientAdvice.class.getName());
|
||||
return transformers;
|
||||
}
|
||||
|
|
|
@ -26,7 +26,7 @@ public final class ClassLoaderInstrumentation extends Instrumenter.Default {
|
|||
}
|
||||
|
||||
@Override
|
||||
public ElementMatcher typeMatcher() {
|
||||
public ElementMatcher<TypeDescription> typeMatcher() {
|
||||
return safeHasSuperType(named("java.lang.ClassLoader"));
|
||||
}
|
||||
|
||||
|
|
|
@ -15,6 +15,7 @@ import java.lang.reflect.Constructor;
|
|||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import net.bytebuddy.asm.Advice;
|
||||
import net.bytebuddy.description.type.TypeDescription;
|
||||
import net.bytebuddy.matcher.ElementMatcher;
|
||||
|
||||
@AutoService(Instrumenter.class)
|
||||
|
@ -25,12 +26,12 @@ public class CassandraClientInstrumentation extends Instrumenter.Default {
|
|||
}
|
||||
|
||||
@Override
|
||||
public ElementMatcher typeMatcher() {
|
||||
public ElementMatcher<TypeDescription> typeMatcher() {
|
||||
return named("com.datastax.driver.core.Cluster$Manager");
|
||||
}
|
||||
|
||||
@Override
|
||||
public ElementMatcher<? super ClassLoader> classLoaderMatcher() {
|
||||
public ElementMatcher<ClassLoader> classLoaderMatcher() {
|
||||
return classLoaderHasClasses("com.datastax.driver.core.Duration");
|
||||
}
|
||||
|
||||
|
@ -45,7 +46,7 @@ public class CassandraClientInstrumentation extends Instrumenter.Default {
|
|||
|
||||
@Override
|
||||
public Map<ElementMatcher, String> transformers() {
|
||||
Map<ElementMatcher, String> transformers = new HashMap<>();
|
||||
final Map<ElementMatcher, String> transformers = new HashMap<>();
|
||||
transformers.put(
|
||||
isMethod().and(isPrivate()).and(named("newSession")).and(takesArguments(0)),
|
||||
CassandraClientAdvice.class.getName());
|
||||
|
|
|
@ -21,6 +21,7 @@ import java.util.Collections;
|
|||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import net.bytebuddy.asm.Advice;
|
||||
import net.bytebuddy.description.type.TypeDescription;
|
||||
import net.bytebuddy.matcher.ElementMatcher;
|
||||
import org.elasticsearch.client.ResponseListener;
|
||||
|
||||
|
@ -42,7 +43,7 @@ public class Elasticsearch5RestClientInstrumentation extends Instrumenter.Defaul
|
|||
}
|
||||
|
||||
@Override
|
||||
public ElementMatcher typeMatcher() {
|
||||
public ElementMatcher<TypeDescription> typeMatcher() {
|
||||
return not(isInterface()).and(named("org.elasticsearch.client.RestClient"));
|
||||
}
|
||||
|
||||
|
|
|
@ -20,6 +20,7 @@ import java.util.Collections;
|
|||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import net.bytebuddy.asm.Advice;
|
||||
import net.bytebuddy.description.type.TypeDescription;
|
||||
import net.bytebuddy.matcher.ElementMatcher;
|
||||
import org.elasticsearch.action.Action;
|
||||
import org.elasticsearch.action.ActionListener;
|
||||
|
@ -39,14 +40,14 @@ public class Elasticsearch2TransportClientInstrumentation extends Instrumenter.D
|
|||
}
|
||||
|
||||
@Override
|
||||
public ElementMatcher typeMatcher() {
|
||||
public ElementMatcher<TypeDescription> typeMatcher() {
|
||||
// If we want to be more generic, we could instrument the interface instead:
|
||||
// .and(safeHasSuperType(named("org.elasticsearch.client.ElasticsearchClient"))))
|
||||
return not(isInterface()).and(named("org.elasticsearch.client.support.AbstractClient"));
|
||||
}
|
||||
|
||||
@Override
|
||||
public ElementMatcher<? super ClassLoader> classLoaderMatcher() {
|
||||
public ElementMatcher<ClassLoader> classLoaderMatcher() {
|
||||
return classLoaderHasClasses("org.elasticsearch.plugins.SitePlugin");
|
||||
}
|
||||
|
||||
|
|
|
@ -20,6 +20,7 @@ import java.util.Collections;
|
|||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import net.bytebuddy.asm.Advice;
|
||||
import net.bytebuddy.description.type.TypeDescription;
|
||||
import net.bytebuddy.matcher.ElementMatcher;
|
||||
import org.elasticsearch.action.Action;
|
||||
import org.elasticsearch.action.ActionListener;
|
||||
|
@ -39,14 +40,14 @@ public class Elasticsearch5TransportClientInstrumentation extends Instrumenter.D
|
|||
}
|
||||
|
||||
@Override
|
||||
public ElementMatcher typeMatcher() {
|
||||
public ElementMatcher<TypeDescription> typeMatcher() {
|
||||
// If we want to be more generic, we could instrument the interface instead:
|
||||
// .and(safeHasSuperType(named("org.elasticsearch.client.ElasticsearchClient"))))
|
||||
return not(isInterface()).and(named("org.elasticsearch.client.support.AbstractClient"));
|
||||
}
|
||||
|
||||
@Override
|
||||
public ElementMatcher<? super ClassLoader> classLoaderMatcher() {
|
||||
public ElementMatcher<ClassLoader> classLoaderMatcher() {
|
||||
return classLoaderHasClasses("org.elasticsearch.percolator.TransportMultiPercolateAction");
|
||||
}
|
||||
|
||||
|
|
|
@ -20,6 +20,7 @@ import java.util.Collections;
|
|||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import net.bytebuddy.asm.Advice;
|
||||
import net.bytebuddy.description.type.TypeDescription;
|
||||
import net.bytebuddy.matcher.ElementMatcher;
|
||||
import org.elasticsearch.action.Action;
|
||||
import org.elasticsearch.action.ActionListener;
|
||||
|
@ -43,14 +44,14 @@ public class Elasticsearch6TransportClientInstrumentation extends Instrumenter.D
|
|||
}
|
||||
|
||||
@Override
|
||||
public ElementMatcher typeMatcher() {
|
||||
public ElementMatcher<TypeDescription> typeMatcher() {
|
||||
// If we want to be more generic, we could instrument the interface instead:
|
||||
// .and(safeHasSuperType(named("org.elasticsearch.client.ElasticsearchClient"))))
|
||||
return not(isInterface()).and(named("org.elasticsearch.client.support.AbstractClient"));
|
||||
}
|
||||
|
||||
@Override
|
||||
public ElementMatcher<? super ClassLoader> classLoaderMatcher() {
|
||||
public ElementMatcher<ClassLoader> classLoaderMatcher() {
|
||||
return classLoaderHasClasses("org.elasticsearch.client.RestClientBuilder$2");
|
||||
}
|
||||
|
||||
|
|
|
@ -12,6 +12,7 @@ import java.util.Collections;
|
|||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import net.bytebuddy.asm.Advice;
|
||||
import net.bytebuddy.description.type.TypeDescription;
|
||||
import net.bytebuddy.matcher.ElementMatcher;
|
||||
|
||||
@AutoService(Instrumenter.class)
|
||||
|
@ -22,12 +23,12 @@ public class GrpcClientBuilderInstrumentation extends Instrumenter.Default {
|
|||
}
|
||||
|
||||
@Override
|
||||
public ElementMatcher typeMatcher() {
|
||||
public ElementMatcher<TypeDescription> typeMatcher() {
|
||||
return named("io.grpc.internal.AbstractManagedChannelImplBuilder");
|
||||
}
|
||||
|
||||
@Override
|
||||
public ElementMatcher<? super ClassLoader> classLoaderMatcher() {
|
||||
public ElementMatcher<ClassLoader> classLoaderMatcher() {
|
||||
return classLoaderHasClasses("io.grpc.InternalServerInterceptors");
|
||||
}
|
||||
|
||||
|
|
|
@ -12,6 +12,7 @@ import java.util.Collections;
|
|||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import net.bytebuddy.asm.Advice;
|
||||
import net.bytebuddy.description.type.TypeDescription;
|
||||
import net.bytebuddy.matcher.ElementMatcher;
|
||||
|
||||
@AutoService(Instrumenter.class)
|
||||
|
@ -22,12 +23,12 @@ public class GrpcServerBuilderInstrumentation extends Instrumenter.Default {
|
|||
}
|
||||
|
||||
@Override
|
||||
public ElementMatcher typeMatcher() {
|
||||
public ElementMatcher<TypeDescription> typeMatcher() {
|
||||
return named("io.grpc.internal.AbstractServerImplBuilder");
|
||||
}
|
||||
|
||||
@Override
|
||||
public ElementMatcher<? super ClassLoader> classLoaderMatcher() {
|
||||
public ElementMatcher<ClassLoader> classLoaderMatcher() {
|
||||
return classLoaderHasClasses("io.grpc.InternalServerInterceptors");
|
||||
}
|
||||
|
||||
|
|
|
@ -24,6 +24,7 @@ import java.util.Map;
|
|||
import java.util.WeakHashMap;
|
||||
import javax.net.ssl.HttpsURLConnection;
|
||||
import net.bytebuddy.asm.Advice;
|
||||
import net.bytebuddy.description.type.TypeDescription;
|
||||
import net.bytebuddy.matcher.ElementMatcher;
|
||||
|
||||
@AutoService(Instrumenter.class)
|
||||
|
@ -39,7 +40,7 @@ public class HttpUrlConnectionInstrumentation extends Instrumenter.Default {
|
|||
}
|
||||
|
||||
@Override
|
||||
public ElementMatcher typeMatcher() {
|
||||
public ElementMatcher<TypeDescription> typeMatcher() {
|
||||
return safeHasSuperType(named("java.net.HttpURLConnection"))
|
||||
// This class is a simple delegator. Skip because it does not update its `connected` field.
|
||||
.and(not(named("sun.net.www.protocol.https.HttpsURLConnectionImpl")));
|
||||
|
|
|
@ -17,6 +17,7 @@ import java.util.Collections;
|
|||
import java.util.Iterator;
|
||||
import java.util.Map;
|
||||
import net.bytebuddy.asm.Advice;
|
||||
import net.bytebuddy.description.type.TypeDescription;
|
||||
import net.bytebuddy.matcher.ElementMatcher;
|
||||
import sun.net.www.MessageHeader;
|
||||
import sun.net.www.http.HttpClient;
|
||||
|
@ -34,7 +35,7 @@ public class SunHttpClientInstrumentation extends Instrumenter.Default {
|
|||
}
|
||||
|
||||
@Override
|
||||
public ElementMatcher typeMatcher() {
|
||||
public ElementMatcher<TypeDescription> typeMatcher() {
|
||||
return named("sun.net.www.http.HttpClient");
|
||||
}
|
||||
|
||||
|
|
|
@ -19,6 +19,7 @@ import java.util.Collections;
|
|||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import net.bytebuddy.asm.Advice;
|
||||
import net.bytebuddy.description.type.TypeDescription;
|
||||
import net.bytebuddy.matcher.ElementMatcher;
|
||||
|
||||
@AutoService(Instrumenter.class)
|
||||
|
@ -34,13 +35,13 @@ public class UrlInstrumentation extends Instrumenter.Default {
|
|||
}
|
||||
|
||||
@Override
|
||||
public ElementMatcher typeMatcher() {
|
||||
public ElementMatcher<TypeDescription> typeMatcher() {
|
||||
return is(URL.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Map<ElementMatcher, String> transformers() {
|
||||
Map<ElementMatcher, String> transformers = new HashMap<>();
|
||||
final Map<ElementMatcher, String> transformers = new HashMap<>();
|
||||
transformers.put(
|
||||
isMethod().and(isPublic()).and(named("openConnection")),
|
||||
ConnectionErrorAdvice.class.getName());
|
||||
|
|
|
@ -18,6 +18,7 @@ import java.util.Collections;
|
|||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import net.bytebuddy.asm.Advice;
|
||||
import net.bytebuddy.description.type.TypeDescription;
|
||||
import net.bytebuddy.matcher.ElementMatcher;
|
||||
|
||||
@AutoService(Instrumenter.class)
|
||||
|
@ -28,7 +29,7 @@ public class HystrixCommandInstrumentation extends Instrumenter.Default {
|
|||
}
|
||||
|
||||
@Override
|
||||
public ElementMatcher typeMatcher() {
|
||||
public ElementMatcher<TypeDescription> typeMatcher() {
|
||||
// Not adding a version restriction because this should work with any version and add some
|
||||
// benefit.
|
||||
return not(isInterface()).and(safeHasSuperType(named("com.netflix.hystrix.HystrixCommand")));
|
||||
|
|
|
@ -13,6 +13,7 @@ import io.opentracing.util.GlobalTracer;
|
|||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import net.bytebuddy.asm.Advice;
|
||||
import net.bytebuddy.description.type.TypeDescription;
|
||||
import net.bytebuddy.matcher.ElementMatcher;
|
||||
|
||||
@AutoService(Instrumenter.class)
|
||||
|
@ -23,19 +24,19 @@ public class HystrixThreadPoolInstrumentation extends Instrumenter.Default {
|
|||
}
|
||||
|
||||
@Override
|
||||
public ElementMatcher typeMatcher() {
|
||||
public ElementMatcher<TypeDescription> typeMatcher() {
|
||||
return named(
|
||||
"com.netflix.hystrix.strategy.concurrency.HystrixContextScheduler$ThreadPoolWorker");
|
||||
}
|
||||
|
||||
@Override
|
||||
public ElementMatcher<? super ClassLoader> classLoaderMatcher() {
|
||||
public ElementMatcher<ClassLoader> classLoaderMatcher() {
|
||||
return classLoaderHasClasses("com.netflix.hystrix.AbstractCommand");
|
||||
}
|
||||
|
||||
@Override
|
||||
public Map<ElementMatcher, String> transformers() {
|
||||
Map<ElementMatcher, String> transformers = new HashMap<>();
|
||||
final Map<ElementMatcher, String> transformers = new HashMap<>();
|
||||
transformers.put(
|
||||
isMethod().and(named("schedule")).and(takesArguments(1)),
|
||||
EnableAsyncAdvice.class.getName());
|
||||
|
|
|
@ -93,7 +93,7 @@ public final class ExecutorInstrumentation extends Instrumenter.Default {
|
|||
}
|
||||
|
||||
@Override
|
||||
public ElementMatcher typeMatcher() {
|
||||
public ElementMatcher<TypeDescription> typeMatcher() {
|
||||
return not(isInterface())
|
||||
.and(safeHasSuperType(named(Executor.class.getName())))
|
||||
.and(
|
||||
|
|
|
@ -68,7 +68,7 @@ public final class FutureInstrumentation extends Instrumenter.Default {
|
|||
}
|
||||
|
||||
@Override
|
||||
public ElementMatcher typeMatcher() {
|
||||
public ElementMatcher<TypeDescription> typeMatcher() {
|
||||
return not(isInterface())
|
||||
.and(safeHasSuperType(named(Future.class.getName())))
|
||||
.and(
|
||||
|
|
|
@ -19,6 +19,7 @@ import java.util.Map;
|
|||
import javax.ws.rs.HttpMethod;
|
||||
import javax.ws.rs.Path;
|
||||
import net.bytebuddy.asm.Advice;
|
||||
import net.bytebuddy.description.type.TypeDescription;
|
||||
import net.bytebuddy.matcher.ElementMatcher;
|
||||
|
||||
@AutoService(Instrumenter.class)
|
||||
|
@ -29,7 +30,7 @@ public final class JaxRsAnnotationsInstrumentation extends Instrumenter.Default
|
|||
}
|
||||
|
||||
@Override
|
||||
public ElementMatcher typeMatcher() {
|
||||
public ElementMatcher<TypeDescription> typeMatcher() {
|
||||
return safeHasSuperType(
|
||||
isAnnotatedWith(named("javax.ws.rs.Path"))
|
||||
.or(safeHasSuperType(declaresMethod(isAnnotatedWith(named("javax.ws.rs.Path"))))));
|
||||
|
|
|
@ -10,6 +10,7 @@ import java.util.HashMap;
|
|||
import java.util.Map;
|
||||
import javax.ws.rs.client.ClientBuilder;
|
||||
import net.bytebuddy.asm.Advice;
|
||||
import net.bytebuddy.description.type.TypeDescription;
|
||||
import net.bytebuddy.matcher.ElementMatcher;
|
||||
|
||||
@AutoService(Instrumenter.class)
|
||||
|
@ -20,7 +21,7 @@ public final class JaxRsClientInstrumentation extends Instrumenter.Default {
|
|||
}
|
||||
|
||||
@Override
|
||||
public ElementMatcher typeMatcher() {
|
||||
public ElementMatcher<TypeDescription> typeMatcher() {
|
||||
return safeHasSuperType(named("javax.ws.rs.client.ClientBuilder"));
|
||||
}
|
||||
|
||||
|
|
|
@ -5,6 +5,7 @@ import datadog.trace.agent.tooling.Instrumenter;
|
|||
import datadog.trace.agent.tooling.Utils;
|
||||
import java.util.Collections;
|
||||
import java.util.Map;
|
||||
import net.bytebuddy.description.type.TypeDescription;
|
||||
import net.bytebuddy.matcher.ElementMatcher;
|
||||
import net.bytebuddy.matcher.NameMatcher;
|
||||
import net.bytebuddy.matcher.StringMatcher;
|
||||
|
@ -16,16 +17,16 @@ public final class JBossClassloadingInstrumentation extends Instrumenter.Default
|
|||
}
|
||||
|
||||
@Override
|
||||
public ElementMatcher typeMatcher() {
|
||||
return new NameMatcher(
|
||||
public ElementMatcher<TypeDescription> typeMatcher() {
|
||||
return new NameMatcher<>(
|
||||
new StringMatcher("org.jboss.modules.Module", StringMatcher.Mode.EQUALS_FULLY) {
|
||||
@Override
|
||||
public boolean matches(String target) {
|
||||
public boolean matches(final String target) {
|
||||
if (super.matches(target)) {
|
||||
// This instrumentation modifies no bytes.
|
||||
// Instead it sets a system prop to tell jboss to delegate
|
||||
// classloads for datadog bootstrap classes
|
||||
StringBuilder ddPrefixes = new StringBuilder("");
|
||||
final StringBuilder ddPrefixes = new StringBuilder("");
|
||||
for (int i = 0; i < Utils.BOOTSTRAP_PACKAGE_PREFIXES.length; ++i) {
|
||||
if (i > 0) {
|
||||
ddPrefixes.append(",");
|
||||
|
|
|
@ -15,6 +15,7 @@ import java.sql.PreparedStatement;
|
|||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import net.bytebuddy.asm.Advice;
|
||||
import net.bytebuddy.description.type.TypeDescription;
|
||||
import net.bytebuddy.matcher.ElementMatcher;
|
||||
|
||||
@AutoService(Instrumenter.class)
|
||||
|
@ -25,7 +26,7 @@ public final class ConnectionInstrumentation extends Instrumenter.Default {
|
|||
}
|
||||
|
||||
@Override
|
||||
public ElementMatcher typeMatcher() {
|
||||
public ElementMatcher<TypeDescription> typeMatcher() {
|
||||
return not(isInterface()).and(safeHasSuperType(named("java.sql.Connection")));
|
||||
}
|
||||
|
||||
|
|
|
@ -27,6 +27,7 @@ import java.util.Collections;
|
|||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import net.bytebuddy.asm.Advice;
|
||||
import net.bytebuddy.description.type.TypeDescription;
|
||||
import net.bytebuddy.matcher.ElementMatcher;
|
||||
|
||||
@AutoService(Instrumenter.class)
|
||||
|
@ -36,7 +37,7 @@ public final class PreparedStatementInstrumentation extends Instrumenter.Default
|
|||
}
|
||||
|
||||
@Override
|
||||
public ElementMatcher typeMatcher() {
|
||||
public ElementMatcher<TypeDescription> typeMatcher() {
|
||||
return not(isInterface()).and(safeHasSuperType(named("java.sql.PreparedStatement")));
|
||||
}
|
||||
|
||||
|
|
|
@ -27,6 +27,7 @@ import java.util.Collections;
|
|||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import net.bytebuddy.asm.Advice;
|
||||
import net.bytebuddy.description.type.TypeDescription;
|
||||
import net.bytebuddy.matcher.ElementMatcher;
|
||||
|
||||
@AutoService(Instrumenter.class)
|
||||
|
@ -37,7 +38,7 @@ public final class StatementInstrumentation extends Instrumenter.Default {
|
|||
}
|
||||
|
||||
@Override
|
||||
public ElementMatcher typeMatcher() {
|
||||
public ElementMatcher<TypeDescription> typeMatcher() {
|
||||
return not(isInterface()).and(safeHasSuperType(named("java.sql.Statement")));
|
||||
}
|
||||
|
||||
|
|
|
@ -19,6 +19,7 @@ import java.util.Collections;
|
|||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import net.bytebuddy.asm.Advice;
|
||||
import net.bytebuddy.description.type.TypeDescription;
|
||||
import net.bytebuddy.matcher.ElementMatcher;
|
||||
import redis.clients.jedis.Protocol.Command;
|
||||
|
||||
|
@ -33,12 +34,12 @@ public final class JedisInstrumentation extends Instrumenter.Default {
|
|||
}
|
||||
|
||||
@Override
|
||||
public ElementMatcher typeMatcher() {
|
||||
public ElementMatcher<TypeDescription> typeMatcher() {
|
||||
return named("redis.clients.jedis.Protocol");
|
||||
}
|
||||
|
||||
@Override
|
||||
public ElementMatcher<? super ClassLoader> classLoaderMatcher() {
|
||||
public ElementMatcher<ClassLoader> classLoaderMatcher() {
|
||||
return classLoaderHasClasses("redis.clients.jedis.Protocol$Command");
|
||||
}
|
||||
|
||||
|
|
|
@ -12,6 +12,7 @@ import com.google.auto.service.AutoService;
|
|||
import datadog.trace.agent.tooling.Instrumenter;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import net.bytebuddy.description.type.TypeDescription;
|
||||
import net.bytebuddy.matcher.ElementMatcher;
|
||||
|
||||
@AutoService(Instrumenter.class)
|
||||
|
@ -28,14 +29,14 @@ public final class HandlerInstrumentation extends Instrumenter.Default {
|
|||
}
|
||||
|
||||
@Override
|
||||
public ElementMatcher typeMatcher() {
|
||||
public ElementMatcher<TypeDescription> typeMatcher() {
|
||||
return not(isInterface())
|
||||
.and(safeHasSuperType(named("org.eclipse.jetty.server.Handler")))
|
||||
.and(not(named("org.eclipse.jetty.server.handler.HandlerWrapper")));
|
||||
}
|
||||
|
||||
@Override
|
||||
public ElementMatcher<? super ClassLoader> classLoaderMatcher() {
|
||||
public ElementMatcher<ClassLoader> classLoaderMatcher() {
|
||||
return not(classLoaderHasClasses("org.eclipse.jetty.server.AsyncContext"));
|
||||
}
|
||||
|
||||
|
|
|
@ -46,12 +46,12 @@ public final class JMS1MessageConsumerInstrumentation extends Instrumenter.Defau
|
|||
}
|
||||
|
||||
@Override
|
||||
public ElementMatcher<? super TypeDescription> typeMatcher() {
|
||||
public ElementMatcher<TypeDescription> typeMatcher() {
|
||||
return not(isInterface()).and(safeHasSuperType(named("javax.jms.MessageConsumer")));
|
||||
}
|
||||
|
||||
@Override
|
||||
public ElementMatcher<? super ClassLoader> classLoaderMatcher() {
|
||||
public ElementMatcher<ClassLoader> classLoaderMatcher() {
|
||||
return not(classLoaderHasClasses("javax.jms.JMSContext", "javax.jms.CompletionListener"));
|
||||
}
|
||||
|
||||
|
|
|
@ -28,6 +28,7 @@ import java.util.Map;
|
|||
import javax.jms.Message;
|
||||
import javax.jms.MessageListener;
|
||||
import net.bytebuddy.asm.Advice;
|
||||
import net.bytebuddy.description.type.TypeDescription;
|
||||
import net.bytebuddy.matcher.ElementMatcher;
|
||||
|
||||
@AutoService(Instrumenter.class)
|
||||
|
@ -38,12 +39,12 @@ public final class JMS1MessageListenerInstrumentation extends Instrumenter.Defau
|
|||
}
|
||||
|
||||
@Override
|
||||
public ElementMatcher typeMatcher() {
|
||||
public ElementMatcher<TypeDescription> typeMatcher() {
|
||||
return not(isInterface()).and(safeHasSuperType(named("javax.jms.MessageListener")));
|
||||
}
|
||||
|
||||
@Override
|
||||
public ElementMatcher<? super ClassLoader> classLoaderMatcher() {
|
||||
public ElementMatcher<ClassLoader> classLoaderMatcher() {
|
||||
return not(classLoaderHasClasses("javax.jms.JMSContext", "javax.jms.CompletionListener"));
|
||||
}
|
||||
|
||||
|
|
|
@ -28,6 +28,7 @@ import javax.jms.JMSException;
|
|||
import javax.jms.Message;
|
||||
import javax.jms.MessageProducer;
|
||||
import net.bytebuddy.asm.Advice;
|
||||
import net.bytebuddy.description.type.TypeDescription;
|
||||
import net.bytebuddy.matcher.ElementMatcher;
|
||||
|
||||
@AutoService(Instrumenter.class)
|
||||
|
@ -38,12 +39,12 @@ public final class JMS1MessageProducerInstrumentation extends Instrumenter.Defau
|
|||
}
|
||||
|
||||
@Override
|
||||
public ElementMatcher typeMatcher() {
|
||||
public ElementMatcher<TypeDescription> typeMatcher() {
|
||||
return not(isInterface()).and(safeHasSuperType(named("javax.jms.MessageProducer")));
|
||||
}
|
||||
|
||||
@Override
|
||||
public ElementMatcher<? super ClassLoader> classLoaderMatcher() {
|
||||
public ElementMatcher<ClassLoader> classLoaderMatcher() {
|
||||
return not(classLoaderHasClasses("javax.jms.JMSContext", "javax.jms.CompletionListener"));
|
||||
}
|
||||
|
||||
|
|
|
@ -30,6 +30,7 @@ import java.util.concurrent.TimeUnit;
|
|||
import javax.jms.Message;
|
||||
import javax.jms.MessageConsumer;
|
||||
import net.bytebuddy.asm.Advice;
|
||||
import net.bytebuddy.description.type.TypeDescription;
|
||||
import net.bytebuddy.matcher.ElementMatcher;
|
||||
|
||||
@AutoService(Instrumenter.class)
|
||||
|
@ -45,12 +46,12 @@ public final class JMS2MessageConsumerInstrumentation extends Instrumenter.Defau
|
|||
}
|
||||
|
||||
@Override
|
||||
public ElementMatcher typeMatcher() {
|
||||
public ElementMatcher<TypeDescription> typeMatcher() {
|
||||
return not(isInterface()).and(safeHasSuperType(named("javax.jms.MessageConsumer")));
|
||||
}
|
||||
|
||||
@Override
|
||||
public ElementMatcher<? super ClassLoader> classLoaderMatcher() {
|
||||
public ElementMatcher<ClassLoader> classLoaderMatcher() {
|
||||
return classLoaderHasClasses("javax.jms.JMSContext", "javax.jms.CompletionListener");
|
||||
}
|
||||
|
||||
|
|
|
@ -28,6 +28,7 @@ import java.util.Map;
|
|||
import javax.jms.Message;
|
||||
import javax.jms.MessageListener;
|
||||
import net.bytebuddy.asm.Advice;
|
||||
import net.bytebuddy.description.type.TypeDescription;
|
||||
import net.bytebuddy.matcher.ElementMatcher;
|
||||
|
||||
@AutoService(Instrumenter.class)
|
||||
|
@ -38,12 +39,12 @@ public final class JMS2MessageListenerInstrumentation extends Instrumenter.Defau
|
|||
}
|
||||
|
||||
@Override
|
||||
public ElementMatcher typeMatcher() {
|
||||
public ElementMatcher<TypeDescription> typeMatcher() {
|
||||
return not(isInterface()).and(safeHasSuperType(named("javax.jms.MessageListener")));
|
||||
}
|
||||
|
||||
@Override
|
||||
public ElementMatcher<? super ClassLoader> classLoaderMatcher() {
|
||||
public ElementMatcher<ClassLoader> classLoaderMatcher() {
|
||||
return classLoaderHasClasses("javax.jms.JMSContext", "javax.jms.CompletionListener");
|
||||
}
|
||||
|
||||
|
|
|
@ -28,6 +28,7 @@ import javax.jms.JMSException;
|
|||
import javax.jms.Message;
|
||||
import javax.jms.MessageProducer;
|
||||
import net.bytebuddy.asm.Advice;
|
||||
import net.bytebuddy.description.type.TypeDescription;
|
||||
import net.bytebuddy.matcher.ElementMatcher;
|
||||
|
||||
@AutoService(Instrumenter.class)
|
||||
|
@ -38,12 +39,12 @@ public final class JMS2MessageProducerInstrumentation extends Instrumenter.Defau
|
|||
}
|
||||
|
||||
@Override
|
||||
public ElementMatcher typeMatcher() {
|
||||
public ElementMatcher<TypeDescription> typeMatcher() {
|
||||
return not(isInterface()).and(safeHasSuperType(named("javax.jms.MessageProducer")));
|
||||
}
|
||||
|
||||
@Override
|
||||
public ElementMatcher<? super ClassLoader> classLoaderMatcher() {
|
||||
public ElementMatcher<ClassLoader> classLoaderMatcher() {
|
||||
return classLoaderHasClasses("javax.jms.JMSContext", "javax.jms.CompletionListener");
|
||||
}
|
||||
|
||||
|
|
|
@ -23,6 +23,7 @@ import javax.servlet.RequestDispatcher;
|
|||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import net.bytebuddy.asm.Advice;
|
||||
import net.bytebuddy.description.type.TypeDescription;
|
||||
import net.bytebuddy.matcher.ElementMatcher;
|
||||
|
||||
@AutoService(Instrumenter.class)
|
||||
|
@ -38,7 +39,7 @@ public final class JSPInstrumentation extends Instrumenter.Default {
|
|||
}
|
||||
|
||||
@Override
|
||||
public ElementMatcher typeMatcher() {
|
||||
public ElementMatcher<TypeDescription> typeMatcher() {
|
||||
return not(isInterface()).and(safeHasSuperType(named("javax.servlet.jsp.HttpJspPage")));
|
||||
}
|
||||
|
||||
|
|
|
@ -18,6 +18,7 @@ import java.util.Collections;
|
|||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import net.bytebuddy.asm.Advice;
|
||||
import net.bytebuddy.description.type.TypeDescription;
|
||||
import net.bytebuddy.matcher.ElementMatcher;
|
||||
import org.apache.jasper.JspCompilationContext;
|
||||
|
||||
|
@ -34,18 +35,18 @@ public final class JasperJSPCompilationContextInstrumentation extends Instrument
|
|||
}
|
||||
|
||||
@Override
|
||||
public ElementMatcher typeMatcher() {
|
||||
public ElementMatcher<TypeDescription> typeMatcher() {
|
||||
return named("org.apache.jasper.JspCompilationContext");
|
||||
}
|
||||
|
||||
@Override
|
||||
public ElementMatcher<? super ClassLoader> classLoaderMatcher() {
|
||||
public ElementMatcher<ClassLoader> classLoaderMatcher() {
|
||||
return classLoaderHasClasses("org.apache.jasper.servlet.JspServletWrapper");
|
||||
}
|
||||
|
||||
@Override
|
||||
public Map<ElementMatcher, String> transformers() {
|
||||
Map<ElementMatcher, String> transformers = new HashMap<>();
|
||||
final Map<ElementMatcher, String> transformers = new HashMap<>();
|
||||
transformers.put(
|
||||
named("compile").and(takesArguments(0)).and(isPublic()),
|
||||
JasperJspCompilationContext.class.getName());
|
||||
|
@ -55,7 +56,7 @@ public final class JasperJSPCompilationContextInstrumentation extends Instrument
|
|||
public static class JasperJspCompilationContext {
|
||||
|
||||
@Advice.OnMethodEnter(suppress = Throwable.class)
|
||||
public static Scope startSpan(@Advice.This JspCompilationContext jspCompilationContext) {
|
||||
public static Scope startSpan(@Advice.This final JspCompilationContext jspCompilationContext) {
|
||||
|
||||
final Scope scope =
|
||||
GlobalTracer.get()
|
||||
|
|
|
@ -21,6 +21,7 @@ import java.util.HashMap;
|
|||
import java.util.Iterator;
|
||||
import java.util.Map;
|
||||
import net.bytebuddy.asm.Advice;
|
||||
import net.bytebuddy.description.type.TypeDescription;
|
||||
import net.bytebuddy.matcher.ElementMatcher;
|
||||
import org.apache.kafka.clients.consumer.ConsumerRecord;
|
||||
|
||||
|
@ -40,12 +41,12 @@ public final class KafkaConsumerInstrumentation extends Instrumenter.Default {
|
|||
}
|
||||
|
||||
@Override
|
||||
public ElementMatcher typeMatcher() {
|
||||
public ElementMatcher<TypeDescription> typeMatcher() {
|
||||
return named("org.apache.kafka.clients.consumer.ConsumerRecords");
|
||||
}
|
||||
|
||||
@Override
|
||||
public ElementMatcher<? super ClassLoader> classLoaderMatcher() {
|
||||
public ElementMatcher<ClassLoader> classLoaderMatcher() {
|
||||
return classLoaderHasClasses(
|
||||
"org.apache.kafka.common.header.Header", "org.apache.kafka.common.header.Headers");
|
||||
}
|
||||
|
@ -57,7 +58,7 @@ public final class KafkaConsumerInstrumentation extends Instrumenter.Default {
|
|||
|
||||
@Override
|
||||
public Map<ElementMatcher, String> transformers() {
|
||||
Map<ElementMatcher, String> transformers = new HashMap<>();
|
||||
final Map<ElementMatcher, String> transformers = new HashMap<>();
|
||||
transformers.put(
|
||||
isMethod()
|
||||
.and(isPublic())
|
||||
|
|
|
@ -20,6 +20,7 @@ import java.util.Collections;
|
|||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import net.bytebuddy.asm.Advice;
|
||||
import net.bytebuddy.description.type.TypeDescription;
|
||||
import net.bytebuddy.matcher.ElementMatcher;
|
||||
import org.apache.kafka.clients.producer.Callback;
|
||||
import org.apache.kafka.clients.producer.ProducerRecord;
|
||||
|
@ -41,12 +42,12 @@ public final class KafkaProducerInstrumentation extends Instrumenter.Default {
|
|||
}
|
||||
|
||||
@Override
|
||||
public ElementMatcher typeMatcher() {
|
||||
public ElementMatcher<TypeDescription> typeMatcher() {
|
||||
return named("org.apache.kafka.clients.producer.KafkaProducer");
|
||||
}
|
||||
|
||||
@Override
|
||||
public ElementMatcher<? super ClassLoader> classLoaderMatcher() {
|
||||
public ElementMatcher<ClassLoader> classLoaderMatcher() {
|
||||
return classLoaderHasClasses(
|
||||
"org.apache.kafka.common.header.Header", "org.apache.kafka.common.header.Headers");
|
||||
}
|
||||
|
@ -58,7 +59,7 @@ public final class KafkaProducerInstrumentation extends Instrumenter.Default {
|
|||
|
||||
@Override
|
||||
public Map<ElementMatcher, String> transformers() {
|
||||
Map<ElementMatcher, String> transformers = new HashMap<>();
|
||||
final Map<ElementMatcher, String> transformers = new HashMap<>();
|
||||
transformers.put(
|
||||
isMethod()
|
||||
.and(isPublic())
|
||||
|
|
|
@ -23,6 +23,7 @@ import java.util.Collections;
|
|||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import net.bytebuddy.asm.Advice;
|
||||
import net.bytebuddy.description.type.TypeDescription;
|
||||
import net.bytebuddy.matcher.ElementMatcher;
|
||||
import org.apache.kafka.streams.processor.internals.StampedRecord;
|
||||
|
||||
|
@ -41,12 +42,12 @@ public class KafkaStreamsProcessorInstrumentation {
|
|||
}
|
||||
|
||||
@Override
|
||||
public ElementMatcher typeMatcher() {
|
||||
public ElementMatcher<TypeDescription> typeMatcher() {
|
||||
return named("org.apache.kafka.streams.processor.internals.PartitionGroup");
|
||||
}
|
||||
|
||||
@Override
|
||||
public ElementMatcher<? super ClassLoader> classLoaderMatcher() {
|
||||
public ElementMatcher<ClassLoader> classLoaderMatcher() {
|
||||
return classLoaderHasClasses("org.apache.kafka.streams.state.internals.OrderedBytes");
|
||||
}
|
||||
|
||||
|
@ -57,7 +58,7 @@ public class KafkaStreamsProcessorInstrumentation {
|
|||
|
||||
@Override
|
||||
public Map<ElementMatcher, String> transformers() {
|
||||
Map<ElementMatcher, String> transformers = new HashMap<>();
|
||||
final Map<ElementMatcher, String> transformers = new HashMap<>();
|
||||
transformers.put(
|
||||
isMethod()
|
||||
.and(isPackagePrivate())
|
||||
|
@ -103,12 +104,12 @@ public class KafkaStreamsProcessorInstrumentation {
|
|||
}
|
||||
|
||||
@Override
|
||||
public ElementMatcher typeMatcher() {
|
||||
public ElementMatcher<TypeDescription> typeMatcher() {
|
||||
return named("org.apache.kafka.streams.processor.internals.StreamTask");
|
||||
}
|
||||
|
||||
@Override
|
||||
public ElementMatcher<? super ClassLoader> classLoaderMatcher() {
|
||||
public ElementMatcher<ClassLoader> classLoaderMatcher() {
|
||||
return classLoaderHasClasses(
|
||||
"org.apache.kafka.common.header.Header", "org.apache.kafka.common.header.Headers");
|
||||
}
|
||||
|
@ -120,7 +121,7 @@ public class KafkaStreamsProcessorInstrumentation {
|
|||
|
||||
@Override
|
||||
public Map<ElementMatcher, String> transformers() {
|
||||
Map<ElementMatcher, String> transformers = new HashMap<>();
|
||||
final Map<ElementMatcher, String> transformers = new HashMap<>();
|
||||
transformers.put(
|
||||
isMethod().and(isPublic()).and(named("process")).and(takesArguments(0)),
|
||||
StopSpanAdvice.class.getName());
|
||||
|
|
|
@ -12,6 +12,7 @@ import datadog.trace.agent.tooling.Instrumenter;
|
|||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import net.bytebuddy.asm.Advice;
|
||||
import net.bytebuddy.description.type.TypeDescription;
|
||||
import net.bytebuddy.matcher.ElementMatcher;
|
||||
import org.apache.kafka.clients.consumer.ConsumerRecord;
|
||||
import org.apache.kafka.common.record.TimestampType;
|
||||
|
@ -25,18 +26,18 @@ public class KafkaStreamsSourceNodeRecordDeserializerInstrumentation extends Ins
|
|||
}
|
||||
|
||||
@Override
|
||||
public ElementMatcher typeMatcher() {
|
||||
public ElementMatcher<TypeDescription> typeMatcher() {
|
||||
return named("org.apache.kafka.streams.processor.internals.SourceNodeRecordDeserializer");
|
||||
}
|
||||
|
||||
@Override
|
||||
public ElementMatcher<? super ClassLoader> classLoaderMatcher() {
|
||||
public ElementMatcher<ClassLoader> classLoaderMatcher() {
|
||||
return classLoaderHasClasses("org.apache.kafka.streams.state.internals.OrderedBytes");
|
||||
}
|
||||
|
||||
@Override
|
||||
public Map<ElementMatcher, String> transformers() {
|
||||
Map<ElementMatcher, String> transformers = new HashMap<>();
|
||||
final Map<ElementMatcher, String> transformers = new HashMap<>();
|
||||
transformers.put(
|
||||
isMethod()
|
||||
.and(isPublic())
|
||||
|
|
|
@ -9,6 +9,7 @@ import com.google.auto.service.AutoService;
|
|||
import datadog.trace.agent.tooling.Instrumenter;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import net.bytebuddy.description.type.TypeDescription;
|
||||
import net.bytebuddy.matcher.ElementMatcher;
|
||||
|
||||
@AutoService(Instrumenter.class)
|
||||
|
@ -22,12 +23,12 @@ public class LettuceAsyncCommandsInstrumentation extends Instrumenter.Default {
|
|||
}
|
||||
|
||||
@Override
|
||||
public ElementMatcher typeMatcher() {
|
||||
public ElementMatcher<TypeDescription> typeMatcher() {
|
||||
return named("io.lettuce.core.AbstractRedisAsyncCommands");
|
||||
}
|
||||
|
||||
@Override
|
||||
public ElementMatcher<? super ClassLoader> classLoaderMatcher() {
|
||||
public ElementMatcher<ClassLoader> classLoaderMatcher() {
|
||||
return classLoaderHasClasses("io.lettuce.core.RedisClient");
|
||||
}
|
||||
|
||||
|
|
|
@ -13,6 +13,7 @@ import com.google.auto.service.AutoService;
|
|||
import datadog.trace.agent.tooling.Instrumenter;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import net.bytebuddy.description.type.TypeDescription;
|
||||
import net.bytebuddy.matcher.ElementMatcher;
|
||||
|
||||
@AutoService(Instrumenter.class)
|
||||
|
@ -32,12 +33,12 @@ public final class LettuceClientInstrumentation extends Instrumenter.Default {
|
|||
}
|
||||
|
||||
@Override
|
||||
public ElementMatcher typeMatcher() {
|
||||
public ElementMatcher<TypeDescription> typeMatcher() {
|
||||
return named("io.lettuce.core.RedisClient");
|
||||
}
|
||||
|
||||
@Override
|
||||
public ElementMatcher<? super ClassLoader> classLoaderMatcher() {
|
||||
public ElementMatcher<ClassLoader> classLoaderMatcher() {
|
||||
return classLoaderHasClasses("io.lettuce.core.RedisClient");
|
||||
}
|
||||
|
||||
|
|
|
@ -12,6 +12,7 @@ import com.google.auto.service.AutoService;
|
|||
import datadog.trace.agent.tooling.Instrumenter;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import net.bytebuddy.description.type.TypeDescription;
|
||||
import net.bytebuddy.matcher.ElementMatcher;
|
||||
|
||||
@AutoService(Instrumenter.class)
|
||||
|
@ -25,12 +26,12 @@ public class LettuceReactiveCommandsInstrumentation extends Instrumenter.Default
|
|||
}
|
||||
|
||||
@Override
|
||||
public ElementMatcher typeMatcher() {
|
||||
public ElementMatcher<TypeDescription> typeMatcher() {
|
||||
return named("io.lettuce.core.AbstractRedisReactiveCommands");
|
||||
}
|
||||
|
||||
@Override
|
||||
public ElementMatcher<? super ClassLoader> classLoaderMatcher() {
|
||||
public ElementMatcher<ClassLoader> classLoaderMatcher() {
|
||||
return classLoaderHasClasses("io.lettuce.core.RedisClient");
|
||||
}
|
||||
|
||||
|
|
|
@ -28,7 +28,7 @@ public final class MongoClientInstrumentation extends Instrumenter.Default {
|
|||
}
|
||||
|
||||
@Override
|
||||
public ElementMatcher typeMatcher() {
|
||||
public ElementMatcher<TypeDescription> typeMatcher() {
|
||||
return named("com.mongodb.MongoClientOptions$Builder")
|
||||
.and(
|
||||
declaresMethod(
|
||||
|
@ -50,7 +50,7 @@ public final class MongoClientInstrumentation extends Instrumenter.Default {
|
|||
|
||||
@Override
|
||||
public Map<ElementMatcher, String> transformers() {
|
||||
Map<ElementMatcher, String> transformers = new HashMap<>();
|
||||
final Map<ElementMatcher, String> transformers = new HashMap<>();
|
||||
transformers.put(
|
||||
isMethod().and(isPublic()).and(named("build")).and(takesArguments(0)),
|
||||
MongoClientAdvice.class.getName());
|
||||
|
|
|
@ -26,7 +26,7 @@ public final class MongoAsyncClientInstrumentation extends Instrumenter.Default
|
|||
}
|
||||
|
||||
@Override
|
||||
public ElementMatcher typeMatcher() {
|
||||
public ElementMatcher<TypeDescription> typeMatcher() {
|
||||
return named("com.mongodb.async.client.MongoClientSettings$Builder")
|
||||
.and(
|
||||
declaresMethod(
|
||||
|
@ -48,7 +48,7 @@ public final class MongoAsyncClientInstrumentation extends Instrumenter.Default
|
|||
|
||||
@Override
|
||||
public Map<ElementMatcher, String> transformers() {
|
||||
Map<ElementMatcher, String> transformers = new HashMap<>();
|
||||
final Map<ElementMatcher, String> transformers = new HashMap<>();
|
||||
transformers.put(
|
||||
isMethod().and(isPublic()).and(named("build")).and(takesArguments(0)),
|
||||
MongoAsyncClientAdvice.class.getName());
|
||||
|
|
|
@ -29,6 +29,7 @@ import io.netty.handler.codec.http.HttpServerCodec;
|
|||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import net.bytebuddy.asm.Advice;
|
||||
import net.bytebuddy.description.type.TypeDescription;
|
||||
import net.bytebuddy.matcher.ElementMatcher;
|
||||
|
||||
@AutoService(Instrumenter.class)
|
||||
|
@ -47,12 +48,12 @@ public class NettyChannelPipelineInstrumentation extends Instrumenter.Default {
|
|||
}
|
||||
|
||||
@Override
|
||||
public ElementMatcher typeMatcher() {
|
||||
public ElementMatcher<TypeDescription> typeMatcher() {
|
||||
return not(isInterface()).and(safeHasSuperType(named("io.netty.channel.ChannelPipeline")));
|
||||
}
|
||||
|
||||
@Override
|
||||
public ElementMatcher<? super ClassLoader> classLoaderMatcher() {
|
||||
public ElementMatcher<ClassLoader> classLoaderMatcher() {
|
||||
return classLoaderHasClasses("io.netty.handler.codec.spdy.SpdyOrHttpChooser");
|
||||
}
|
||||
|
||||
|
|
|
@ -29,6 +29,7 @@ import io.netty.handler.codec.http.HttpServerCodec;
|
|||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import net.bytebuddy.asm.Advice;
|
||||
import net.bytebuddy.description.type.TypeDescription;
|
||||
import net.bytebuddy.matcher.ElementMatcher;
|
||||
|
||||
@AutoService(Instrumenter.class)
|
||||
|
@ -47,12 +48,12 @@ public class NettyChannelPipelineInstrumentation extends Instrumenter.Default {
|
|||
}
|
||||
|
||||
@Override
|
||||
public ElementMatcher typeMatcher() {
|
||||
public ElementMatcher<TypeDescription> typeMatcher() {
|
||||
return not(isInterface()).and(safeHasSuperType(named("io.netty.channel.ChannelPipeline")));
|
||||
}
|
||||
|
||||
@Override
|
||||
public ElementMatcher<? super ClassLoader> classLoaderMatcher() {
|
||||
public ElementMatcher<ClassLoader> classLoaderMatcher() {
|
||||
return classLoaderHasClasses("io.netty.handler.codec.http.HttpHeaderValues");
|
||||
}
|
||||
|
||||
|
|
|
@ -13,6 +13,7 @@ import java.util.Collections;
|
|||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import net.bytebuddy.asm.Advice;
|
||||
import net.bytebuddy.description.type.TypeDescription;
|
||||
import net.bytebuddy.matcher.ElementMatcher;
|
||||
import okhttp3.Interceptor;
|
||||
import okhttp3.OkHttpClient;
|
||||
|
@ -25,12 +26,12 @@ public class OkHttp3Instrumentation extends Instrumenter.Default {
|
|||
}
|
||||
|
||||
@Override
|
||||
public ElementMatcher typeMatcher() {
|
||||
public ElementMatcher<TypeDescription> typeMatcher() {
|
||||
return named("okhttp3.OkHttpClient");
|
||||
}
|
||||
|
||||
@Override
|
||||
public ElementMatcher<? super ClassLoader> classLoaderMatcher() {
|
||||
public ElementMatcher<ClassLoader> classLoaderMatcher() {
|
||||
return classLoaderHasClasses(
|
||||
"okhttp3.Request",
|
||||
"okhttp3.Response",
|
||||
|
@ -60,7 +61,7 @@ public class OkHttp3Instrumentation extends Instrumenter.Default {
|
|||
|
||||
@Override
|
||||
public Map<ElementMatcher, String> transformers() {
|
||||
Map<ElementMatcher, String> transformers = new HashMap<>();
|
||||
final Map<ElementMatcher, String> transformers = new HashMap<>();
|
||||
transformers.put(
|
||||
isConstructor().and(takesArgument(0, named("okhttp3.OkHttpClient$Builder"))),
|
||||
OkHttp3Advice.class.getName());
|
||||
|
|
|
@ -5,6 +5,7 @@ import datadog.trace.agent.tooling.Instrumenter;
|
|||
import datadog.trace.agent.tooling.Utils;
|
||||
import java.util.Collections;
|
||||
import java.util.Map;
|
||||
import net.bytebuddy.description.type.TypeDescription;
|
||||
import net.bytebuddy.matcher.ElementMatcher;
|
||||
import net.bytebuddy.matcher.NameMatcher;
|
||||
import net.bytebuddy.matcher.StringMatcher;
|
||||
|
@ -16,17 +17,17 @@ public final class OSGIClassloadingInstrumentation extends Instrumenter.Default
|
|||
}
|
||||
|
||||
@Override
|
||||
public ElementMatcher typeMatcher() {
|
||||
public ElementMatcher<TypeDescription> typeMatcher() {
|
||||
// OSGI Bundle class loads the sys prop which defines bootstrap classes
|
||||
return new NameMatcher(
|
||||
return new NameMatcher<>(
|
||||
new StringMatcher("org.osgi.framework.Bundle", StringMatcher.Mode.EQUALS_FULLY) {
|
||||
@Override
|
||||
public boolean matches(String target) {
|
||||
public boolean matches(final String target) {
|
||||
if (super.matches(target)) {
|
||||
// This instrumentation modifies no bytes.
|
||||
// Instead it sets a system prop to tell osgi to delegate
|
||||
// classloads for datadog bootstrap classes
|
||||
StringBuilder ddPrefixes = new StringBuilder("");
|
||||
final StringBuilder ddPrefixes = new StringBuilder("");
|
||||
for (int i = 0; i < Utils.BOOTSTRAP_PACKAGE_PREFIXES.length; ++i) {
|
||||
if (i > 0) {
|
||||
// must append twice. Once for exact package and wildcard for child packages
|
||||
|
|
|
@ -27,6 +27,7 @@ import java.util.Iterator;
|
|||
import java.util.Map;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import net.bytebuddy.asm.Advice;
|
||||
import net.bytebuddy.description.type.TypeDescription;
|
||||
import net.bytebuddy.matcher.ElementMatcher;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import play.api.mvc.Action;
|
||||
|
@ -45,12 +46,12 @@ public final class PlayInstrumentation extends Instrumenter.Default {
|
|||
}
|
||||
|
||||
@Override
|
||||
public ElementMatcher typeMatcher() {
|
||||
public ElementMatcher<TypeDescription> typeMatcher() {
|
||||
return safeHasSuperType(named("play.api.mvc.Action"));
|
||||
}
|
||||
|
||||
@Override
|
||||
public ElementMatcher<? super ClassLoader> classLoaderMatcher() {
|
||||
public ElementMatcher<ClassLoader> classLoaderMatcher() {
|
||||
return classLoaderHasClasses(
|
||||
"akka.japi.JavaPartialFunction",
|
||||
"play.api.mvc.Action",
|
||||
|
|
|
@ -34,12 +34,12 @@ public final class RatpackHttpClientInstrumentation extends Instrumenter.Default
|
|||
}
|
||||
|
||||
@Override
|
||||
public ElementMatcher typeMatcher() {
|
||||
public ElementMatcher<TypeDescription> typeMatcher() {
|
||||
return not(isInterface()).and(safeHasSuperType(named("ratpack.http.client.HttpClient")));
|
||||
}
|
||||
|
||||
@Override
|
||||
public ElementMatcher<? super ClassLoader> classLoaderMatcher() {
|
||||
public ElementMatcher<ClassLoader> classLoaderMatcher() {
|
||||
return CLASSLOADER_CONTAINS_RATPACK_1_4_OR_ABOVE;
|
||||
}
|
||||
|
||||
|
|
|
@ -43,12 +43,12 @@ public final class RatpackInstrumentation extends Instrumenter.Default {
|
|||
}
|
||||
|
||||
@Override
|
||||
public ElementMatcher typeMatcher() {
|
||||
public ElementMatcher<TypeDescription> typeMatcher() {
|
||||
return named("ratpack.server.internal.ServerRegistry");
|
||||
}
|
||||
|
||||
@Override
|
||||
public ElementMatcher<? super ClassLoader> classLoaderMatcher() {
|
||||
public ElementMatcher<ClassLoader> classLoaderMatcher() {
|
||||
return CLASSLOADER_CONTAINS_RATPACK_1_4_OR_ABOVE;
|
||||
}
|
||||
|
||||
|
@ -90,12 +90,12 @@ public final class RatpackInstrumentation extends Instrumenter.Default {
|
|||
}
|
||||
|
||||
@Override
|
||||
public ElementMatcher typeMatcher() {
|
||||
public ElementMatcher<TypeDescription> typeMatcher() {
|
||||
return not(isInterface()).and(safeHasSuperType(named("ratpack.exec.ExecStarter")));
|
||||
}
|
||||
|
||||
@Override
|
||||
public ElementMatcher<? super ClassLoader> classLoaderMatcher() {
|
||||
public ElementMatcher<ClassLoader> classLoaderMatcher() {
|
||||
return CLASSLOADER_CONTAINS_RATPACK_1_4_OR_ABOVE;
|
||||
}
|
||||
|
||||
|
@ -134,13 +134,13 @@ public final class RatpackInstrumentation extends Instrumenter.Default {
|
|||
}
|
||||
|
||||
@Override
|
||||
public ElementMatcher typeMatcher() {
|
||||
public ElementMatcher<TypeDescription> typeMatcher() {
|
||||
return named("ratpack.exec.Execution")
|
||||
.or(not(isInterface()).and(safeHasSuperType(named("ratpack.exec.Execution"))));
|
||||
}
|
||||
|
||||
@Override
|
||||
public ElementMatcher<? super ClassLoader> classLoaderMatcher() {
|
||||
public ElementMatcher<ClassLoader> classLoaderMatcher() {
|
||||
return CLASSLOADER_CONTAINS_RATPACK_1_4_OR_ABOVE;
|
||||
}
|
||||
|
||||
|
|
|
@ -6,8 +6,8 @@ versionScan {
|
|||
versions = "[2.3,)"
|
||||
verifyPresent = [
|
||||
"javax.servlet.ServletContextEvent": null,
|
||||
"javax.servlet.FilterChain" : null,
|
||||
]
|
||||
// Code should also verify against what servlet-3 instrumentation is using.
|
||||
}
|
||||
|
||||
apply from: "${rootDir}/gradle/java.gradle"
|
||||
|
|
|
@ -0,0 +1,28 @@
|
|||
package datadog.trace.instrumentation.servlet2;
|
||||
|
||||
import static datadog.trace.agent.tooling.ClassLoaderMatcher.classLoaderHasClasses;
|
||||
import static net.bytebuddy.matcher.ElementMatchers.not;
|
||||
|
||||
import datadog.trace.agent.tooling.Instrumenter;
|
||||
import net.bytebuddy.matcher.ElementMatcher;
|
||||
|
||||
public abstract class AbstractServlet2Instrumentation extends Instrumenter.Default {
|
||||
|
||||
public AbstractServlet2Instrumentation() {
|
||||
super("servlet", "servlet-2");
|
||||
}
|
||||
|
||||
@Override
|
||||
public ElementMatcher<ClassLoader> classLoaderMatcher() {
|
||||
return not(classLoaderHasClasses("javax.servlet.AsyncEvent", "javax.servlet.AsyncListener"))
|
||||
.and(classLoaderHasClasses("javax.servlet.ServletContextEvent"));
|
||||
}
|
||||
|
||||
@Override
|
||||
public String[] helperClassNames() {
|
||||
return new String[] {
|
||||
"datadog.trace.instrumentation.servlet2.HttpServletRequestExtractAdapter",
|
||||
"datadog.trace.instrumentation.servlet2.HttpServletRequestExtractAdapter$MultivaluedMapFlatIterator"
|
||||
};
|
||||
}
|
||||
}
|
|
@ -1,7 +1,6 @@
|
|||
package datadog.trace.instrumentation.servlet2;
|
||||
|
||||
import static datadog.trace.agent.tooling.ByteBuddyElementMatchers.safeHasSuperType;
|
||||
import static datadog.trace.agent.tooling.ClassLoaderMatcher.classLoaderHasClasses;
|
||||
import static net.bytebuddy.matcher.ElementMatchers.isInterface;
|
||||
import static net.bytebuddy.matcher.ElementMatchers.isPublic;
|
||||
import static net.bytebuddy.matcher.ElementMatchers.named;
|
||||
|
@ -12,33 +11,17 @@ import com.google.auto.service.AutoService;
|
|||
import datadog.trace.agent.tooling.Instrumenter;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import net.bytebuddy.description.type.TypeDescription;
|
||||
import net.bytebuddy.matcher.ElementMatcher;
|
||||
|
||||
@AutoService(Instrumenter.class)
|
||||
public final class FilterChain2Instrumentation extends Instrumenter.Default {
|
||||
|
||||
public FilterChain2Instrumentation() {
|
||||
super("servlet", "servlet-2");
|
||||
}
|
||||
public final class FilterChain2Instrumentation extends AbstractServlet2Instrumentation {
|
||||
|
||||
@Override
|
||||
public ElementMatcher typeMatcher() {
|
||||
public ElementMatcher<TypeDescription> typeMatcher() {
|
||||
return not(isInterface()).and(safeHasSuperType(named("javax.servlet.FilterChain")));
|
||||
}
|
||||
|
||||
@Override
|
||||
public ElementMatcher<? super ClassLoader> classLoaderMatcher() {
|
||||
return not(classLoaderHasClasses("javax.servlet.AsyncEvent", "javax.servlet.AsyncListener"))
|
||||
.and(
|
||||
classLoaderHasClasses(
|
||||
"javax.servlet.ServletContextEvent", "javax.servlet.ServletRequest"));
|
||||
}
|
||||
|
||||
@Override
|
||||
public String[] helperClassNames() {
|
||||
return HttpServlet2Instrumentation.HELPERS;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Map<ElementMatcher, String> transformers() {
|
||||
final Map<ElementMatcher, String> transformers = new HashMap<>();
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
package datadog.trace.instrumentation.servlet2;
|
||||
|
||||
import static datadog.trace.agent.tooling.ByteBuddyElementMatchers.safeHasSuperType;
|
||||
import static datadog.trace.agent.tooling.ClassLoaderMatcher.classLoaderHasClasses;
|
||||
import static net.bytebuddy.matcher.ElementMatchers.isInterface;
|
||||
import static net.bytebuddy.matcher.ElementMatchers.isProtected;
|
||||
import static net.bytebuddy.matcher.ElementMatchers.named;
|
||||
|
@ -12,38 +11,17 @@ import com.google.auto.service.AutoService;
|
|||
import datadog.trace.agent.tooling.Instrumenter;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import net.bytebuddy.description.type.TypeDescription;
|
||||
import net.bytebuddy.matcher.ElementMatcher;
|
||||
|
||||
@AutoService(Instrumenter.class)
|
||||
public final class HttpServlet2Instrumentation extends Instrumenter.Default {
|
||||
static final String[] HELPERS =
|
||||
new String[] {
|
||||
"datadog.trace.instrumentation.servlet2.HttpServletRequestExtractAdapter",
|
||||
"datadog.trace.instrumentation.servlet2.HttpServletRequestExtractAdapter$MultivaluedMapFlatIterator"
|
||||
};
|
||||
|
||||
public HttpServlet2Instrumentation() {
|
||||
super("servlet", "servlet-2");
|
||||
}
|
||||
public final class HttpServlet2Instrumentation extends AbstractServlet2Instrumentation {
|
||||
|
||||
@Override
|
||||
public ElementMatcher typeMatcher() {
|
||||
public ElementMatcher<TypeDescription> typeMatcher() {
|
||||
return not(isInterface()).and(safeHasSuperType(named("javax.servlet.http.HttpServlet")));
|
||||
}
|
||||
|
||||
@Override
|
||||
public ElementMatcher<? super ClassLoader> classLoaderMatcher() {
|
||||
return not(classLoaderHasClasses("javax.servlet.AsyncEvent", "javax.servlet.AsyncListener"))
|
||||
.and(
|
||||
classLoaderHasClasses(
|
||||
"javax.servlet.ServletContextEvent", "javax.servlet.FilterChain"));
|
||||
}
|
||||
|
||||
@Override
|
||||
public String[] helperClassNames() {
|
||||
return HELPERS;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Map<ElementMatcher, String> transformers() {
|
||||
final Map<ElementMatcher, String> transformers = new HashMap<>();
|
||||
|
|
|
@ -15,7 +15,6 @@ import java.util.Collections;
|
|||
import javax.servlet.ServletRequest;
|
||||
import javax.servlet.ServletResponse;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import net.bytebuddy.asm.Advice;
|
||||
|
||||
public class Servlet2Advice {
|
||||
|
@ -65,14 +64,14 @@ public class Servlet2Advice {
|
|||
@Advice.Thrown final Throwable throwable) {
|
||||
|
||||
if (scope != null) {
|
||||
if (request instanceof HttpServletRequest && response instanceof HttpServletResponse) {
|
||||
final Span span = scope.span();
|
||||
|
||||
// HttpServletResponse doesn't have accessor for status code.
|
||||
|
||||
if (throwable != null) {
|
||||
Tags.ERROR.set(span, Boolean.TRUE);
|
||||
span.log(Collections.singletonMap(ERROR_OBJECT, throwable));
|
||||
}
|
||||
}
|
||||
if (scope instanceof TraceScope) {
|
||||
((TraceScope) scope).setAsyncPropagation(false);
|
||||
}
|
||||
|
|
|
@ -1,31 +1,18 @@
|
|||
package datadog.trace.instrumentation.servlet3;
|
||||
|
||||
import static datadog.trace.agent.tooling.ByteBuddyElementMatchers.safeHasSuperType;
|
||||
import static datadog.trace.agent.tooling.ClassLoaderMatcher.classLoaderHasClasses;
|
||||
import static net.bytebuddy.matcher.ElementMatchers.isInterface;
|
||||
import static net.bytebuddy.matcher.ElementMatchers.isPublic;
|
||||
import static net.bytebuddy.matcher.ElementMatchers.named;
|
||||
import static net.bytebuddy.matcher.ElementMatchers.not;
|
||||
import static net.bytebuddy.matcher.ElementMatchers.takesArgument;
|
||||
|
||||
import datadog.trace.agent.tooling.Instrumenter;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import net.bytebuddy.matcher.ElementMatcher;
|
||||
|
||||
public class AbstractServlet3Instrumentation extends Instrumenter.Default {
|
||||
public abstract class AbstractServlet3Instrumentation extends Instrumenter.Default {
|
||||
|
||||
public AbstractServlet3Instrumentation() {
|
||||
super("servlet", "servlet-3");
|
||||
}
|
||||
|
||||
@Override
|
||||
public ElementMatcher typeMatcher() {
|
||||
return not(isInterface()).and(safeHasSuperType(named("javax.servlet.FilterChain")));
|
||||
}
|
||||
|
||||
@Override
|
||||
public ElementMatcher<? super ClassLoader> classLoaderMatcher() {
|
||||
public ElementMatcher<ClassLoader> classLoaderMatcher() {
|
||||
return classLoaderHasClasses("javax.servlet.AsyncEvent", "javax.servlet.AsyncListener");
|
||||
}
|
||||
|
||||
|
@ -37,16 +24,4 @@ public class AbstractServlet3Instrumentation extends Instrumenter.Default {
|
|||
"datadog.trace.instrumentation.servlet3.TagSettingAsyncListener"
|
||||
};
|
||||
}
|
||||
|
||||
@Override
|
||||
public Map<ElementMatcher, String> transformers() {
|
||||
final Map<ElementMatcher, String> transformers = new HashMap<>();
|
||||
transformers.put(
|
||||
named("doFilter")
|
||||
.and(takesArgument(0, named("javax.servlet.ServletRequest")))
|
||||
.and(takesArgument(1, named("javax.servlet.ServletResponse")))
|
||||
.and(isPublic()),
|
||||
Servlet3Advice.class.getName());
|
||||
return transformers;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -11,13 +11,14 @@ import com.google.auto.service.AutoService;
|
|||
import datadog.trace.agent.tooling.Instrumenter;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import net.bytebuddy.description.type.TypeDescription;
|
||||
import net.bytebuddy.matcher.ElementMatcher;
|
||||
|
||||
@AutoService(Instrumenter.class)
|
||||
public final class FilterChain3Instrumentation extends AbstractServlet3Instrumentation {
|
||||
|
||||
@Override
|
||||
public ElementMatcher typeMatcher() {
|
||||
public ElementMatcher<TypeDescription> typeMatcher() {
|
||||
return not(isInterface()).and(safeHasSuperType(named("javax.servlet.FilterChain")));
|
||||
}
|
||||
|
||||
|
|
|
@ -11,13 +11,14 @@ import com.google.auto.service.AutoService;
|
|||
import datadog.trace.agent.tooling.Instrumenter;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import net.bytebuddy.description.type.TypeDescription;
|
||||
import net.bytebuddy.matcher.ElementMatcher;
|
||||
|
||||
@AutoService(Instrumenter.class)
|
||||
public final class HttpServlet3Instrumentation extends AbstractServlet3Instrumentation {
|
||||
|
||||
@Override
|
||||
public ElementMatcher typeMatcher() {
|
||||
public ElementMatcher<TypeDescription> typeMatcher() {
|
||||
return not(isInterface()).and(safeHasSuperType(named("javax.servlet.http.HttpServlet")));
|
||||
}
|
||||
|
||||
|
|
|
@ -13,6 +13,7 @@ import io.opentracing.util.GlobalTracer;
|
|||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import net.bytebuddy.asm.Advice;
|
||||
import net.bytebuddy.description.type.TypeDescription;
|
||||
import net.bytebuddy.matcher.ElementMatcher;
|
||||
import spark.route.HttpMethod;
|
||||
import spark.routematch.RouteMatch;
|
||||
|
@ -30,13 +31,13 @@ public class RoutesInstrumentation extends Instrumenter.Default {
|
|||
}
|
||||
|
||||
@Override
|
||||
public ElementMatcher typeMatcher() {
|
||||
public ElementMatcher<TypeDescription> typeMatcher() {
|
||||
return named("spark.route.Routes");
|
||||
}
|
||||
|
||||
@Override
|
||||
public Map<ElementMatcher, String> transformers() {
|
||||
Map<ElementMatcher, String> transformers = new HashMap<>();
|
||||
final Map<ElementMatcher, String> transformers = new HashMap<>();
|
||||
transformers.put(
|
||||
named("find")
|
||||
.and(takesArgument(0, named("spark.route.HttpMethod")))
|
||||
|
|
|
@ -15,6 +15,7 @@ import java.lang.reflect.Method;
|
|||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import net.bytebuddy.asm.Advice;
|
||||
import net.bytebuddy.description.type.TypeDescription;
|
||||
import net.bytebuddy.matcher.ElementMatcher;
|
||||
import net.spy.memcached.MemcachedClient;
|
||||
import net.spy.memcached.internal.BulkFuture;
|
||||
|
@ -33,12 +34,12 @@ public final class MemcachedClientInstrumentation extends Instrumenter.Default {
|
|||
}
|
||||
|
||||
@Override
|
||||
public ElementMatcher typeMatcher() {
|
||||
public ElementMatcher<TypeDescription> typeMatcher() {
|
||||
return named(MEMCACHED_PACKAGE + ".MemcachedClient");
|
||||
}
|
||||
|
||||
@Override
|
||||
public ElementMatcher<? super ClassLoader> classLoaderMatcher() {
|
||||
public ElementMatcher<ClassLoader> classLoaderMatcher() {
|
||||
// Target 2.12 that has this method
|
||||
return classLoaderHasClassWithMethod(
|
||||
MEMCACHED_PACKAGE + ".ConnectionFactoryBuilder",
|
||||
|
|
|
@ -78,7 +78,7 @@ public final class TraceAnnotationsInstrumentation extends Instrumenter.Default
|
|||
}
|
||||
|
||||
@Override
|
||||
public ElementMatcher typeMatcher() {
|
||||
public ElementMatcher<TypeDescription> typeMatcher() {
|
||||
return safeHasSuperType(declaresMethod(isAnnotatedWith(methodTraceMatcher)));
|
||||
}
|
||||
|
||||
|
|
|
@ -116,7 +116,7 @@ public class TraceConfigInstrumentation implements Instrumenter {
|
|||
}
|
||||
|
||||
@Override
|
||||
public ElementMatcher<? super TypeDescription> typeMatcher() {
|
||||
public ElementMatcher<TypeDescription> typeMatcher() {
|
||||
return safeHasSuperType(named(className));
|
||||
}
|
||||
|
||||
|
@ -138,12 +138,12 @@ public class TraceConfigInstrumentation implements Instrumenter {
|
|||
}
|
||||
|
||||
@Override
|
||||
public ElementMatcher<? super TypeDescription> typeMatcher() {
|
||||
public ElementMatcher<TypeDescription> typeMatcher() {
|
||||
throw new RuntimeException("TracerConfigInstrumentation must not use TypeMatcher");
|
||||
}
|
||||
|
||||
@Override
|
||||
public ElementMatcher<? super ClassLoader> classLoaderMatcher() {
|
||||
public ElementMatcher<ClassLoader> classLoaderMatcher() {
|
||||
throw new RuntimeException("TracerConfigInstrumentation must not use classLoaderMatcher");
|
||||
}
|
||||
|
||||
|
|
|
@ -5,6 +5,7 @@ import datadog.trace.agent.tooling.Instrumenter;
|
|||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import net.bytebuddy.asm.Advice;
|
||||
import net.bytebuddy.description.type.TypeDescription;
|
||||
import net.bytebuddy.matcher.ElementMatcher;
|
||||
|
||||
@AutoService(Instrumenter.class)
|
||||
|
@ -14,13 +15,13 @@ public class IBMResourceLevelInstrumentation extends Instrumenter.Default {
|
|||
}
|
||||
|
||||
@Override
|
||||
public ElementMatcher typeMatcher() {
|
||||
public ElementMatcher<TypeDescription> typeMatcher() {
|
||||
return named("com.ibm.as400.resource.ResourceLevel");
|
||||
}
|
||||
|
||||
@Override
|
||||
public Map<ElementMatcher, String> transformers() {
|
||||
Map<ElementMatcher, String> transformers = new HashMap<>();
|
||||
final Map<ElementMatcher, String> transformers = new HashMap<>();
|
||||
transformers.put(named("toString"), ToStringAdvice.class.getName());
|
||||
return transformers;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue