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:
Tyler Benson 2018-08-13 14:21:01 +10:00
parent c246966e5f
commit 4583d12b31
69 changed files with 222 additions and 212 deletions

View File

@ -158,7 +158,7 @@ public interface Instrumenter {
}
@Override
public ElementMatcher<? super ClassLoader> classLoaderMatcher() {
public ElementMatcher<ClassLoader> classLoaderMatcher() {
return any();
}

View File

@ -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");
}

View File

@ -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");
}

View File

@ -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",

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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"));
}

View File

@ -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());

View File

@ -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"));
}

View File

@ -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");
}

View File

@ -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");
}

View File

@ -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");
}

View File

@ -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");
}

View File

@ -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");
}

View File

@ -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")));

View File

@ -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");
}

View File

@ -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());

View File

@ -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")));

View File

@ -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());

View File

@ -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(

View File

@ -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(

View File

@ -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"))))));

View File

@ -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"));
}

View File

@ -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(",");

View File

@ -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")));
}

View File

@ -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")));
}

View File

@ -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")));
}

View File

@ -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");
}

View File

@ -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"));
}

View File

@ -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"));
}

View File

@ -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"));
}

View File

@ -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"));
}

View File

@ -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");
}

View File

@ -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");
}

View File

@ -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");
}

View File

@ -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")));
}

View File

@ -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()

View File

@ -1,9 +1,9 @@
<html>
<head>
<head>
<title>PLAIN HTML</title>
</head>
</head>
<body>
<h1>HELLO DATADOG</h1>
</body>
<body>
<h1>HELLO DATADOG</h1>
</body>
</html>

View File

@ -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())

View File

@ -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())

View File

@ -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());

View File

@ -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())

View File

@ -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");
}

View File

@ -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");
}

View File

@ -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");
}

View File

@ -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());

View File

@ -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());

View File

@ -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");
}

View File

@ -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");
}

View File

@ -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());

View File

@ -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

View File

@ -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",

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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"

View File

@ -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"
};
}
}

View File

@ -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<>();

View File

@ -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<>();

View File

@ -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);
}

View File

@ -1 +1 @@
user: password,role
user:password,role

View File

@ -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;
}
}

View File

@ -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")));
}

View File

@ -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")));
}

View File

@ -1 +1 @@
user: password,role
user:password,role

View File

@ -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")))

View File

@ -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",

View File

@ -78,7 +78,7 @@ public final class TraceAnnotationsInstrumentation extends Instrumenter.Default
}
@Override
public ElementMatcher typeMatcher() {
public ElementMatcher<TypeDescription> typeMatcher() {
return safeHasSuperType(declaresMethod(isAnnotatedWith(methodTraceMatcher)));
}

View File

@ -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");
}

View File

@ -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;
}