Avoid calling superclass matcher where possible
Saves about 100ms of startup time on test app
This commit is contained in:
parent
e92d326052
commit
b6d374e3a0
|
@ -2,6 +2,7 @@ package datadog.trace.instrumentation.aws.v0;
|
||||||
|
|
||||||
import static datadog.trace.agent.tooling.ByteBuddyElementMatchers.safeExtendsClass;
|
import static datadog.trace.agent.tooling.ByteBuddyElementMatchers.safeExtendsClass;
|
||||||
import static java.util.Collections.singletonMap;
|
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.named;
|
||||||
import static net.bytebuddy.matcher.ElementMatchers.takesArgument;
|
import static net.bytebuddy.matcher.ElementMatchers.takesArgument;
|
||||||
|
|
||||||
|
@ -26,7 +27,8 @@ public final class RequestInstrumentation extends Instrumenter.Default {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ElementMatcher<TypeDescription> typeMatcher() {
|
public ElementMatcher<TypeDescription> typeMatcher() {
|
||||||
return safeExtendsClass(named("com.amazonaws.AmazonWebServiceRequest"));
|
return nameStartsWith("com.amazonaws.")
|
||||||
|
.and(safeExtendsClass(named("com.amazonaws.AmazonWebServiceRequest")));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -5,6 +5,7 @@ import static java.util.Collections.singletonMap;
|
||||||
import static net.bytebuddy.matcher.ElementMatchers.isInterface;
|
import static net.bytebuddy.matcher.ElementMatchers.isInterface;
|
||||||
import static net.bytebuddy.matcher.ElementMatchers.isMethod;
|
import static net.bytebuddy.matcher.ElementMatchers.isMethod;
|
||||||
import static net.bytebuddy.matcher.ElementMatchers.isPublic;
|
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.named;
|
||||||
import static net.bytebuddy.matcher.ElementMatchers.not;
|
import static net.bytebuddy.matcher.ElementMatchers.not;
|
||||||
|
|
||||||
|
@ -23,7 +24,8 @@ public final class AwsClientInstrumentation extends AbstractAwsClientInstrumenta
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ElementMatcher<TypeDescription> typeMatcher() {
|
public ElementMatcher<TypeDescription> typeMatcher() {
|
||||||
return not(isInterface())
|
return nameStartsWith("software.amazon.awssdk.")
|
||||||
|
.and(not(isInterface()))
|
||||||
.and(
|
.and(
|
||||||
safeHasInterface(named("software.amazon.awssdk.core.client.builder.SdkClientBuilder")));
|
safeHasInterface(named("software.amazon.awssdk.core.client.builder.SdkClientBuilder")));
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,6 +5,7 @@ import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activeScop
|
||||||
import static net.bytebuddy.matcher.ElementMatchers.isInterface;
|
import static net.bytebuddy.matcher.ElementMatchers.isInterface;
|
||||||
import static net.bytebuddy.matcher.ElementMatchers.isMethod;
|
import static net.bytebuddy.matcher.ElementMatchers.isMethod;
|
||||||
import static net.bytebuddy.matcher.ElementMatchers.isPublic;
|
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.named;
|
||||||
import static net.bytebuddy.matcher.ElementMatchers.not;
|
import static net.bytebuddy.matcher.ElementMatchers.not;
|
||||||
|
|
||||||
|
@ -28,11 +29,14 @@ public final class AwsHttpClientInstrumentation extends AbstractAwsClientInstrum
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ElementMatcher<TypeDescription> typeMatcher() {
|
public ElementMatcher<TypeDescription> typeMatcher() {
|
||||||
return safeExtendsClass(
|
return nameStartsWith("software.amazon.awssdk.")
|
||||||
named("software.amazon.awssdk.core.internal.http.pipeline.stages.MakeHttpRequestStage")
|
.and(
|
||||||
|
safeExtendsClass(
|
||||||
|
named(
|
||||||
|
"software.amazon.awssdk.core.internal.http.pipeline.stages.MakeHttpRequestStage")
|
||||||
.or(
|
.or(
|
||||||
named(
|
named(
|
||||||
"software.amazon.awssdk.core.internal.http.pipeline.stages.MakeAsyncHttpRequestStage")))
|
"software.amazon.awssdk.core.internal.http.pipeline.stages.MakeAsyncHttpRequestStage"))))
|
||||||
.and(not(isInterface()));
|
.and(not(isInterface()));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -3,6 +3,7 @@ package datadog.trace.instrumentation.couchbase.client;
|
||||||
import static datadog.trace.agent.tooling.ByteBuddyElementMatchers.safeExtendsClass;
|
import static datadog.trace.agent.tooling.ByteBuddyElementMatchers.safeExtendsClass;
|
||||||
import static java.util.Collections.singletonMap;
|
import static java.util.Collections.singletonMap;
|
||||||
import static net.bytebuddy.matcher.ElementMatchers.isMethod;
|
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.named;
|
||||||
import static net.bytebuddy.matcher.ElementMatchers.takesArgument;
|
import static net.bytebuddy.matcher.ElementMatchers.takesArgument;
|
||||||
import static net.bytebuddy.matcher.ElementMatchers.takesArguments;
|
import static net.bytebuddy.matcher.ElementMatchers.takesArguments;
|
||||||
|
@ -31,7 +32,9 @@ public class CouchbaseNetworkInstrumentation extends Instrumenter.Default {
|
||||||
@Override
|
@Override
|
||||||
public ElementMatcher<? super TypeDescription> typeMatcher() {
|
public ElementMatcher<? super TypeDescription> typeMatcher() {
|
||||||
// Exact class because private fields are used
|
// Exact class because private fields are used
|
||||||
return safeExtendsClass(named("com.couchbase.client.core.endpoint.AbstractGenericHandler"));
|
return nameStartsWith("com.couchbase.client.")
|
||||||
|
.<TypeDescription>and(
|
||||||
|
safeExtendsClass(named("com.couchbase.client.core.endpoint.AbstractGenericHandler")));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -8,6 +8,7 @@ import static datadog.trace.instrumentation.finatra.FinatraDecorator.DECORATE;
|
||||||
import static java.util.Collections.singletonMap;
|
import static java.util.Collections.singletonMap;
|
||||||
import static net.bytebuddy.matcher.ElementMatchers.isInterface;
|
import static net.bytebuddy.matcher.ElementMatchers.isInterface;
|
||||||
import static net.bytebuddy.matcher.ElementMatchers.isMethod;
|
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.named;
|
||||||
import static net.bytebuddy.matcher.ElementMatchers.not;
|
import static net.bytebuddy.matcher.ElementMatchers.not;
|
||||||
import static net.bytebuddy.matcher.ElementMatchers.takesArgument;
|
import static net.bytebuddy.matcher.ElementMatchers.takesArgument;
|
||||||
|
@ -51,7 +52,8 @@ public class FinatraInstrumentation extends Instrumenter.Default {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ElementMatcher<? super TypeDescription> typeMatcher() {
|
public ElementMatcher<? super TypeDescription> typeMatcher() {
|
||||||
return not(isInterface())
|
return nameStartsWith("com.twitter.finatra.")
|
||||||
|
.and(not(isInterface()))
|
||||||
.and(safeExtendsClass(named("com.twitter.finatra.http.internal.routing.Route")));
|
.and(safeExtendsClass(named("com.twitter.finatra.http.internal.routing.Route")));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -9,6 +9,7 @@ import static datadog.trace.instrumentation.http_url_connection.HttpUrlConnectio
|
||||||
import static java.util.Collections.singletonMap;
|
import static java.util.Collections.singletonMap;
|
||||||
import static net.bytebuddy.matcher.ElementMatchers.isMethod;
|
import static net.bytebuddy.matcher.ElementMatchers.isMethod;
|
||||||
import static net.bytebuddy.matcher.ElementMatchers.isPublic;
|
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.named;
|
||||||
import static net.bytebuddy.matcher.ElementMatchers.not;
|
import static net.bytebuddy.matcher.ElementMatchers.not;
|
||||||
|
|
||||||
|
@ -25,6 +26,7 @@ import net.bytebuddy.asm.Advice;
|
||||||
import net.bytebuddy.description.method.MethodDescription;
|
import net.bytebuddy.description.method.MethodDescription;
|
||||||
import net.bytebuddy.description.type.TypeDescription;
|
import net.bytebuddy.description.type.TypeDescription;
|
||||||
import net.bytebuddy.matcher.ElementMatcher;
|
import net.bytebuddy.matcher.ElementMatcher;
|
||||||
|
import net.bytebuddy.matcher.ElementMatchers;
|
||||||
|
|
||||||
@AutoService(Instrumenter.class)
|
@AutoService(Instrumenter.class)
|
||||||
public class HttpUrlConnectionInstrumentation extends Instrumenter.Default {
|
public class HttpUrlConnectionInstrumentation extends Instrumenter.Default {
|
||||||
|
@ -35,8 +37,10 @@ public class HttpUrlConnectionInstrumentation extends Instrumenter.Default {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ElementMatcher<TypeDescription> typeMatcher() {
|
public ElementMatcher<TypeDescription> typeMatcher() {
|
||||||
|
return nameStartsWith("java.net.")
|
||||||
|
.or(ElementMatchers.<TypeDescription>nameStartsWith("sun.net"))
|
||||||
// This class is a simple delegator. Skip because it does not update its `connected` field.
|
// This class is a simple delegator. Skip because it does not update its `connected` field.
|
||||||
return not(named("sun.net.www.protocol.https.HttpsURLConnectionImpl"))
|
.and(not(named("sun.net.www.protocol.https.HttpsURLConnectionImpl")))
|
||||||
.and(safeExtendsClass(named("java.net.HttpURLConnection")));
|
.and(safeExtendsClass(named("java.net.HttpURLConnection")));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -3,7 +3,10 @@ package datadog.trace.instrumentation.http_url_connection;
|
||||||
import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan;
|
import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activateSpan;
|
||||||
import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.startSpan;
|
import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.startSpan;
|
||||||
import static java.util.Collections.singletonMap;
|
import static java.util.Collections.singletonMap;
|
||||||
import static net.bytebuddy.matcher.ElementMatchers.*;
|
import static net.bytebuddy.matcher.ElementMatchers.is;
|
||||||
|
import static net.bytebuddy.matcher.ElementMatchers.isMethod;
|
||||||
|
import static net.bytebuddy.matcher.ElementMatchers.isPublic;
|
||||||
|
import static net.bytebuddy.matcher.ElementMatchers.named;
|
||||||
|
|
||||||
import com.google.auto.service.AutoService;
|
import com.google.auto.service.AutoService;
|
||||||
import datadog.trace.agent.tooling.Instrumenter;
|
import datadog.trace.agent.tooling.Instrumenter;
|
||||||
|
|
|
@ -7,6 +7,7 @@ import static datadog.trace.instrumentation.playws1.HeadersInjectAdapter.SETTER;
|
||||||
import static datadog.trace.instrumentation.playws1.PlayWSClientDecorator.DECORATE;
|
import static datadog.trace.instrumentation.playws1.PlayWSClientDecorator.DECORATE;
|
||||||
import static java.util.Collections.singletonMap;
|
import static java.util.Collections.singletonMap;
|
||||||
import static net.bytebuddy.matcher.ElementMatchers.isMethod;
|
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.named;
|
||||||
import static net.bytebuddy.matcher.ElementMatchers.not;
|
import static net.bytebuddy.matcher.ElementMatchers.not;
|
||||||
import static net.bytebuddy.matcher.ElementMatchers.takesArgument;
|
import static net.bytebuddy.matcher.ElementMatchers.takesArgument;
|
||||||
|
@ -33,8 +34,10 @@ public class PlayWSClientInstrumentation extends Instrumenter.Default {
|
||||||
public ElementMatcher<? super TypeDescription> typeMatcher() {
|
public ElementMatcher<? super TypeDescription> typeMatcher() {
|
||||||
// CachingAsyncHttpClient rejects overrides to AsyncHandler
|
// CachingAsyncHttpClient rejects overrides to AsyncHandler
|
||||||
// It also delegates to another AsyncHttpClient
|
// It also delegates to another AsyncHttpClient
|
||||||
return safeHasInterface(named("play.shaded.ahc.org.asynchttpclient.AsyncHttpClient"))
|
return nameStartsWith("play.")
|
||||||
.and(not(named("play.api.libs.ws.ahc.cache.CachingAsyncHttpClient")));
|
.<TypeDescription>and(
|
||||||
|
safeHasInterface(named("play.shaded.ahc.org.asynchttpclient.AsyncHttpClient"))
|
||||||
|
.and(not(named("play.api.libs.ws.ahc.cache.CachingAsyncHttpClient"))));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -3,6 +3,7 @@ package datadog.trace.instrumentation.ratpack;
|
||||||
import static datadog.trace.agent.tooling.ByteBuddyElementMatchers.safeHasInterface;
|
import static datadog.trace.agent.tooling.ByteBuddyElementMatchers.safeHasInterface;
|
||||||
import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activeSpan;
|
import static datadog.trace.bootstrap.instrumentation.api.AgentTracer.activeSpan;
|
||||||
import static java.util.Collections.singletonMap;
|
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.named;
|
||||||
import static net.bytebuddy.matcher.ElementMatchers.takesArgument;
|
import static net.bytebuddy.matcher.ElementMatchers.takesArgument;
|
||||||
|
|
||||||
|
@ -25,7 +26,8 @@ public final class ContinuationInstrumentation extends Instrumenter.Default {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ElementMatcher<? super TypeDescription> typeMatcher() {
|
public ElementMatcher<? super TypeDescription> typeMatcher() {
|
||||||
return safeHasInterface(named("ratpack.exec.internal.Continuation"));
|
return nameStartsWith("ratpack.exec.")
|
||||||
|
.<TypeDescription>and(safeHasInterface(named("ratpack.exec.internal.Continuation")));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
Loading…
Reference in New Issue