Merge pull request #1298 from DataDog/tyler/classloader-matcher
ClassLoader matcher cleanup
This commit is contained in:
commit
ca043a67b5
|
@ -8,6 +8,7 @@ import net.bytebuddy.matcher.ElementMatcher;
|
|||
@Slf4j
|
||||
public final class ClassLoaderMatcher {
|
||||
public static final ClassLoader BOOTSTRAP_CLASSLOADER = null;
|
||||
public static final int CACHE_MAX_SIZE = 25; // limit number of cached responses for each matcher.
|
||||
public static final int CACHE_CONCURRENCY =
|
||||
Math.max(8, Runtime.getRuntime().availableProcessors());
|
||||
|
||||
|
@ -20,9 +21,16 @@ public final class ClassLoaderMatcher {
|
|||
return SkipClassLoaderMatcher.INSTANCE;
|
||||
}
|
||||
|
||||
public static ElementMatcher.Junction.AbstractBase<ClassLoader> classLoaderHasNoResources(
|
||||
final String... resources) {
|
||||
return new ClassLoaderHasNoResourceMatcher(resources);
|
||||
/**
|
||||
* NOTICE: Does not match the bootstrap classpath. Don't use with classes expected to be on the
|
||||
* bootstrap.
|
||||
*
|
||||
* @param classNames list of names to match. returns true if empty.
|
||||
* @return true if class is available as a resource and not the bootstrap classloader.
|
||||
*/
|
||||
public static ElementMatcher.Junction.AbstractBase<ClassLoader> hasClassesNamed(
|
||||
final String... classNames) {
|
||||
return new ClassLoaderHasClassesNamedMatcher(classNames);
|
||||
}
|
||||
|
||||
private static final class SkipClassLoaderMatcher
|
||||
|
@ -57,38 +65,47 @@ public final class ClassLoaderMatcher {
|
|||
}
|
||||
}
|
||||
|
||||
private static class ClassLoaderHasNoResourceMatcher
|
||||
private static class ClassLoaderHasClassesNamedMatcher
|
||||
extends ElementMatcher.Junction.AbstractBase<ClassLoader> {
|
||||
|
||||
private final Cache<ClassLoader, Boolean> cache =
|
||||
CacheBuilder.newBuilder().weakKeys().concurrencyLevel(CACHE_CONCURRENCY).build();
|
||||
CacheBuilder.newBuilder()
|
||||
.weakKeys()
|
||||
.maximumSize(CACHE_MAX_SIZE)
|
||||
.concurrencyLevel(CACHE_CONCURRENCY)
|
||||
.build();
|
||||
|
||||
private final String[] resources;
|
||||
|
||||
private ClassLoaderHasNoResourceMatcher(final String... resources) {
|
||||
this.resources = resources;
|
||||
private ClassLoaderHasClassesNamedMatcher(final String... classNames) {
|
||||
resources = classNames;
|
||||
for (int i = 0; i < resources.length; i++) {
|
||||
resources[i] = resources[i].replace(".", "/") + ".class";
|
||||
}
|
||||
}
|
||||
|
||||
private boolean hasNoResources(final ClassLoader cl) {
|
||||
private boolean hasResources(final ClassLoader cl) {
|
||||
for (final String resource : resources) {
|
||||
if (cl.getResource(resource) == null) {
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean matches(final ClassLoader cl) {
|
||||
if (cl == null) {
|
||||
if (cl == BOOTSTRAP_CLASSLOADER) {
|
||||
// Can't match the bootstrap classloader.
|
||||
return false;
|
||||
}
|
||||
Boolean v = cache.getIfPresent(cl);
|
||||
if (v != null) {
|
||||
return v;
|
||||
final Boolean cached;
|
||||
if ((cached = cache.getIfPresent(cl)) != null) {
|
||||
return cached;
|
||||
}
|
||||
v = hasNoResources(cl);
|
||||
cache.put(cl, v);
|
||||
return v;
|
||||
final boolean value = hasResources(cl);
|
||||
cache.put(cl, value);
|
||||
return value;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
package datadog.trace.instrumentation.apachehttpasyncclient;
|
||||
|
||||
import static datadog.trace.agent.tooling.ClassLoaderMatcher.classLoaderHasNoResources;
|
||||
import static datadog.trace.agent.tooling.ClassLoaderMatcher.hasClassesNamed;
|
||||
import static datadog.trace.agent.tooling.bytebuddy.matcher.DDElementMatchers.implementsInterface;
|
||||
import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activeScope;
|
||||
import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.propagate;
|
||||
|
@ -10,7 +10,6 @@ import static datadog.trace.instrumentation.apachehttpasyncclient.HttpHeadersInj
|
|||
import static java.util.Collections.singletonMap;
|
||||
import static net.bytebuddy.matcher.ElementMatchers.isMethod;
|
||||
import static net.bytebuddy.matcher.ElementMatchers.named;
|
||||
import static net.bytebuddy.matcher.ElementMatchers.not;
|
||||
import static net.bytebuddy.matcher.ElementMatchers.takesArgument;
|
||||
import static net.bytebuddy.matcher.ElementMatchers.takesArguments;
|
||||
|
||||
|
@ -43,7 +42,7 @@ public class ApacheHttpAsyncClientInstrumentation extends Instrumenter.Default {
|
|||
@Override
|
||||
public ElementMatcher<ClassLoader> classLoaderMatcher() {
|
||||
// Optimization for expensive typeMatcher.
|
||||
return not(classLoaderHasNoResources("org/apache/http/nio/client/HttpAsyncClient.class"));
|
||||
return hasClassesNamed("org.apache.http.nio.client.HttpAsyncClient");
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -1,11 +1,10 @@
|
|||
package datadog.trace.instrumentation.apachehttpasyncclient;
|
||||
|
||||
import static datadog.trace.agent.tooling.ClassLoaderMatcher.classLoaderHasNoResources;
|
||||
import static datadog.trace.agent.tooling.ClassLoaderMatcher.hasClassesNamed;
|
||||
import static datadog.trace.agent.tooling.bytebuddy.matcher.DDElementMatchers.implementsInterface;
|
||||
import static java.util.Collections.singletonMap;
|
||||
import static net.bytebuddy.matcher.ElementMatchers.isMethod;
|
||||
import static net.bytebuddy.matcher.ElementMatchers.named;
|
||||
import static net.bytebuddy.matcher.ElementMatchers.not;
|
||||
import static net.bytebuddy.matcher.ElementMatchers.takesArgument;
|
||||
|
||||
import com.google.auto.service.AutoService;
|
||||
|
@ -34,7 +33,7 @@ public class ApacheHttpClientRedirectInstrumentation extends Instrumenter.Defaul
|
|||
@Override
|
||||
public ElementMatcher<ClassLoader> classLoaderMatcher() {
|
||||
// Optimization for expensive typeMatcher.
|
||||
return not(classLoaderHasNoResources("org/apache/http/client/RedirectStrategy.class"));
|
||||
return hasClassesNamed("org.apache.http.client.RedirectStrategy");
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
package datadog.trace.instrumentation.apachehttpclient;
|
||||
|
||||
import static datadog.trace.agent.tooling.ClassLoaderMatcher.classLoaderHasNoResources;
|
||||
import static datadog.trace.agent.tooling.ClassLoaderMatcher.hasClassesNamed;
|
||||
import static datadog.trace.agent.tooling.bytebuddy.matcher.DDElementMatchers.implementsInterface;
|
||||
import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan;
|
||||
import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.propagate;
|
||||
|
@ -45,7 +45,7 @@ public class ApacheHttpClientInstrumentation extends Instrumenter.Default {
|
|||
@Override
|
||||
public ElementMatcher<ClassLoader> classLoaderMatcher() {
|
||||
// Optimization for expensive typeMatcher.
|
||||
return not(classLoaderHasNoResources("org/apache/http/client/HttpClient.class"));
|
||||
return hasClassesNamed("org.apache.http.client.HttpClient");
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -1,11 +1,10 @@
|
|||
package datadog.trace.instrumentation.aws.v0;
|
||||
|
||||
import static datadog.trace.agent.tooling.ClassLoaderMatcher.classLoaderHasNoResources;
|
||||
import static datadog.trace.agent.tooling.ClassLoaderMatcher.hasClassesNamed;
|
||||
import static datadog.trace.agent.tooling.bytebuddy.matcher.DDElementMatchers.extendsClass;
|
||||
import static java.util.Collections.singletonMap;
|
||||
import static net.bytebuddy.matcher.ElementMatchers.nameStartsWith;
|
||||
import static net.bytebuddy.matcher.ElementMatchers.named;
|
||||
import static net.bytebuddy.matcher.ElementMatchers.not;
|
||||
import static net.bytebuddy.matcher.ElementMatchers.takesArgument;
|
||||
|
||||
import com.amazonaws.AmazonWebServiceRequest;
|
||||
|
@ -30,7 +29,7 @@ public final class RequestInstrumentation extends Instrumenter.Default {
|
|||
@Override
|
||||
public ElementMatcher<ClassLoader> classLoaderMatcher() {
|
||||
// Optimization for expensive typeMatcher.
|
||||
return not(classLoaderHasNoResources("com/amazonaws/AmazonWebServiceRequest.class"));
|
||||
return hasClassesNamed("com.amazonaws.AmazonWebServiceRequest");
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
package datadog.trace.instrumentation.aws.v2;
|
||||
|
||||
import static datadog.trace.agent.tooling.ClassLoaderMatcher.hasClassesNamed;
|
||||
import static datadog.trace.agent.tooling.bytebuddy.matcher.DDElementMatchers.implementsInterface;
|
||||
import static java.util.Collections.singletonMap;
|
||||
import static net.bytebuddy.matcher.ElementMatchers.isMethod;
|
||||
|
@ -20,6 +21,12 @@ import software.amazon.awssdk.core.client.builder.SdkClientBuilder;
|
|||
@AutoService(Instrumenter.class)
|
||||
public final class AwsClientInstrumentation extends AbstractAwsClientInstrumentation {
|
||||
|
||||
@Override
|
||||
public ElementMatcher<ClassLoader> classLoaderMatcher() {
|
||||
// Optimization for expensive typeMatcher.
|
||||
return hasClassesNamed("software.amazon.awssdk.core.client.builder.SdkClientBuilder");
|
||||
}
|
||||
|
||||
@Override
|
||||
public ElementMatcher<TypeDescription> typeMatcher() {
|
||||
return nameStartsWith("software.amazon.awssdk.")
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
package datadog.trace.instrumentation.aws.v2;
|
||||
|
||||
import static datadog.trace.agent.tooling.ClassLoaderMatcher.hasClassesNamed;
|
||||
import static datadog.trace.agent.tooling.bytebuddy.matcher.DDElementMatchers.extendsClass;
|
||||
import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activeScope;
|
||||
import static net.bytebuddy.matcher.ElementMatchers.isMethod;
|
||||
|
@ -25,6 +26,13 @@ import software.amazon.awssdk.core.internal.http.pipeline.stages.MakeAsyncHttpRe
|
|||
@AutoService(Instrumenter.class)
|
||||
public final class AwsHttpClientInstrumentation extends AbstractAwsClientInstrumentation {
|
||||
|
||||
@Override
|
||||
public ElementMatcher<ClassLoader> classLoaderMatcher() {
|
||||
// Optimization for expensive typeMatcher.
|
||||
return hasClassesNamed(
|
||||
"software.amazon.awssdk.core.internal.http.pipeline.stages.MakeHttpRequestStage");
|
||||
}
|
||||
|
||||
@Override
|
||||
public ElementMatcher<TypeDescription> typeMatcher() {
|
||||
return nameStartsWith("software.amazon.awssdk.")
|
||||
|
|
|
@ -1,12 +1,11 @@
|
|||
package datadog.trace.instrumentation.couchbase.client;
|
||||
|
||||
import static datadog.trace.agent.tooling.ClassLoaderMatcher.classLoaderHasNoResources;
|
||||
import static datadog.trace.agent.tooling.ClassLoaderMatcher.hasClassesNamed;
|
||||
import static datadog.trace.agent.tooling.bytebuddy.matcher.DDElementMatchers.extendsClass;
|
||||
import static java.util.Collections.singletonMap;
|
||||
import static net.bytebuddy.matcher.ElementMatchers.isMethod;
|
||||
import static net.bytebuddy.matcher.ElementMatchers.nameStartsWith;
|
||||
import static net.bytebuddy.matcher.ElementMatchers.named;
|
||||
import static net.bytebuddy.matcher.ElementMatchers.not;
|
||||
import static net.bytebuddy.matcher.ElementMatchers.takesArgument;
|
||||
import static net.bytebuddy.matcher.ElementMatchers.takesArguments;
|
||||
|
||||
|
@ -34,9 +33,7 @@ public class CouchbaseNetworkInstrumentation extends Instrumenter.Default {
|
|||
@Override
|
||||
public ElementMatcher<ClassLoader> classLoaderMatcher() {
|
||||
// Optimization for expensive typeMatcher.
|
||||
return not(
|
||||
classLoaderHasNoResources(
|
||||
"com/couchbase/client/core/endpoint/AbstractGenericHandler.class"));
|
||||
return hasClassesNamed("com.couchbase.client.core.endpoint.AbstractGenericHandler");
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
package datadog.trace.instrumentation.dropwizard.view;
|
||||
|
||||
import static datadog.trace.agent.tooling.ClassLoaderMatcher.classLoaderHasNoResources;
|
||||
import static datadog.trace.agent.tooling.ClassLoaderMatcher.hasClassesNamed;
|
||||
import static datadog.trace.agent.tooling.bytebuddy.matcher.DDElementMatchers.implementsInterface;
|
||||
import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan;
|
||||
import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activeSpan;
|
||||
|
@ -9,7 +9,6 @@ import static java.util.Collections.singletonMap;
|
|||
import static net.bytebuddy.matcher.ElementMatchers.isMethod;
|
||||
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 com.google.auto.service.AutoService;
|
||||
|
@ -35,7 +34,7 @@ public final class DropwizardViewInstrumentation extends Instrumenter.Default {
|
|||
@Override
|
||||
public ElementMatcher<ClassLoader> classLoaderMatcher() {
|
||||
// Optimization for expensive typeMatcher.
|
||||
return not(classLoaderHasNoResources("io/dropwizard/views/ViewRenderer.class"));
|
||||
return hasClassesNamed("io.dropwizard.views.ViewRenderer");
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
package datadog.trace.instrumentation.finatra;
|
||||
|
||||
import static datadog.trace.agent.tooling.ClassLoaderMatcher.classLoaderHasNoResources;
|
||||
import static datadog.trace.agent.tooling.ClassLoaderMatcher.hasClassesNamed;
|
||||
import static datadog.trace.agent.tooling.bytebuddy.matcher.DDElementMatchers.extendsClass;
|
||||
import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan;
|
||||
import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activeSpan;
|
||||
|
@ -10,7 +10,6 @@ import static java.util.Collections.singletonMap;
|
|||
import static net.bytebuddy.matcher.ElementMatchers.isMethod;
|
||||
import static net.bytebuddy.matcher.ElementMatchers.nameStartsWith;
|
||||
import static net.bytebuddy.matcher.ElementMatchers.named;
|
||||
import static net.bytebuddy.matcher.ElementMatchers.not;
|
||||
import static net.bytebuddy.matcher.ElementMatchers.takesArgument;
|
||||
import static net.bytebuddy.matcher.ElementMatchers.takesArguments;
|
||||
|
||||
|
@ -53,7 +52,7 @@ public class FinatraInstrumentation extends Instrumenter.Default {
|
|||
@Override
|
||||
public ElementMatcher<ClassLoader> classLoaderMatcher() {
|
||||
// Optimization for expensive typeMatcher.
|
||||
return not(classLoaderHasNoResources("com/twitter/finatra/http/internal/routing/Route.class"));
|
||||
return hasClassesNamed("com.twitter.finatra.http.internal.routing.Route");
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
package datadog.trace.instrumentation.hibernate.core.v3_3;
|
||||
|
||||
import static datadog.trace.agent.tooling.ClassLoaderMatcher.classLoaderHasNoResources;
|
||||
import static net.bytebuddy.matcher.ElementMatchers.not;
|
||||
import static datadog.trace.agent.tooling.ClassLoaderMatcher.hasClassesNamed;
|
||||
|
||||
import datadog.trace.agent.tooling.Instrumenter;
|
||||
import net.bytebuddy.matcher.ElementMatcher;
|
||||
|
@ -17,7 +16,7 @@ public abstract class AbstractHibernateInstrumentation extends Instrumenter.Defa
|
|||
@Override
|
||||
public ElementMatcher<ClassLoader> classLoaderMatcher() {
|
||||
// Optimization for expensive typeMatcher.
|
||||
return not(classLoaderHasNoResources("org/hibernate/Session.class"));
|
||||
return hasClassesNamed("org.hibernate.Session");
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
package datadog.trace.instrumentation.hibernate.core.v4_0;
|
||||
|
||||
import static datadog.trace.agent.tooling.ClassLoaderMatcher.classLoaderHasNoResources;
|
||||
import static net.bytebuddy.matcher.ElementMatchers.not;
|
||||
import static datadog.trace.agent.tooling.ClassLoaderMatcher.hasClassesNamed;
|
||||
|
||||
import datadog.trace.agent.tooling.Instrumenter;
|
||||
import net.bytebuddy.matcher.ElementMatcher;
|
||||
|
@ -16,7 +15,7 @@ public abstract class AbstractHibernateInstrumentation extends Instrumenter.Defa
|
|||
@Override
|
||||
public ElementMatcher<ClassLoader> classLoaderMatcher() {
|
||||
// Optimization for expensive typeMatcher.
|
||||
return not(classLoaderHasNoResources("org/hibernate/Session.class"));
|
||||
return hasClassesNamed("org.hibernate.Session");
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -1,11 +1,10 @@
|
|||
package datadog.trace.instrumentation.hibernate.core.v4_3;
|
||||
|
||||
import static datadog.trace.agent.tooling.ClassLoaderMatcher.classLoaderHasNoResources;
|
||||
import static datadog.trace.agent.tooling.ClassLoaderMatcher.hasClassesNamed;
|
||||
import static datadog.trace.agent.tooling.bytebuddy.matcher.DDElementMatchers.implementsInterface;
|
||||
import static java.util.Collections.singletonMap;
|
||||
import static net.bytebuddy.matcher.ElementMatchers.isMethod;
|
||||
import static net.bytebuddy.matcher.ElementMatchers.named;
|
||||
import static net.bytebuddy.matcher.ElementMatchers.not;
|
||||
|
||||
import com.google.auto.service.AutoService;
|
||||
import datadog.trace.agent.tooling.Instrumenter;
|
||||
|
@ -48,7 +47,7 @@ public class ProcedureCallInstrumentation extends Instrumenter.Default {
|
|||
@Override
|
||||
public ElementMatcher<ClassLoader> classLoaderMatcher() {
|
||||
// Optimization for expensive typeMatcher.
|
||||
return not(classLoaderHasNoResources("org/hibernate/Session.class"));
|
||||
return hasClassesNamed("org.hibernate.Session");
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -1,11 +1,10 @@
|
|||
package datadog.trace.instrumentation.hibernate.core.v4_3;
|
||||
|
||||
import static datadog.trace.agent.tooling.ClassLoaderMatcher.classLoaderHasNoResources;
|
||||
import static datadog.trace.agent.tooling.ClassLoaderMatcher.hasClassesNamed;
|
||||
import static datadog.trace.agent.tooling.bytebuddy.matcher.DDElementMatchers.hasInterface;
|
||||
import static datadog.trace.agent.tooling.bytebuddy.matcher.DDElementMatchers.implementsInterface;
|
||||
import static net.bytebuddy.matcher.ElementMatchers.isMethod;
|
||||
import static net.bytebuddy.matcher.ElementMatchers.named;
|
||||
import static net.bytebuddy.matcher.ElementMatchers.not;
|
||||
import static net.bytebuddy.matcher.ElementMatchers.returns;
|
||||
|
||||
import com.google.auto.service.AutoService;
|
||||
|
@ -55,7 +54,7 @@ public class SessionInstrumentation extends Instrumenter.Default {
|
|||
@Override
|
||||
public ElementMatcher<ClassLoader> classLoaderMatcher() {
|
||||
// Optimization for expensive typeMatcher.
|
||||
return not(classLoaderHasNoResources("org/hibernate/Session.class"));
|
||||
return hasClassesNamed("org.hibernate.Session");
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -1,10 +1,9 @@
|
|||
package datadog.trace.instrumentation.hystrix;
|
||||
|
||||
import static datadog.trace.agent.tooling.ClassLoaderMatcher.classLoaderHasNoResources;
|
||||
import static datadog.trace.agent.tooling.ClassLoaderMatcher.hasClassesNamed;
|
||||
import static datadog.trace.agent.tooling.bytebuddy.matcher.DDElementMatchers.extendsClass;
|
||||
import static datadog.trace.instrumentation.hystrix.HystrixDecorator.DECORATE;
|
||||
import static net.bytebuddy.matcher.ElementMatchers.named;
|
||||
import static net.bytebuddy.matcher.ElementMatchers.not;
|
||||
import static net.bytebuddy.matcher.ElementMatchers.returns;
|
||||
|
||||
import com.google.auto.service.AutoService;
|
||||
|
@ -32,7 +31,7 @@ public class HystrixInstrumentation extends Instrumenter.Default {
|
|||
@Override
|
||||
public ElementMatcher<ClassLoader> classLoaderMatcher() {
|
||||
// Optimization for expensive typeMatcher.
|
||||
return not(classLoaderHasNoResources("com/netflix/hystrix/HystrixCommand.class"));
|
||||
return hasClassesNamed("com.netflix.hystrix.HystrixCommand");
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
package datadog.trace.instrumentation.java.concurrent;
|
||||
|
||||
import static datadog.trace.agent.tooling.ClassLoaderMatcher.hasClassesNamed;
|
||||
import static datadog.trace.agent.tooling.bytebuddy.matcher.DDElementMatchers.extendsClass;
|
||||
import static java.util.Collections.singletonMap;
|
||||
import static net.bytebuddy.matcher.ElementMatchers.isAbstract;
|
||||
|
@ -41,6 +42,12 @@ public final class AkkaForkJoinTaskInstrumentation extends Instrumenter.Default
|
|||
super(AbstractExecutorInstrumentation.EXEC_NAME);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ElementMatcher<ClassLoader> classLoaderMatcher() {
|
||||
// Optimization for expensive typeMatcher.
|
||||
return hasClassesNamed(TASK_CLASS_NAME);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ElementMatcher<TypeDescription> typeMatcher() {
|
||||
return extendsClass(named(TASK_CLASS_NAME));
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
package datadog.trace.instrumentation.java.concurrent;
|
||||
|
||||
import static datadog.trace.agent.tooling.ClassLoaderMatcher.hasClassesNamed;
|
||||
import static datadog.trace.agent.tooling.bytebuddy.matcher.DDElementMatchers.extendsClass;
|
||||
import static net.bytebuddy.matcher.ElementMatchers.isAbstract;
|
||||
import static net.bytebuddy.matcher.ElementMatchers.named;
|
||||
|
@ -40,6 +41,12 @@ public final class ScalaForkJoinTaskInstrumentation extends Instrumenter.Default
|
|||
super(AbstractExecutorInstrumentation.EXEC_NAME);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ElementMatcher<ClassLoader> classLoaderMatcher() {
|
||||
// Optimization for expensive typeMatcher.
|
||||
return hasClassesNamed(TASK_CLASS_NAME);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ElementMatcher<TypeDescription> typeMatcher() {
|
||||
return extendsClass(named(TASK_CLASS_NAME));
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
package datadog.trace.instrumentation.jaxrs1;
|
||||
|
||||
import static datadog.trace.agent.tooling.ClassLoaderMatcher.classLoaderHasNoResources;
|
||||
import static datadog.trace.agent.tooling.ClassLoaderMatcher.hasClassesNamed;
|
||||
import static datadog.trace.agent.tooling.bytebuddy.matcher.DDElementMatchers.hasSuperMethod;
|
||||
import static datadog.trace.agent.tooling.bytebuddy.matcher.DDElementMatchers.safeHasSuperType;
|
||||
import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan;
|
||||
|
@ -37,9 +37,9 @@ public final class JaxRsAnnotationsInstrumentation extends Instrumenter.Default
|
|||
// this is required to make sure instrumentation won't apply to jax-rs 2
|
||||
@Override
|
||||
public ElementMatcher<ClassLoader> classLoaderMatcher() {
|
||||
return classLoaderHasNoResources("javax/ws/rs/container/AsyncResponse.class")
|
||||
return not(hasClassesNamed("javax.ws.rs.container.AsyncResponse"))
|
||||
// Optimization for expensive typeMatcher.
|
||||
.and(not(classLoaderHasNoResources("javax/ws/rs/Path.class")));
|
||||
.and(hasClassesNamed("javax.ws.rs.Path"));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
package datadog.trace.instrumentation.jaxrs2;
|
||||
|
||||
import static datadog.trace.agent.tooling.ClassLoaderMatcher.classLoaderHasNoResources;
|
||||
import static datadog.trace.agent.tooling.ClassLoaderMatcher.hasClassesNamed;
|
||||
import static datadog.trace.agent.tooling.bytebuddy.matcher.DDElementMatchers.implementsInterface;
|
||||
import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan;
|
||||
import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activeSpan;
|
||||
|
@ -9,7 +9,6 @@ import static datadog.trace.instrumentation.jaxrs2.JaxRsAnnotationsDecorator.DEC
|
|||
import static java.util.Collections.singletonMap;
|
||||
import static net.bytebuddy.matcher.ElementMatchers.isMethod;
|
||||
import static net.bytebuddy.matcher.ElementMatchers.named;
|
||||
import static net.bytebuddy.matcher.ElementMatchers.not;
|
||||
import static net.bytebuddy.matcher.ElementMatchers.takesArgument;
|
||||
import static net.bytebuddy.matcher.ElementMatchers.takesArguments;
|
||||
|
||||
|
@ -31,7 +30,7 @@ public abstract class AbstractRequestContextInstrumentation extends Instrumenter
|
|||
@Override
|
||||
public ElementMatcher<ClassLoader> classLoaderMatcher() {
|
||||
// Optimization for expensive typeMatcher.
|
||||
return not(classLoaderHasNoResources("javax/ws/rs/container/ContainerRequestContext.class"));
|
||||
return hasClassesNamed("javax.ws.rs.container.ContainerRequestContext");
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -1,11 +1,10 @@
|
|||
package datadog.trace.instrumentation.jaxrs2;
|
||||
|
||||
import static datadog.trace.agent.tooling.ClassLoaderMatcher.classLoaderHasNoResources;
|
||||
import static datadog.trace.agent.tooling.ClassLoaderMatcher.hasClassesNamed;
|
||||
import static datadog.trace.agent.tooling.bytebuddy.matcher.DDElementMatchers.implementsInterface;
|
||||
import static java.util.Collections.singletonMap;
|
||||
import static net.bytebuddy.matcher.ElementMatchers.isMethod;
|
||||
import static net.bytebuddy.matcher.ElementMatchers.named;
|
||||
import static net.bytebuddy.matcher.ElementMatchers.not;
|
||||
import static net.bytebuddy.matcher.ElementMatchers.takesArgument;
|
||||
import static net.bytebuddy.matcher.ElementMatchers.takesArguments;
|
||||
|
||||
|
@ -33,7 +32,7 @@ public class ContainerRequestFilterInstrumentation extends Instrumenter.Default
|
|||
@Override
|
||||
public ElementMatcher<ClassLoader> classLoaderMatcher() {
|
||||
// Optimization for expensive typeMatcher.
|
||||
return not(classLoaderHasNoResources("javax/ws/rs/container/ContainerRequestFilter.class"));
|
||||
return hasClassesNamed("javax.ws.rs.container.ContainerRequestFilter");
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
package datadog.trace.instrumentation.jaxrs2;
|
||||
|
||||
import static datadog.trace.agent.tooling.ClassLoaderMatcher.classLoaderHasNoResources;
|
||||
import static datadog.trace.agent.tooling.ClassLoaderMatcher.hasClassesNamed;
|
||||
import static datadog.trace.agent.tooling.bytebuddy.matcher.DDElementMatchers.hasSuperMethod;
|
||||
import static datadog.trace.agent.tooling.bytebuddy.matcher.DDElementMatchers.safeHasSuperType;
|
||||
import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan;
|
||||
|
@ -12,7 +12,6 @@ import static net.bytebuddy.matcher.ElementMatchers.declaresMethod;
|
|||
import static net.bytebuddy.matcher.ElementMatchers.isAnnotatedWith;
|
||||
import static net.bytebuddy.matcher.ElementMatchers.isMethod;
|
||||
import static net.bytebuddy.matcher.ElementMatchers.named;
|
||||
import static net.bytebuddy.matcher.ElementMatchers.not;
|
||||
|
||||
import com.google.auto.service.AutoService;
|
||||
import datadog.trace.agent.tooling.Instrumenter;
|
||||
|
@ -44,7 +43,7 @@ public final class JaxRsAnnotationsInstrumentation extends Instrumenter.Default
|
|||
@Override
|
||||
public ElementMatcher<ClassLoader> classLoaderMatcher() {
|
||||
// Optimization for expensive typeMatcher.
|
||||
return not(classLoaderHasNoResources("javax/ws/rs/Path.class"));
|
||||
return hasClassesNamed("javax.ws.rs.Path");
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -1,11 +1,10 @@
|
|||
package datadog.trace.instrumentation.jaxrs2;
|
||||
|
||||
import static datadog.trace.agent.tooling.ClassLoaderMatcher.classLoaderHasNoResources;
|
||||
import static datadog.trace.agent.tooling.ClassLoaderMatcher.hasClassesNamed;
|
||||
import static datadog.trace.agent.tooling.bytebuddy.matcher.DDElementMatchers.implementsInterface;
|
||||
import static datadog.trace.instrumentation.jaxrs2.JaxRsAnnotationsDecorator.DECORATE;
|
||||
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 com.google.auto.service.AutoService;
|
||||
|
@ -38,7 +37,7 @@ public final class JaxRsAsyncResponseInstrumentation extends Instrumenter.Defaul
|
|||
@Override
|
||||
public ElementMatcher<ClassLoader> classLoaderMatcher() {
|
||||
// Optimization for expensive typeMatcher.
|
||||
return not(classLoaderHasNoResources("javax/ws/rs/container/AsyncResponse.class"));
|
||||
return hasClassesNamed("javax.ws.rs.container.AsyncResponse");
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
package datadog.trace.instrumentation.jaxrs.v1;
|
||||
|
||||
import static datadog.trace.agent.decorator.HttpServerDecorator.DD_SPAN_ATTRIBUTE;
|
||||
import static datadog.trace.agent.tooling.ClassLoaderMatcher.classLoaderHasNoResources;
|
||||
import static datadog.trace.agent.tooling.ClassLoaderMatcher.hasClassesNamed;
|
||||
import static datadog.trace.agent.tooling.bytebuddy.matcher.DDElementMatchers.extendsClass;
|
||||
import static datadog.trace.agent.tooling.bytebuddy.matcher.DDElementMatchers.implementsInterface;
|
||||
import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan;
|
||||
|
@ -11,7 +11,6 @@ import static datadog.trace.instrumentation.jaxrs.v1.InjectAdapter.SETTER;
|
|||
import static datadog.trace.instrumentation.jaxrs.v1.JaxRsClientV1Decorator.DECORATE;
|
||||
import static java.util.Collections.singletonMap;
|
||||
import static net.bytebuddy.matcher.ElementMatchers.named;
|
||||
import static net.bytebuddy.matcher.ElementMatchers.not;
|
||||
import static net.bytebuddy.matcher.ElementMatchers.returns;
|
||||
import static net.bytebuddy.matcher.ElementMatchers.takesArgument;
|
||||
|
||||
|
@ -39,7 +38,7 @@ public final class JaxRsClientV1Instrumentation extends Instrumenter.Default {
|
|||
@Override
|
||||
public ElementMatcher<ClassLoader> classLoaderMatcher() {
|
||||
// Optimization for expensive typeMatcher.
|
||||
return not(classLoaderHasNoResources("com/sun/jersey/api/client/ClientHandler.class"));
|
||||
return hasClassesNamed("com.sun.jersey.api.client.ClientHandler");
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -1,11 +1,10 @@
|
|||
package datadog.trace.instrumentation.jaxrs;
|
||||
|
||||
import static datadog.trace.agent.tooling.ClassLoaderMatcher.classLoaderHasNoResources;
|
||||
import static datadog.trace.agent.tooling.ClassLoaderMatcher.hasClassesNamed;
|
||||
import static datadog.trace.agent.tooling.bytebuddy.matcher.DDElementMatchers.extendsClass;
|
||||
import static datadog.trace.agent.tooling.bytebuddy.matcher.DDElementMatchers.hasInterface;
|
||||
import static java.util.Collections.singletonMap;
|
||||
import static net.bytebuddy.matcher.ElementMatchers.named;
|
||||
import static net.bytebuddy.matcher.ElementMatchers.not;
|
||||
import static net.bytebuddy.matcher.ElementMatchers.returns;
|
||||
|
||||
import com.google.auto.service.AutoService;
|
||||
|
@ -28,7 +27,7 @@ public final class JaxRsClientInstrumentation extends Instrumenter.Default {
|
|||
@Override
|
||||
public ElementMatcher<ClassLoader> classLoaderMatcher() {
|
||||
// Optimization for expensive typeMatcher.
|
||||
return not(classLoaderHasNoResources("javax/ws/rs/client/ClientBuilder.class"));
|
||||
return hasClassesNamed("javax.ws.rs.client.ClientBuilder");
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
package datadog.trace.instrumentation.jedis;
|
||||
|
||||
import static datadog.trace.agent.tooling.ClassLoaderMatcher.classLoaderHasNoResources;
|
||||
import static datadog.trace.agent.tooling.ClassLoaderMatcher.hasClassesNamed;
|
||||
import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan;
|
||||
import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.startSpan;
|
||||
import static datadog.trace.instrumentation.jedis.JedisClientDecorator.DECORATE;
|
||||
|
@ -34,9 +34,8 @@ public final class JedisInstrumentation extends Instrumenter.Default {
|
|||
|
||||
@Override
|
||||
public ElementMatcher<ClassLoader> classLoaderMatcher() {
|
||||
return classLoaderHasNoResources("redis/clients/jedis/commands/ProtocolCommand.class")
|
||||
// Optimization for expensive typeMatcher.
|
||||
.and(not(classLoaderHasNoResources("redis/clients/jedis/Protocol.class")));
|
||||
// Avoid matching 3.x
|
||||
return not(hasClassesNamed("redis.clients.jedis.commands.ProtocolCommand"));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
package datadog.trace.instrumentation.jetty8;
|
||||
|
||||
import static datadog.trace.agent.tooling.ClassLoaderMatcher.classLoaderHasNoResources;
|
||||
import static datadog.trace.agent.tooling.ClassLoaderMatcher.hasClassesNamed;
|
||||
import static datadog.trace.agent.tooling.bytebuddy.matcher.DDElementMatchers.implementsInterface;
|
||||
import static java.util.Collections.singletonMap;
|
||||
import static net.bytebuddy.matcher.ElementMatchers.isPublic;
|
||||
|
@ -30,7 +30,7 @@ public final class JettyHandlerInstrumentation extends Instrumenter.Default {
|
|||
@Override
|
||||
public ElementMatcher<ClassLoader> classLoaderMatcher() {
|
||||
// Optimization for expensive typeMatcher.
|
||||
return not(classLoaderHasNoResources("org/eclipse/jetty/server/Handler.class"));
|
||||
return hasClassesNamed("org.eclipse.jetty.server.Handler");
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
package datadog.trace.instrumentation.jms;
|
||||
|
||||
import static datadog.trace.agent.tooling.ClassLoaderMatcher.classLoaderHasNoResources;
|
||||
import static datadog.trace.agent.tooling.ClassLoaderMatcher.hasClassesNamed;
|
||||
import static datadog.trace.agent.tooling.bytebuddy.matcher.DDElementMatchers.implementsInterface;
|
||||
import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan;
|
||||
import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.propagate;
|
||||
|
@ -9,7 +9,6 @@ import static datadog.trace.instrumentation.jms.JMSDecorator.CONSUMER_DECORATE;
|
|||
import static datadog.trace.instrumentation.jms.MessageExtractAdapter.GETTER;
|
||||
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.takesArguments;
|
||||
|
||||
import com.google.auto.service.AutoService;
|
||||
|
@ -38,7 +37,7 @@ public final class JMSMessageConsumerInstrumentation extends Instrumenter.Defaul
|
|||
@Override
|
||||
public ElementMatcher<ClassLoader> classLoaderMatcher() {
|
||||
// Optimization for expensive typeMatcher.
|
||||
return not(classLoaderHasNoResources("javax/jms/MessageConsumer.class"));
|
||||
return hasClassesNamed("javax.jms.MessageConsumer");
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
package datadog.trace.instrumentation.jms;
|
||||
|
||||
import static datadog.trace.agent.tooling.ClassLoaderMatcher.classLoaderHasNoResources;
|
||||
import static datadog.trace.agent.tooling.ClassLoaderMatcher.hasClassesNamed;
|
||||
import static datadog.trace.agent.tooling.bytebuddy.matcher.DDElementMatchers.implementsInterface;
|
||||
import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan;
|
||||
import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.propagate;
|
||||
|
@ -10,7 +10,6 @@ import static datadog.trace.instrumentation.jms.MessageExtractAdapter.GETTER;
|
|||
import static java.util.Collections.singletonMap;
|
||||
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 com.google.auto.service.AutoService;
|
||||
|
@ -36,7 +35,7 @@ public final class JMSMessageListenerInstrumentation extends Instrumenter.Defaul
|
|||
@Override
|
||||
public ElementMatcher<ClassLoader> classLoaderMatcher() {
|
||||
// Optimization for expensive typeMatcher.
|
||||
return not(classLoaderHasNoResources("javax/jms/MessageListener.class"));
|
||||
return hasClassesNamed("javax.jms.MessageListener");
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
package datadog.trace.instrumentation.jms;
|
||||
|
||||
import static datadog.trace.agent.tooling.ClassLoaderMatcher.classLoaderHasNoResources;
|
||||
import static datadog.trace.agent.tooling.ClassLoaderMatcher.hasClassesNamed;
|
||||
import static datadog.trace.agent.tooling.bytebuddy.matcher.DDElementMatchers.implementsInterface;
|
||||
import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan;
|
||||
import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.propagate;
|
||||
|
@ -9,7 +9,6 @@ import static datadog.trace.instrumentation.jms.JMSDecorator.PRODUCER_DECORATE;
|
|||
import static datadog.trace.instrumentation.jms.MessageInjectAdapter.SETTER;
|
||||
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 com.google.auto.service.AutoService;
|
||||
|
@ -38,7 +37,7 @@ public final class JMSMessageProducerInstrumentation extends Instrumenter.Defaul
|
|||
@Override
|
||||
public ElementMatcher<ClassLoader> classLoaderMatcher() {
|
||||
// Optimization for expensive typeMatcher.
|
||||
return not(classLoaderHasNoResources("javax/jms/MessageProducer.class"));
|
||||
return hasClassesNamed("javax.jms.MessageProducer");
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
package datadog.trace.instrumentation.jsp;
|
||||
|
||||
import static datadog.trace.agent.tooling.ClassLoaderMatcher.classLoaderHasNoResources;
|
||||
import static datadog.trace.agent.tooling.ClassLoaderMatcher.hasClassesNamed;
|
||||
import static datadog.trace.agent.tooling.bytebuddy.matcher.DDElementMatchers.implementsInterface;
|
||||
import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan;
|
||||
import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.startSpan;
|
||||
|
@ -8,7 +8,6 @@ import static datadog.trace.instrumentation.jsp.JSPDecorator.DECORATE;
|
|||
import static java.util.Collections.singletonMap;
|
||||
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 com.google.auto.service.AutoService;
|
||||
|
@ -32,7 +31,7 @@ public final class JSPInstrumentation extends Instrumenter.Default {
|
|||
@Override
|
||||
public ElementMatcher<ClassLoader> classLoaderMatcher() {
|
||||
// Optimization for expensive typeMatcher.
|
||||
return not(classLoaderHasNoResources("javax/servlet/jsp/HttpJspPage.class"));
|
||||
return hasClassesNamed("javax.servlet.jsp.HttpJspPage");
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -1,13 +1,12 @@
|
|||
package datadog.trace.instrumentation.netty40;
|
||||
|
||||
import static datadog.trace.agent.tooling.ClassLoaderMatcher.classLoaderHasNoResources;
|
||||
import static datadog.trace.agent.tooling.ClassLoaderMatcher.hasClassesNamed;
|
||||
import static datadog.trace.agent.tooling.bytebuddy.matcher.DDElementMatchers.implementsInterface;
|
||||
import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan;
|
||||
import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.startSpan;
|
||||
import static java.util.Collections.singletonMap;
|
||||
import static net.bytebuddy.matcher.ElementMatchers.isMethod;
|
||||
import static net.bytebuddy.matcher.ElementMatchers.named;
|
||||
import static net.bytebuddy.matcher.ElementMatchers.not;
|
||||
import static net.bytebuddy.matcher.ElementMatchers.takesArgument;
|
||||
|
||||
import com.google.auto.service.AutoService;
|
||||
|
@ -36,7 +35,7 @@ public class ChannelFutureListenerInstrumentation extends Instrumenter.Default {
|
|||
@Override
|
||||
public ElementMatcher<ClassLoader> classLoaderMatcher() {
|
||||
// Optimization for expensive typeMatcher.
|
||||
return not(classLoaderHasNoResources("io/netty/channel/ChannelFutureListener.class"));
|
||||
return hasClassesNamed("io.netty.channel.ChannelFutureListener");
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -1,12 +1,11 @@
|
|||
package datadog.trace.instrumentation.netty40;
|
||||
|
||||
import static datadog.trace.agent.tooling.ClassLoaderMatcher.classLoaderHasNoResources;
|
||||
import static datadog.trace.agent.tooling.ClassLoaderMatcher.hasClassesNamed;
|
||||
import static datadog.trace.agent.tooling.bytebuddy.matcher.DDElementMatchers.implementsInterface;
|
||||
import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activeScope;
|
||||
import static net.bytebuddy.matcher.ElementMatchers.isMethod;
|
||||
import static net.bytebuddy.matcher.ElementMatchers.nameStartsWith;
|
||||
import static net.bytebuddy.matcher.ElementMatchers.named;
|
||||
import static net.bytebuddy.matcher.ElementMatchers.not;
|
||||
import static net.bytebuddy.matcher.ElementMatchers.returns;
|
||||
import static net.bytebuddy.matcher.ElementMatchers.takesArgument;
|
||||
|
||||
|
@ -49,7 +48,7 @@ public class NettyChannelPipelineInstrumentation extends Instrumenter.Default {
|
|||
@Override
|
||||
public ElementMatcher<ClassLoader> classLoaderMatcher() {
|
||||
// Optimization for expensive typeMatcher.
|
||||
return not(classLoaderHasNoResources("io/netty/channel/ChannelPipeline.class"));
|
||||
return hasClassesNamed("io.netty.channel.ChannelPipeline");
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -1,13 +1,12 @@
|
|||
package datadog.trace.instrumentation.netty41;
|
||||
|
||||
import static datadog.trace.agent.tooling.ClassLoaderMatcher.classLoaderHasNoResources;
|
||||
import static datadog.trace.agent.tooling.ClassLoaderMatcher.hasClassesNamed;
|
||||
import static datadog.trace.agent.tooling.bytebuddy.matcher.DDElementMatchers.implementsInterface;
|
||||
import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan;
|
||||
import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.startSpan;
|
||||
import static java.util.Collections.singletonMap;
|
||||
import static net.bytebuddy.matcher.ElementMatchers.isMethod;
|
||||
import static net.bytebuddy.matcher.ElementMatchers.named;
|
||||
import static net.bytebuddy.matcher.ElementMatchers.not;
|
||||
import static net.bytebuddy.matcher.ElementMatchers.takesArgument;
|
||||
|
||||
import com.google.auto.service.AutoService;
|
||||
|
@ -36,7 +35,7 @@ public class ChannelFutureListenerInstrumentation extends Instrumenter.Default {
|
|||
@Override
|
||||
public ElementMatcher<ClassLoader> classLoaderMatcher() {
|
||||
// Optimization for expensive typeMatcher.
|
||||
return not(classLoaderHasNoResources("io/netty/channel/ChannelFutureListener.class"));
|
||||
return hasClassesNamed("io.netty.channel.ChannelFutureListener");
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -1,12 +1,11 @@
|
|||
package datadog.trace.instrumentation.netty41;
|
||||
|
||||
import static datadog.trace.agent.tooling.ClassLoaderMatcher.classLoaderHasNoResources;
|
||||
import static datadog.trace.agent.tooling.ClassLoaderMatcher.hasClassesNamed;
|
||||
import static datadog.trace.agent.tooling.bytebuddy.matcher.DDElementMatchers.implementsInterface;
|
||||
import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activeScope;
|
||||
import static net.bytebuddy.matcher.ElementMatchers.isMethod;
|
||||
import static net.bytebuddy.matcher.ElementMatchers.nameStartsWith;
|
||||
import static net.bytebuddy.matcher.ElementMatchers.named;
|
||||
import static net.bytebuddy.matcher.ElementMatchers.not;
|
||||
import static net.bytebuddy.matcher.ElementMatchers.returns;
|
||||
import static net.bytebuddy.matcher.ElementMatchers.takesArgument;
|
||||
|
||||
|
@ -49,7 +48,7 @@ public class NettyChannelPipelineInstrumentation extends Instrumenter.Default {
|
|||
@Override
|
||||
public ElementMatcher<ClassLoader> classLoaderMatcher() {
|
||||
// Optimization for expensive typeMatcher.
|
||||
return not(classLoaderHasNoResources("io/netty/channel/ChannelPipeline.class"));
|
||||
return hasClassesNamed("io.netty.channel.ChannelPipeline");
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -1,10 +1,9 @@
|
|||
package datadog.trace.instrumentation.play24;
|
||||
|
||||
import static datadog.trace.agent.tooling.ClassLoaderMatcher.classLoaderHasNoResources;
|
||||
import static datadog.trace.agent.tooling.ClassLoaderMatcher.hasClassesNamed;
|
||||
import static datadog.trace.agent.tooling.bytebuddy.matcher.DDElementMatchers.implementsInterface;
|
||||
import static java.util.Collections.singletonMap;
|
||||
import static net.bytebuddy.matcher.ElementMatchers.named;
|
||||
import static net.bytebuddy.matcher.ElementMatchers.not;
|
||||
import static net.bytebuddy.matcher.ElementMatchers.returns;
|
||||
import static net.bytebuddy.matcher.ElementMatchers.takesArgument;
|
||||
|
||||
|
@ -25,7 +24,7 @@ public final class PlayInstrumentation extends Instrumenter.Default {
|
|||
@Override
|
||||
public ElementMatcher<ClassLoader> classLoaderMatcher() {
|
||||
// Optimization for expensive typeMatcher.
|
||||
return not(classLoaderHasNoResources("play/api/mvc/Action.class"));
|
||||
return hasClassesNamed("play.api.mvc.Action");
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -1,10 +1,9 @@
|
|||
package datadog.trace.instrumentation.play26;
|
||||
|
||||
import static datadog.trace.agent.tooling.ClassLoaderMatcher.classLoaderHasNoResources;
|
||||
import static datadog.trace.agent.tooling.ClassLoaderMatcher.hasClassesNamed;
|
||||
import static datadog.trace.agent.tooling.bytebuddy.matcher.DDElementMatchers.implementsInterface;
|
||||
import static java.util.Collections.singletonMap;
|
||||
import static net.bytebuddy.matcher.ElementMatchers.named;
|
||||
import static net.bytebuddy.matcher.ElementMatchers.not;
|
||||
import static net.bytebuddy.matcher.ElementMatchers.returns;
|
||||
import static net.bytebuddy.matcher.ElementMatchers.takesArgument;
|
||||
|
||||
|
@ -25,7 +24,7 @@ public final class PlayInstrumentation extends Instrumenter.Default {
|
|||
@Override
|
||||
public ElementMatcher<ClassLoader> classLoaderMatcher() {
|
||||
// Optimization for expensive typeMatcher.
|
||||
return not(classLoaderHasNoResources("play/api/mvc/Action.class"));
|
||||
return hasClassesNamed("play.api.mvc.Action");
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
package datadog.trace.instrumentation.playws;
|
||||
|
||||
import static datadog.trace.agent.tooling.ClassLoaderMatcher.classLoaderHasNoResources;
|
||||
import static datadog.trace.agent.tooling.bytebuddy.matcher.DDElementMatchers.hasInterface;
|
||||
import static datadog.trace.agent.tooling.ClassLoaderMatcher.hasClassesNamed;
|
||||
import static datadog.trace.agent.tooling.bytebuddy.matcher.DDElementMatchers.implementsInterface;
|
||||
import static java.util.Collections.singletonMap;
|
||||
import static net.bytebuddy.matcher.ElementMatchers.isMethod;
|
||||
import static net.bytebuddy.matcher.ElementMatchers.nameStartsWith;
|
||||
|
@ -24,8 +24,7 @@ public abstract class BasePlayWSClientInstrumentation extends Instrumenter.Defau
|
|||
@Override
|
||||
public ElementMatcher<ClassLoader> classLoaderMatcher() {
|
||||
// Optimization for expensive typeMatcher.
|
||||
return not(
|
||||
classLoaderHasNoResources("play/shaded/ahc/org/asynchttpclient/AsyncHttpClient.class"));
|
||||
return hasClassesNamed("play.shaded.ahc.org.asynchttpclient.AsyncHttpClient");
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -34,7 +33,7 @@ public abstract class BasePlayWSClientInstrumentation extends Instrumenter.Defau
|
|||
// It also delegates to another AsyncHttpClient
|
||||
return nameStartsWith("play.")
|
||||
.<TypeDescription>and(
|
||||
hasInterface(named("play.shaded.ahc.org.asynchttpclient.AsyncHttpClient"))
|
||||
implementsInterface(named("play.shaded.ahc.org.asynchttpclient.AsyncHttpClient"))
|
||||
.and(not(named("play.api.libs.ws.ahc.cache.CachingAsyncHttpClient"))));
|
||||
}
|
||||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
package datadog.trace.instrumentation.rabbitmq.amqp;
|
||||
|
||||
import static datadog.trace.agent.tooling.ClassLoaderMatcher.classLoaderHasNoResources;
|
||||
import static datadog.trace.agent.tooling.ClassLoaderMatcher.hasClassesNamed;
|
||||
import static datadog.trace.agent.tooling.bytebuddy.matcher.DDElementMatchers.implementsInterface;
|
||||
import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan;
|
||||
import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activeSpan;
|
||||
|
@ -57,7 +57,7 @@ public class RabbitChannelInstrumentation extends Instrumenter.Default {
|
|||
@Override
|
||||
public ElementMatcher<ClassLoader> classLoaderMatcher() {
|
||||
// Optimization for expensive typeMatcher.
|
||||
return not(classLoaderHasNoResources("com/rabbitmq/client/Channel.class"));
|
||||
return hasClassesNamed("com.rabbitmq.client.Channel");
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -1,13 +1,12 @@
|
|||
package datadog.trace.instrumentation.rabbitmq.amqp;
|
||||
|
||||
import static datadog.trace.agent.tooling.ClassLoaderMatcher.classLoaderHasNoResources;
|
||||
import static datadog.trace.agent.tooling.ClassLoaderMatcher.hasClassesNamed;
|
||||
import static datadog.trace.agent.tooling.bytebuddy.matcher.DDElementMatchers.implementsInterface;
|
||||
import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activeSpan;
|
||||
import static datadog.trace.instrumentation.rabbitmq.amqp.RabbitDecorator.DECORATE;
|
||||
import static java.util.Collections.singletonMap;
|
||||
import static net.bytebuddy.matcher.ElementMatchers.isConstructor;
|
||||
import static net.bytebuddy.matcher.ElementMatchers.named;
|
||||
import static net.bytebuddy.matcher.ElementMatchers.not;
|
||||
|
||||
import com.google.auto.service.AutoService;
|
||||
import com.rabbitmq.client.Command;
|
||||
|
@ -29,7 +28,7 @@ public class RabbitCommandInstrumentation extends Instrumenter.Default {
|
|||
@Override
|
||||
public ElementMatcher<ClassLoader> classLoaderMatcher() {
|
||||
// Optimization for expensive typeMatcher.
|
||||
return not(classLoaderHasNoResources("com/rabbitmq/client/Command.class"));
|
||||
return hasClassesNamed("com.rabbitmq.client.Command");
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -1,12 +1,11 @@
|
|||
package datadog.trace.instrumentation.ratpack;
|
||||
|
||||
import static datadog.trace.agent.tooling.ClassLoaderMatcher.classLoaderHasNoResources;
|
||||
import static datadog.trace.agent.tooling.ClassLoaderMatcher.hasClassesNamed;
|
||||
import static datadog.trace.agent.tooling.bytebuddy.matcher.DDElementMatchers.implementsInterface;
|
||||
import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activeSpan;
|
||||
import static java.util.Collections.singletonMap;
|
||||
import static net.bytebuddy.matcher.ElementMatchers.nameStartsWith;
|
||||
import static net.bytebuddy.matcher.ElementMatchers.named;
|
||||
import static net.bytebuddy.matcher.ElementMatchers.not;
|
||||
import static net.bytebuddy.matcher.ElementMatchers.takesArgument;
|
||||
|
||||
import com.google.auto.service.AutoService;
|
||||
|
@ -29,7 +28,7 @@ public final class ContinuationInstrumentation extends Instrumenter.Default {
|
|||
@Override
|
||||
public ElementMatcher<ClassLoader> classLoaderMatcher() {
|
||||
// Optimization for expensive typeMatcher.
|
||||
return not(classLoaderHasNoResources("ratpack/exec/internal/Continuation.class"));
|
||||
return hasClassesNamed("ratpack.exec.internal.Continuation");
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
package datadog.trace.instrumentation.ratpack;
|
||||
|
||||
import static datadog.trace.agent.tooling.ClassLoaderMatcher.classLoaderHasNoResources;
|
||||
import static datadog.trace.agent.tooling.ClassLoaderMatcher.hasClassesNamed;
|
||||
import static datadog.trace.agent.tooling.bytebuddy.matcher.DDElementMatchers.implementsInterface;
|
||||
import static java.util.Collections.singletonMap;
|
||||
import static net.bytebuddy.matcher.ElementMatchers.isAbstract;
|
||||
|
@ -25,7 +25,7 @@ public class ServerErrorHandlerInstrumentation extends Instrumenter.Default {
|
|||
@Override
|
||||
public ElementMatcher<ClassLoader> classLoaderMatcher() {
|
||||
// Optimization for expensive typeMatcher.
|
||||
return not(classLoaderHasNoResources("ratpack/error/ServerErrorHandler.class"));
|
||||
return hasClassesNamed("ratpack.error.ServerErrorHandler");
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
package datadog.trace.instrumentation.reactor.core;
|
||||
|
||||
import static datadog.trace.agent.tooling.ClassLoaderMatcher.classLoaderHasNoResources;
|
||||
import static datadog.trace.agent.tooling.ClassLoaderMatcher.hasClassesNamed;
|
||||
import static datadog.trace.agent.tooling.bytebuddy.matcher.DDElementMatchers.extendsClass;
|
||||
import static java.util.Collections.singletonMap;
|
||||
import static net.bytebuddy.matcher.ElementMatchers.isAbstract;
|
||||
|
@ -28,7 +28,7 @@ public final class FluxAndMonoInstrumentation extends Instrumenter.Default {
|
|||
@Override
|
||||
public ElementMatcher<ClassLoader> classLoaderMatcher() {
|
||||
// Optimization for expensive typeMatcher.
|
||||
return not(classLoaderHasNoResources("reactor/core/publisher/Mono.class"));
|
||||
return hasClassesNamed("reactor.core.publisher.Mono");
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -1,10 +1,11 @@
|
|||
package datadog.trace.instrumentation.servlet2;
|
||||
|
||||
import static datadog.trace.agent.tooling.ClassLoaderMatcher.classLoaderHasNoResources;
|
||||
import static datadog.trace.agent.tooling.ClassLoaderMatcher.hasClassesNamed;
|
||||
import static datadog.trace.agent.tooling.bytebuddy.matcher.DDElementMatchers.safeHasSuperType;
|
||||
import static java.util.Collections.singletonMap;
|
||||
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 com.google.auto.service.AutoService;
|
||||
|
@ -24,8 +25,7 @@ public final class Servlet2Instrumentation extends Instrumenter.Default {
|
|||
// this is required to make sure servlet 2 instrumentation won't apply to servlet 3
|
||||
@Override
|
||||
public ElementMatcher<ClassLoader> classLoaderMatcher() {
|
||||
return classLoaderHasNoResources(
|
||||
"javax/servlet/AsyncEvent.class", "javax/servlet/AsyncListener.class");
|
||||
return not(hasClassesNamed("javax.servlet.AsyncEvent", "javax.servlet.AsyncListener"));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
package datadog.trace.instrumentation.servlet3;
|
||||
|
||||
import static datadog.trace.agent.decorator.HttpServerDecorator.DD_SPAN_ATTRIBUTE;
|
||||
import static datadog.trace.agent.tooling.ClassLoaderMatcher.classLoaderHasNoResources;
|
||||
import static datadog.trace.agent.tooling.ClassLoaderMatcher.hasClassesNamed;
|
||||
import static datadog.trace.agent.tooling.bytebuddy.matcher.DDElementMatchers.implementsInterface;
|
||||
import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.propagate;
|
||||
import static datadog.trace.instrumentation.servlet3.HttpServletRequestInjectAdapter.SETTER;
|
||||
|
@ -9,7 +9,6 @@ import static java.util.Collections.singletonMap;
|
|||
import static net.bytebuddy.matcher.ElementMatchers.isMethod;
|
||||
import static net.bytebuddy.matcher.ElementMatchers.isPublic;
|
||||
import static net.bytebuddy.matcher.ElementMatchers.named;
|
||||
import static net.bytebuddy.matcher.ElementMatchers.not;
|
||||
|
||||
import com.google.auto.service.AutoService;
|
||||
import datadog.trace.agent.tooling.Instrumenter;
|
||||
|
@ -34,7 +33,7 @@ public final class AsyncContextInstrumentation extends Instrumenter.Default {
|
|||
@Override
|
||||
public ElementMatcher<ClassLoader> classLoaderMatcher() {
|
||||
// Optimization for expensive typeMatcher.
|
||||
return not(classLoaderHasNoResources("javax/servlet/AsyncContext.class"));
|
||||
return hasClassesNamed("javax.servlet.AsyncContext");
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -1,11 +1,10 @@
|
|||
package datadog.trace.instrumentation.servlet3;
|
||||
|
||||
import static datadog.trace.agent.tooling.ClassLoaderMatcher.classLoaderHasNoResources;
|
||||
import static datadog.trace.agent.tooling.ClassLoaderMatcher.hasClassesNamed;
|
||||
import static datadog.trace.agent.tooling.bytebuddy.matcher.DDElementMatchers.safeHasSuperType;
|
||||
import static java.util.Collections.singletonMap;
|
||||
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 com.google.auto.service.AutoService;
|
||||
|
@ -24,7 +23,7 @@ public final class Servlet3Instrumentation extends Instrumenter.Default {
|
|||
@Override
|
||||
public ElementMatcher<ClassLoader> classLoaderMatcher() {
|
||||
// Optimization for expensive typeMatcher.
|
||||
return not(classLoaderHasNoResources("javax/servlet/http/HttpServlet.class"));
|
||||
return hasClassesNamed("javax.servlet.http.HttpServlet");
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
package datadog.trace.instrumentation.servlet.dispatcher;
|
||||
|
||||
import static datadog.trace.agent.decorator.HttpServerDecorator.DD_SPAN_ATTRIBUTE;
|
||||
import static datadog.trace.agent.tooling.ClassLoaderMatcher.classLoaderHasNoResources;
|
||||
import static datadog.trace.agent.tooling.ClassLoaderMatcher.hasClassesNamed;
|
||||
import static datadog.trace.agent.tooling.bytebuddy.matcher.DDElementMatchers.implementsInterface;
|
||||
import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan;
|
||||
import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activeSpan;
|
||||
|
@ -12,7 +12,6 @@ import static datadog.trace.instrumentation.servlet.dispatcher.RequestDispatcher
|
|||
import static java.util.Collections.singletonMap;
|
||||
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 com.google.auto.service.AutoService;
|
||||
|
@ -38,7 +37,7 @@ public final class RequestDispatcherInstrumentation extends Instrumenter.Default
|
|||
@Override
|
||||
public ElementMatcher<ClassLoader> classLoaderMatcher() {
|
||||
// Optimization for expensive typeMatcher.
|
||||
return not(classLoaderHasNoResources("javax/servlet/RequestDispatcher.class"));
|
||||
return hasClassesNamed("javax.servlet.RequestDispatcher");
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -1,11 +1,10 @@
|
|||
package datadog.trace.instrumentation.servlet.dispatcher;
|
||||
|
||||
import static datadog.trace.agent.tooling.ClassLoaderMatcher.classLoaderHasNoResources;
|
||||
import static datadog.trace.agent.tooling.ClassLoaderMatcher.hasClassesNamed;
|
||||
import static datadog.trace.agent.tooling.bytebuddy.matcher.DDElementMatchers.implementsInterface;
|
||||
import static java.util.Collections.singletonMap;
|
||||
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.returns;
|
||||
import static net.bytebuddy.matcher.ElementMatchers.takesArgument;
|
||||
|
||||
|
@ -28,7 +27,7 @@ public final class ServletContextInstrumentation extends Instrumenter.Default {
|
|||
@Override
|
||||
public ElementMatcher<ClassLoader> classLoaderMatcher() {
|
||||
// Optimization for expensive typeMatcher.
|
||||
return not(classLoaderHasNoResources("javax/servlet/ServletContext.class"));
|
||||
return hasClassesNamed("javax.servlet.ServletContext");
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
package datadog.trace.instrumentation.servlet.filter;
|
||||
|
||||
import static datadog.trace.agent.tooling.ClassLoaderMatcher.classLoaderHasNoResources;
|
||||
import static datadog.trace.agent.tooling.ClassLoaderMatcher.hasClassesNamed;
|
||||
import static datadog.trace.agent.tooling.bytebuddy.matcher.DDElementMatchers.implementsInterface;
|
||||
import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan;
|
||||
import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activeSpan;
|
||||
|
@ -9,7 +9,6 @@ import static datadog.trace.instrumentation.servlet.filter.FilterDecorator.DECOR
|
|||
import static java.util.Collections.singletonMap;
|
||||
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 com.google.auto.service.AutoService;
|
||||
|
@ -38,8 +37,8 @@ public final class FilterInstrumentation extends Instrumenter.Default {
|
|||
@Override
|
||||
public ElementMatcher<ClassLoader> classLoaderMatcher() {
|
||||
// Optimization for expensive typeMatcher.
|
||||
// return not(classLoaderHasNoResources("javax/servlet/Filter.class")); // Not available in 2.2
|
||||
return not(classLoaderHasNoResources("javax/servlet/http/HttpServlet.class"));
|
||||
// return hasClassesNamed("javax.servlet.Filter"); // Not available in 2.2
|
||||
return hasClassesNamed("javax.servlet.http.HttpServlet");
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
package datadog.trace.instrumentation.servlet.http;
|
||||
|
||||
import static datadog.trace.agent.tooling.ClassLoaderMatcher.classLoaderHasNoResources;
|
||||
import static datadog.trace.agent.tooling.ClassLoaderMatcher.hasClassesNamed;
|
||||
import static datadog.trace.agent.tooling.bytebuddy.matcher.DDElementMatchers.extendsClass;
|
||||
import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan;
|
||||
import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activeSpan;
|
||||
|
@ -11,7 +11,6 @@ import static net.bytebuddy.matcher.ElementMatchers.isProtected;
|
|||
import static net.bytebuddy.matcher.ElementMatchers.isPublic;
|
||||
import static net.bytebuddy.matcher.ElementMatchers.nameStartsWith;
|
||||
import static net.bytebuddy.matcher.ElementMatchers.named;
|
||||
import static net.bytebuddy.matcher.ElementMatchers.not;
|
||||
import static net.bytebuddy.matcher.ElementMatchers.takesArgument;
|
||||
|
||||
import com.google.auto.service.AutoService;
|
||||
|
@ -40,7 +39,7 @@ public final class HttpServletInstrumentation extends Instrumenter.Default {
|
|||
@Override
|
||||
public ElementMatcher<ClassLoader> classLoaderMatcher() {
|
||||
// Optimization for expensive typeMatcher.
|
||||
return not(classLoaderHasNoResources("javax/servlet/http/HttpServlet.class"));
|
||||
return hasClassesNamed("javax.servlet.http.HttpServlet");
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
package datadog.trace.instrumentation.servlet.http;
|
||||
|
||||
import static datadog.trace.agent.tooling.ClassLoaderMatcher.classLoaderHasNoResources;
|
||||
import static datadog.trace.agent.tooling.ClassLoaderMatcher.hasClassesNamed;
|
||||
import static datadog.trace.agent.tooling.bytebuddy.matcher.DDElementMatchers.implementsInterface;
|
||||
import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan;
|
||||
import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activeSpan;
|
||||
|
@ -10,7 +10,6 @@ import static datadog.trace.instrumentation.servlet.ServletRequestSetter.SETTER;
|
|||
import static datadog.trace.instrumentation.servlet.http.HttpServletResponseDecorator.DECORATE;
|
||||
import static java.util.Collections.singletonMap;
|
||||
import static net.bytebuddy.matcher.ElementMatchers.named;
|
||||
import static net.bytebuddy.matcher.ElementMatchers.not;
|
||||
|
||||
import com.google.auto.service.AutoService;
|
||||
import datadog.trace.agent.tooling.Instrumenter;
|
||||
|
@ -35,7 +34,7 @@ public final class HttpServletResponseInstrumentation extends Instrumenter.Defau
|
|||
@Override
|
||||
public ElementMatcher<ClassLoader> classLoaderMatcher() {
|
||||
// Optimization for expensive typeMatcher.
|
||||
return not(classLoaderHasNoResources("javax/servlet/http/HttpServletResponse.class"));
|
||||
return hasClassesNamed("javax.servlet.http.HttpServletResponse");
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -1,12 +1,11 @@
|
|||
package datadog.trace.instrumentation.springwebflux.client;
|
||||
|
||||
import static datadog.trace.agent.tooling.ClassLoaderMatcher.classLoaderHasNoResources;
|
||||
import static datadog.trace.agent.tooling.ClassLoaderMatcher.hasClassesNamed;
|
||||
import static datadog.trace.agent.tooling.bytebuddy.matcher.DDElementMatchers.implementsInterface;
|
||||
import static java.util.Collections.singletonMap;
|
||||
import static net.bytebuddy.matcher.ElementMatchers.isMethod;
|
||||
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 com.google.auto.service.AutoService;
|
||||
|
@ -26,9 +25,7 @@ public class DefaultWebClientInstrumentation extends Instrumenter.Default {
|
|||
@Override
|
||||
public ElementMatcher<ClassLoader> classLoaderMatcher() {
|
||||
// Optimization for expensive typeMatcher.
|
||||
return not(
|
||||
classLoaderHasNoResources(
|
||||
"org/springframework/web/reactive/function/client/ExchangeFunction.class"));
|
||||
return hasClassesNamed("org.springframework.web.reactive.function.client.ExchangeFunction");
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
package datadog.trace.instrumentation.springwebflux.server;
|
||||
|
||||
import static datadog.trace.agent.tooling.ClassLoaderMatcher.hasClassesNamed;
|
||||
import static datadog.trace.agent.tooling.bytebuddy.matcher.DDElementMatchers.implementsInterface;
|
||||
import static java.util.Collections.singletonMap;
|
||||
import static net.bytebuddy.matcher.ElementMatchers.isAbstract;
|
||||
|
@ -20,6 +21,12 @@ import net.bytebuddy.matcher.ElementMatcher;
|
|||
@AutoService(Instrumenter.class)
|
||||
public final class HandlerAdapterInstrumentation extends AbstractWebfluxInstrumentation {
|
||||
|
||||
@Override
|
||||
public ElementMatcher<ClassLoader> classLoaderMatcher() {
|
||||
// Optimization for expensive typeMatcher.
|
||||
return hasClassesNamed("org.springframework.web.reactive.HandlerAdapter");
|
||||
}
|
||||
|
||||
@Override
|
||||
public ElementMatcher<TypeDescription> typeMatcher() {
|
||||
return not(isAbstract())
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
package datadog.trace.instrumentation.springwebflux.server;
|
||||
|
||||
import static datadog.trace.agent.tooling.ClassLoaderMatcher.hasClassesNamed;
|
||||
import static datadog.trace.agent.tooling.bytebuddy.matcher.DDElementMatchers.extendsClass;
|
||||
import static java.util.Collections.singletonMap;
|
||||
import static net.bytebuddy.matcher.ElementMatchers.isAbstract;
|
||||
|
@ -24,6 +25,12 @@ public final class RouterFunctionInstrumentation extends AbstractWebfluxInstrume
|
|||
super("spring-webflux-functional");
|
||||
}
|
||||
|
||||
@Override
|
||||
public ElementMatcher<ClassLoader> classLoaderMatcher() {
|
||||
// Optimization for expensive typeMatcher.
|
||||
return hasClassesNamed("org.springframework.web.reactive.function.server.ServerRequest");
|
||||
}
|
||||
|
||||
@Override
|
||||
public ElementMatcher<TypeDescription> typeMatcher() {
|
||||
return not(isAbstract())
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
package datadog.trace.instrumentation.springweb;
|
||||
|
||||
import static datadog.trace.agent.decorator.HttpServerDecorator.DD_SPAN_ATTRIBUTE;
|
||||
import static datadog.trace.agent.tooling.ClassLoaderMatcher.classLoaderHasNoResources;
|
||||
import static datadog.trace.agent.tooling.ClassLoaderMatcher.hasClassesNamed;
|
||||
import static datadog.trace.agent.tooling.bytebuddy.matcher.DDElementMatchers.implementsInterface;
|
||||
import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan;
|
||||
import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activeSpan;
|
||||
|
@ -12,7 +12,6 @@ import static net.bytebuddy.matcher.ElementMatchers.isMethod;
|
|||
import static net.bytebuddy.matcher.ElementMatchers.isPublic;
|
||||
import static net.bytebuddy.matcher.ElementMatchers.nameStartsWith;
|
||||
import static net.bytebuddy.matcher.ElementMatchers.named;
|
||||
import static net.bytebuddy.matcher.ElementMatchers.not;
|
||||
import static net.bytebuddy.matcher.ElementMatchers.takesArgument;
|
||||
import static net.bytebuddy.matcher.ElementMatchers.takesArguments;
|
||||
|
||||
|
@ -37,7 +36,7 @@ public final class HandlerAdapterInstrumentation extends Instrumenter.Default {
|
|||
@Override
|
||||
public ElementMatcher<ClassLoader> classLoaderMatcher() {
|
||||
// Optimization for expensive typeMatcher.
|
||||
return not(classLoaderHasNoResources("org/springframework/web/servlet/HandlerAdapter.class"));
|
||||
return hasClassesNamed("org.springframework.web.servlet.HandlerAdapter");
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
package datadog.trace.instrumentation.trace_annotation;
|
||||
|
||||
import static datadog.trace.agent.tooling.ClassLoaderMatcher.hasClassesNamed;
|
||||
import static datadog.trace.agent.tooling.bytebuddy.matcher.DDElementMatchers.safeHasSuperType;
|
||||
import static datadog.trace.instrumentation.trace_annotation.TraceConfigInstrumentation.PACKAGE_CLASS_NAME_REGEX;
|
||||
import static net.bytebuddy.matcher.ElementMatchers.declaresMethod;
|
||||
|
@ -77,6 +78,16 @@ public final class TraceAnnotationsInstrumentation extends Instrumenter.Default
|
|||
this.methodTraceMatcher = methodTraceMatcher;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ElementMatcher<ClassLoader> classLoaderMatcher() {
|
||||
// Optimization for expensive typeMatcher.
|
||||
ElementMatcher.Junction<ClassLoader> matcher = hasClassesNamed(Trace.class.getName());
|
||||
for (final String name : additionalTraceAnnotations) {
|
||||
matcher = matcher.or(hasClassesNamed(name));
|
||||
}
|
||||
return matcher;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ElementMatcher<TypeDescription> typeMatcher() {
|
||||
return safeHasSuperType(declaresMethod(isAnnotatedWith(methodTraceMatcher)));
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
package datadog.trace.instrumentation.trace_annotation;
|
||||
|
||||
import static datadog.trace.agent.tooling.ClassLoaderMatcher.hasClassesNamed;
|
||||
import static datadog.trace.agent.tooling.bytebuddy.matcher.DDElementMatchers.safeHasSuperType;
|
||||
import static net.bytebuddy.matcher.ElementMatchers.named;
|
||||
|
||||
|
@ -8,6 +9,7 @@ import com.google.common.collect.Maps;
|
|||
import com.google.common.collect.Sets;
|
||||
import datadog.trace.agent.tooling.Instrumenter;
|
||||
import datadog.trace.api.Config;
|
||||
import datadog.trace.api.Trace;
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
@ -115,7 +117,7 @@ public class TraceConfigInstrumentation implements Instrumenter {
|
|||
|
||||
/** No-arg constructor only used by muzzle and tests. */
|
||||
public TracerClassInstrumentation() {
|
||||
this("noop", Collections.singleton("noop"));
|
||||
this(Trace.class.getName(), Collections.singleton("noop"));
|
||||
}
|
||||
|
||||
public TracerClassInstrumentation(final String className, final Set<String> methodNames) {
|
||||
|
@ -124,6 +126,12 @@ public class TraceConfigInstrumentation implements Instrumenter {
|
|||
this.methodNames = methodNames;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ElementMatcher<ClassLoader> classLoaderMatcher() {
|
||||
// Optimization for expensive typeMatcher.
|
||||
return hasClassesNamed(className);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ElementMatcher<TypeDescription> typeMatcher() {
|
||||
return safeHasSuperType(named(className));
|
||||
|
|
|
@ -1,3 +1,12 @@
|
|||
muzzle {
|
||||
pass {
|
||||
group = "com.datadoghq"
|
||||
module = "dd-trace-api"
|
||||
versions = "[0.31.0,]"
|
||||
assertInverse = true
|
||||
}
|
||||
}
|
||||
|
||||
apply from: "${rootDir}/gradle/java.gradle"
|
||||
|
||||
dependencies {
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
package datadog.trace.instrumentation.twilio;
|
||||
|
||||
import static datadog.trace.agent.tooling.ClassLoaderMatcher.classLoaderHasNoResources;
|
||||
import static datadog.trace.agent.tooling.ClassLoaderMatcher.hasClassesNamed;
|
||||
import static datadog.trace.agent.tooling.bytebuddy.matcher.DDElementMatchers.extendsClass;
|
||||
import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan;
|
||||
import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.startSpan;
|
||||
|
@ -38,7 +38,7 @@ public class TwilioAsyncInstrumentation extends Instrumenter.Default {
|
|||
@Override
|
||||
public ElementMatcher<ClassLoader> classLoaderMatcher() {
|
||||
// Optimization for expensive typeMatcher.
|
||||
return not(classLoaderHasNoResources("com/twilio/Twilio.class"));
|
||||
return hasClassesNamed("com.twilio.Twilio");
|
||||
}
|
||||
|
||||
/** Match any child class of the base Twilio service classes. */
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
package datadog.trace.instrumentation.twilio;
|
||||
|
||||
import static datadog.trace.agent.tooling.ClassLoaderMatcher.classLoaderHasNoResources;
|
||||
import static datadog.trace.agent.tooling.ClassLoaderMatcher.hasClassesNamed;
|
||||
import static datadog.trace.agent.tooling.bytebuddy.matcher.DDElementMatchers.extendsClass;
|
||||
import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan;
|
||||
import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.startSpan;
|
||||
|
@ -34,7 +34,7 @@ public class TwilioSyncInstrumentation extends Instrumenter.Default {
|
|||
@Override
|
||||
public ElementMatcher<ClassLoader> classLoaderMatcher() {
|
||||
// Optimization for expensive typeMatcher.
|
||||
return not(classLoaderHasNoResources("com/twilio/Twilio.class"));
|
||||
return hasClassesNamed("com.twilio.Twilio");
|
||||
}
|
||||
|
||||
/** Match any child class of the base Twilio service classes. */
|
||||
|
|
Loading…
Reference in New Issue