Apply formatter on java files.

This commit is contained in:
Tyler Benson 2018-07-31 12:07:43 +10:00
parent bc3af56b08
commit 51919a77bb
31 changed files with 243 additions and 140 deletions

View File

@ -3,7 +3,11 @@ package datadog.trace.agent.tooling;
import datadog.trace.bootstrap.DatadogClassLoader; import datadog.trace.bootstrap.DatadogClassLoader;
import datadog.trace.bootstrap.PatchLogger; import datadog.trace.bootstrap.PatchLogger;
import io.opentracing.util.GlobalTracer; import io.opentracing.util.GlobalTracer;
import java.util.*; import java.util.Collections;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import java.util.WeakHashMap;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import net.bytebuddy.matcher.ElementMatcher; import net.bytebuddy.matcher.ElementMatcher;
@ -44,7 +48,7 @@ public class ClassLoaderMatcher {
private static final Set<String> CLASSLOADER_CLASSES_TO_SKIP; private static final Set<String> CLASSLOADER_CLASSES_TO_SKIP;
static { static {
final Set<String> classesToSkip = new HashSet<String>(); final Set<String> classesToSkip = new HashSet<>();
classesToSkip.add("org.codehaus.groovy.runtime.callsite.CallSiteClassLoader"); classesToSkip.add("org.codehaus.groovy.runtime.callsite.CallSiteClassLoader");
classesToSkip.add("sun.reflect.DelegatingClassLoader"); classesToSkip.add("sun.reflect.DelegatingClassLoader");
classesToSkip.add("jdk.internal.reflect.DelegatingClassLoader"); classesToSkip.add("jdk.internal.reflect.DelegatingClassLoader");
@ -55,7 +59,7 @@ public class ClassLoaderMatcher {
private SkipClassLoaderMatcher() {} private SkipClassLoaderMatcher() {}
@Override @Override
public boolean matches(ClassLoader target) { public boolean matches(final ClassLoader target) {
if (target == BOOTSTRAP_CLASSLOADER) { if (target == BOOTSTRAP_CLASSLOADER) {
// Don't skip bootstrap loader // Don't skip bootstrap loader
return false; return false;
@ -63,7 +67,7 @@ public class ClassLoaderMatcher {
return shouldSkipClass(target) || shouldSkipInstance(target); return shouldSkipClass(target) || shouldSkipInstance(target);
} }
private boolean shouldSkipClass(ClassLoader loader) { private boolean shouldSkipClass(final ClassLoader loader) {
return CLASSLOADER_CLASSES_TO_SKIP.contains(loader.getClass().getName()); return CLASSLOADER_CLASSES_TO_SKIP.contains(loader.getClass().getName());
} }
@ -77,7 +81,7 @@ public class ClassLoaderMatcher {
if (null != cached) { if (null != cached) {
return cached.booleanValue(); return cached.booleanValue();
} }
boolean skip = !delegatesToBootstrap(loader); final boolean skip = !delegatesToBootstrap(loader);
if (skip) { if (skip) {
log.debug( log.debug(
"skipping classloader instance {} of type {}", loader, loader.getClass().getName()); "skipping classloader instance {} of type {}", loader, loader.getClass().getName());
@ -87,7 +91,7 @@ public class ClassLoaderMatcher {
} }
} }
private boolean delegatesToBootstrap(ClassLoader loader) { private boolean delegatesToBootstrap(final ClassLoader loader) {
boolean delegates = true; boolean delegates = true;
if (!loadsExpectedClass(loader, GlobalTracer.class)) { if (!loadsExpectedClass(loader, GlobalTracer.class)) {
log.debug("loader {} failed to delegate bootstrap opentracing class", loader); log.debug("loader {} failed to delegate bootstrap opentracing class", loader);
@ -100,10 +104,10 @@ public class ClassLoaderMatcher {
return delegates; return delegates;
} }
private boolean loadsExpectedClass(ClassLoader loader, Class<?> expectedClass) { private boolean loadsExpectedClass(final ClassLoader loader, final Class<?> expectedClass) {
try { try {
return loader.loadClass(expectedClass.getName()) == expectedClass; return loader.loadClass(expectedClass.getName()) == expectedClass;
} catch (ClassNotFoundException e) { } catch (final ClassNotFoundException e) {
return false; return false;
} }
} }

View File

@ -12,7 +12,12 @@ import net.bytebuddy.description.field.FieldList;
import net.bytebuddy.description.method.MethodList; import net.bytebuddy.description.method.MethodList;
import net.bytebuddy.description.type.TypeDescription; import net.bytebuddy.description.type.TypeDescription;
import net.bytebuddy.implementation.Implementation; import net.bytebuddy.implementation.Implementation;
import net.bytebuddy.jar.asm.*; import net.bytebuddy.jar.asm.ClassVisitor;
import net.bytebuddy.jar.asm.ClassWriter;
import net.bytebuddy.jar.asm.Label;
import net.bytebuddy.jar.asm.MethodVisitor;
import net.bytebuddy.jar.asm.Opcodes;
import net.bytebuddy.jar.asm.Type;
import net.bytebuddy.pool.TypePool; import net.bytebuddy.pool.TypePool;
/** Visit a class and add: a private instrumenationMuzzle field and getter */ /** Visit a class and add: a private instrumenationMuzzle field and getter */

View File

@ -3,7 +3,10 @@ package datadog.trace.agent.tooling.muzzle;
import static datadog.trace.agent.tooling.ClassLoaderMatcher.BOOTSTRAP_CLASSLOADER; import static datadog.trace.agent.tooling.ClassLoaderMatcher.BOOTSTRAP_CLASSLOADER;
import datadog.trace.agent.tooling.Utils; import datadog.trace.agent.tooling.Utils;
import java.util.*; import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
/** An immutable reference to a jvm class. */ /** An immutable reference to a jvm class. */
public class Reference { public class Reference {

View File

@ -3,8 +3,17 @@ package datadog.trace.agent.tooling.muzzle;
import datadog.trace.agent.tooling.Utils; import datadog.trace.agent.tooling.Utils;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
import java.util.*; import java.util.ArrayDeque;
import net.bytebuddy.jar.asm.*; import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Queue;
import java.util.Set;
import net.bytebuddy.jar.asm.ClassReader;
import net.bytebuddy.jar.asm.ClassVisitor;
import net.bytebuddy.jar.asm.Label;
import net.bytebuddy.jar.asm.MethodVisitor;
import net.bytebuddy.jar.asm.Opcodes;
/** Visit a class and collect all references made by the visited class. */ /** Visit a class and collect all references made by the visited class. */
public class ReferenceCreator extends ClassVisitor { public class ReferenceCreator extends ClassVisitor {

View File

@ -3,7 +3,14 @@ package datadog.trace.agent.tooling.muzzle;
import static net.bytebuddy.dynamic.loading.ClassLoadingStrategy.BOOTSTRAP_LOADER; import static net.bytebuddy.dynamic.loading.ClassLoadingStrategy.BOOTSTRAP_LOADER;
import datadog.trace.agent.tooling.Utils; import datadog.trace.agent.tooling.Utils;
import java.util.*; import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.WeakHashMap;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
/** Matches a set of references against a classloader. */ /** Matches a set of references against a classloader. */

View File

@ -1,8 +1,11 @@
import static com.lightbend.lagom.javadsl.api.Service.*; import static com.lightbend.lagom.javadsl.api.Service.named;
import static com.lightbend.lagom.javadsl.api.Service.namedCall;
import akka.NotUsed; import akka.NotUsed;
import akka.stream.javadsl.Source; import akka.stream.javadsl.Source;
import com.lightbend.lagom.javadsl.api.*; import com.lightbend.lagom.javadsl.api.Descriptor;
import com.lightbend.lagom.javadsl.api.Service;
import com.lightbend.lagom.javadsl.api.ServiceCall;
public interface EchoService extends Service { public interface EchoService extends Service {

View File

@ -1,7 +1,9 @@
package datadog.trace.instrumentation.akkahttp; package datadog.trace.instrumentation.akkahttp;
import static io.opentracing.log.Fields.ERROR_OBJECT; import static io.opentracing.log.Fields.ERROR_OBJECT;
import static net.bytebuddy.matcher.ElementMatchers.*; import static net.bytebuddy.matcher.ElementMatchers.named;
import static net.bytebuddy.matcher.ElementMatchers.returns;
import static net.bytebuddy.matcher.ElementMatchers.takesArgument;
import akka.NotUsed; import akka.NotUsed;
import akka.http.javadsl.model.headers.RawHeader; import akka.http.javadsl.model.headers.RawHeader;
@ -10,7 +12,7 @@ import akka.http.scaladsl.model.HttpRequest;
import akka.http.scaladsl.model.HttpResponse; import akka.http.scaladsl.model.HttpResponse;
import akka.stream.scaladsl.Flow; import akka.stream.scaladsl.Flow;
import com.google.auto.service.AutoService; import com.google.auto.service.AutoService;
import datadog.trace.agent.tooling.*; import datadog.trace.agent.tooling.Instrumenter;
import datadog.trace.api.DDSpanTypes; import datadog.trace.api.DDSpanTypes;
import datadog.trace.api.DDTags; import datadog.trace.api.DDTags;
import io.opentracing.Scope; import io.opentracing.Scope;
@ -92,10 +94,10 @@ public final class AkkaHttpClientInstrumentation extends Instrumenter.Default {
.withTag(Tags.HTTP_METHOD.getKey(), request.method().value()) .withTag(Tags.HTTP_METHOD.getKey(), request.method().value())
.withTag(Tags.HTTP_URL.getKey(), request.getUri().toString()); .withTag(Tags.HTTP_URL.getKey(), request.getUri().toString());
} }
Scope scope = builder.startActive(false); final Scope scope = builder.startActive(false);
if (request != null) { if (request != null) {
AkkaHttpHeaders headers = new AkkaHttpHeaders(request); final AkkaHttpHeaders headers = new AkkaHttpHeaders(request);
GlobalTracer.get().inject(scope.span().context(), Format.Builtin.HTTP_HEADERS, headers); GlobalTracer.get().inject(scope.span().context(), Format.Builtin.HTTP_HEADERS, headers);
// Request is immutable, so we have to assign new value once we update headers // Request is immutable, so we have to assign new value once we update headers
request = headers.getRequest(); request = headers.getRequest();
@ -111,7 +113,7 @@ public final class AkkaHttpClientInstrumentation extends Instrumenter.Default {
@Advice.Return final Future<HttpResponse> responseFuture, @Advice.Return final Future<HttpResponse> responseFuture,
@Advice.Enter final Scope scope, @Advice.Enter final Scope scope,
@Advice.Thrown final Throwable throwable) { @Advice.Thrown final Throwable throwable) {
Span span = scope.span(); final Span span = scope.span();
if (throwable == null) { if (throwable == null) {
responseFuture.onComplete(new OnCompleteHandler(span), thiz.system().dispatcher()); responseFuture.onComplete(new OnCompleteHandler(span), thiz.system().dispatcher());
} else { } else {
@ -135,12 +137,12 @@ public final class AkkaHttpClientInstrumentation extends Instrumenter.Default {
public static class OnCompleteHandler extends AbstractFunction1<Try<HttpResponse>, Void> { public static class OnCompleteHandler extends AbstractFunction1<Try<HttpResponse>, Void> {
private final Span span; private final Span span;
public OnCompleteHandler(Span span) { public OnCompleteHandler(final Span span) {
this.span = span; this.span = span;
} }
@Override @Override
public Void apply(Try<HttpResponse> result) { public Void apply(final Try<HttpResponse> result) {
if (result.isSuccess()) { if (result.isSuccess()) {
Tags.HTTP_STATUS.set(span, result.get().status().intValue()); Tags.HTTP_STATUS.set(span, result.get().status().intValue());
} else { } else {
@ -155,7 +157,7 @@ public final class AkkaHttpClientInstrumentation extends Instrumenter.Default {
public static class AkkaHttpHeaders implements TextMap { public static class AkkaHttpHeaders implements TextMap {
private HttpRequest request; private HttpRequest request;
public AkkaHttpHeaders(HttpRequest request) { public AkkaHttpHeaders(final HttpRequest request) {
this.request = request; this.request = request;
} }

View File

@ -1,14 +1,15 @@
package datadog.trace.instrumentation.akkahttp; package datadog.trace.instrumentation.akkahttp;
import static io.opentracing.log.Fields.ERROR_OBJECT; import static io.opentracing.log.Fields.ERROR_OBJECT;
import static net.bytebuddy.matcher.ElementMatchers.*; import static net.bytebuddy.matcher.ElementMatchers.named;
import static net.bytebuddy.matcher.ElementMatchers.takesArgument;
import akka.http.javadsl.model.HttpHeader; import akka.http.javadsl.model.HttpHeader;
import akka.http.scaladsl.model.HttpRequest; import akka.http.scaladsl.model.HttpRequest;
import akka.http.scaladsl.model.HttpResponse; import akka.http.scaladsl.model.HttpResponse;
import akka.stream.*; import akka.stream.Materializer;
import com.google.auto.service.AutoService; import com.google.auto.service.AutoService;
import datadog.trace.agent.tooling.*; import datadog.trace.agent.tooling.Instrumenter;
import datadog.trace.api.DDSpanTypes; import datadog.trace.api.DDSpanTypes;
import datadog.trace.api.DDTags; import datadog.trace.api.DDTags;
import datadog.trace.context.TraceScope; import datadog.trace.context.TraceScope;
@ -19,7 +20,10 @@ import io.opentracing.propagation.Format;
import io.opentracing.propagation.TextMap; import io.opentracing.propagation.TextMap;
import io.opentracing.tag.Tags; import io.opentracing.tag.Tags;
import io.opentracing.util.GlobalTracer; import io.opentracing.util.GlobalTracer;
import java.util.*; import java.util.Collections;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import net.bytebuddy.asm.Advice; import net.bytebuddy.asm.Advice;
import net.bytebuddy.description.type.TypeDescription; import net.bytebuddy.description.type.TypeDescription;
@ -90,13 +94,13 @@ public final class AkkaHttpServerInstrumentation extends Instrumenter.Default {
public static void wrapHandler( public static void wrapHandler(
@Advice.Argument(value = 0, readOnly = false) @Advice.Argument(value = 0, readOnly = false)
Function1<HttpRequest, scala.concurrent.Future<HttpResponse>> handler, Function1<HttpRequest, scala.concurrent.Future<HttpResponse>> handler,
@Advice.Argument(value = 7) Materializer materializer) { @Advice.Argument(value = 7) final Materializer materializer) {
handler = new DatadogAsyncWrapper(handler, materializer.executionContext()); handler = new DatadogAsyncWrapper(handler, materializer.executionContext());
} }
} }
public static class DatadogWrapperHelper { public static class DatadogWrapperHelper {
public static Scope createSpan(HttpRequest request) { public static Scope createSpan(final HttpRequest request) {
final SpanContext extractedContext = final SpanContext extractedContext =
GlobalTracer.get() GlobalTracer.get()
.extract(Format.Builtin.HTTP_HEADERS, new AkkaHttpServerHeaders(request)); .extract(Format.Builtin.HTTP_HEADERS, new AkkaHttpServerHeaders(request));
@ -117,7 +121,7 @@ public final class AkkaHttpServerInstrumentation extends Instrumenter.Default {
return scope; return scope;
} }
public static void finishSpan(Span span, HttpResponse response) { public static void finishSpan(final Span span, final HttpResponse response) {
Tags.HTTP_STATUS.set(span, response.status().intValue()); Tags.HTTP_STATUS.set(span, response.status().intValue());
if (GlobalTracer.get().scopeManager().active() instanceof TraceScope) { if (GlobalTracer.get().scopeManager().active() instanceof TraceScope) {
@ -126,7 +130,7 @@ public final class AkkaHttpServerInstrumentation extends Instrumenter.Default {
span.finish(); span.finish();
} }
public static void finishSpan(Span span, Throwable t) { public static void finishSpan(final Span span, final Throwable t) {
Tags.ERROR.set(span, true); Tags.ERROR.set(span, true);
span.log(Collections.singletonMap(ERROR_OBJECT, t)); span.log(Collections.singletonMap(ERROR_OBJECT, t));
Tags.HTTP_STATUS.set(span, 500); Tags.HTTP_STATUS.set(span, 500);
@ -141,19 +145,19 @@ public final class AkkaHttpServerInstrumentation extends Instrumenter.Default {
public static class DatadogSyncWrapper extends AbstractFunction1<HttpRequest, HttpResponse> { public static class DatadogSyncWrapper extends AbstractFunction1<HttpRequest, HttpResponse> {
private final Function1<HttpRequest, HttpResponse> userHandler; private final Function1<HttpRequest, HttpResponse> userHandler;
public DatadogSyncWrapper(Function1<HttpRequest, HttpResponse> userHandler) { public DatadogSyncWrapper(final Function1<HttpRequest, HttpResponse> userHandler) {
this.userHandler = userHandler; this.userHandler = userHandler;
} }
@Override @Override
public HttpResponse apply(HttpRequest request) { public HttpResponse apply(final HttpRequest request) {
final Scope scope = DatadogWrapperHelper.createSpan(request); final Scope scope = DatadogWrapperHelper.createSpan(request);
try { try {
final HttpResponse response = userHandler.apply(request); final HttpResponse response = userHandler.apply(request);
scope.close(); scope.close();
DatadogWrapperHelper.finishSpan(scope.span(), response); DatadogWrapperHelper.finishSpan(scope.span(), response);
return response; return response;
} catch (Throwable t) { } catch (final Throwable t) {
scope.close(); scope.close();
DatadogWrapperHelper.finishSpan(scope.span(), t); DatadogWrapperHelper.finishSpan(scope.span(), t);
throw t; throw t;
@ -167,19 +171,19 @@ public final class AkkaHttpServerInstrumentation extends Instrumenter.Default {
private final ExecutionContext executionContext; private final ExecutionContext executionContext;
public DatadogAsyncWrapper( public DatadogAsyncWrapper(
Function1<HttpRequest, Future<HttpResponse>> userHandler, final Function1<HttpRequest, Future<HttpResponse>> userHandler,
ExecutionContext executionContext) { final ExecutionContext executionContext) {
this.userHandler = userHandler; this.userHandler = userHandler;
this.executionContext = executionContext; this.executionContext = executionContext;
} }
@Override @Override
public Future<HttpResponse> apply(HttpRequest request) { public Future<HttpResponse> apply(final HttpRequest request) {
final Scope scope = DatadogWrapperHelper.createSpan(request); final Scope scope = DatadogWrapperHelper.createSpan(request);
Future<HttpResponse> futureResponse = null; Future<HttpResponse> futureResponse = null;
try { try {
futureResponse = userHandler.apply(request); futureResponse = userHandler.apply(request);
} catch (Throwable t) { } catch (final Throwable t) {
scope.close(); scope.close();
DatadogWrapperHelper.finishSpan(scope.span(), t); DatadogWrapperHelper.finishSpan(scope.span(), t);
throw t; throw t;
@ -188,14 +192,14 @@ public final class AkkaHttpServerInstrumentation extends Instrumenter.Default {
futureResponse.transform( futureResponse.transform(
new AbstractFunction1<HttpResponse, HttpResponse>() { new AbstractFunction1<HttpResponse, HttpResponse>() {
@Override @Override
public HttpResponse apply(HttpResponse response) { public HttpResponse apply(final HttpResponse response) {
DatadogWrapperHelper.finishSpan(scope.span(), response); DatadogWrapperHelper.finishSpan(scope.span(), response);
return response; return response;
} }
}, },
new AbstractFunction1<Throwable, Throwable>() { new AbstractFunction1<Throwable, Throwable>() {
@Override @Override
public Throwable apply(Throwable t) { public Throwable apply(final Throwable t) {
DatadogWrapperHelper.finishSpan(scope.span(), t); DatadogWrapperHelper.finishSpan(scope.span(), t);
return t; return t;
} }
@ -209,7 +213,7 @@ public final class AkkaHttpServerInstrumentation extends Instrumenter.Default {
public static class AkkaHttpServerHeaders implements TextMap { public static class AkkaHttpServerHeaders implements TextMap {
private final HttpRequest request; private final HttpRequest request;
public AkkaHttpServerHeaders(HttpRequest request) { public AkkaHttpServerHeaders(final HttpRequest request) {
this.request = request; this.request = request;
} }
@ -217,7 +221,7 @@ public final class AkkaHttpServerInstrumentation extends Instrumenter.Default {
public Iterator<Map.Entry<String, String>> iterator() { public Iterator<Map.Entry<String, String>> iterator() {
final Map<String, String> javaMap = new HashMap<>(request.headers().size()); final Map<String, String> javaMap = new HashMap<>(request.headers().size());
for (HttpHeader header : request.getHeaders()) { for (final HttpHeader header : request.getHeaders()) {
javaMap.put(header.name(), header.value()); javaMap.put(header.name(), header.value());
} }
@ -225,7 +229,7 @@ public final class AkkaHttpServerInstrumentation extends Instrumenter.Default {
} }
@Override @Override
public void put(String name, String value) { public void put(final String name, final String value) {
throw new IllegalStateException("akka http server headers can only be extracted"); throw new IllegalStateException("akka http server headers can only be extracted");
} }
} }

View File

@ -13,7 +13,11 @@
*/ */
package datadog.trace.instrumentation.aws.v0; package datadog.trace.instrumentation.aws.v0;
import static io.opentracing.log.Fields.*; import static io.opentracing.log.Fields.ERROR_KIND;
import static io.opentracing.log.Fields.ERROR_OBJECT;
import static io.opentracing.log.Fields.EVENT;
import static io.opentracing.log.Fields.MESSAGE;
import static io.opentracing.log.Fields.STACK;
import com.amazonaws.AmazonWebServiceResponse; import com.amazonaws.AmazonWebServiceResponse;
import com.amazonaws.Request; import com.amazonaws.Request;

View File

@ -13,7 +13,11 @@
*/ */
package datadog.trace.instrumentation.aws.v106; package datadog.trace.instrumentation.aws.v106;
import static io.opentracing.log.Fields.*; import static io.opentracing.log.Fields.ERROR_KIND;
import static io.opentracing.log.Fields.ERROR_OBJECT;
import static io.opentracing.log.Fields.EVENT;
import static io.opentracing.log.Fields.MESSAGE;
import static io.opentracing.log.Fields.STACK;
import com.amazonaws.AmazonWebServiceResponse; import com.amazonaws.AmazonWebServiceResponse;
import com.amazonaws.Request; import com.amazonaws.Request;

View File

@ -13,7 +13,11 @@
*/ */
package datadog.trace.instrumentation.datastax.cassandra; package datadog.trace.instrumentation.datastax.cassandra;
import static io.opentracing.log.Fields.*; import static io.opentracing.log.Fields.ERROR_KIND;
import static io.opentracing.log.Fields.ERROR_OBJECT;
import static io.opentracing.log.Fields.EVENT;
import static io.opentracing.log.Fields.MESSAGE;
import static io.opentracing.log.Fields.STACK;
import com.datastax.driver.core.BoundStatement; import com.datastax.driver.core.BoundStatement;
import com.datastax.driver.core.CloseFuture; import com.datastax.driver.core.CloseFuture;
@ -244,7 +248,7 @@ class TracingSession implements Session {
public void run() { public void run() {
try { try {
finishSpan(span, future.get()); finishSpan(span, future.get());
} catch (InterruptedException | ExecutionException e) { } catch (final InterruptedException | ExecutionException e) {
finishSpan(span, e); finishSpan(span, e);
} }
} }

View File

@ -14,7 +14,9 @@ import io.opentracing.Span;
import io.opentracing.tag.Tags; import io.opentracing.tag.Tags;
import io.opentracing.util.GlobalTracer; import io.opentracing.util.GlobalTracer;
import java.lang.reflect.Method; import java.lang.reflect.Method;
import java.util.*; import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import net.bytebuddy.asm.Advice; import net.bytebuddy.asm.Advice;
import net.bytebuddy.matcher.ElementMatcher; import net.bytebuddy.matcher.ElementMatcher;
@ -34,7 +36,7 @@ public class HystrixCommandInstrumentation extends Instrumenter.Default {
@Override @Override
public Map<ElementMatcher, String> transformers() { public Map<ElementMatcher, String> transformers() {
Map<ElementMatcher, String> transformers = new HashMap<>(); final Map<ElementMatcher, String> transformers = new HashMap<>();
transformers.put( transformers.put(
isMethod().and(named("run").or(named("getFallback"))), TraceAdvice.class.getName()); isMethod().and(named("run").or(named("getFallback"))), TraceAdvice.class.getName());
return transformers; return transformers;

View File

@ -10,7 +10,8 @@ import datadog.trace.agent.tooling.Instrumenter;
import datadog.trace.context.TraceScope; import datadog.trace.context.TraceScope;
import io.opentracing.Scope; import io.opentracing.Scope;
import io.opentracing.util.GlobalTracer; import io.opentracing.util.GlobalTracer;
import java.util.*; import java.util.HashMap;
import java.util.Map;
import net.bytebuddy.asm.Advice; import net.bytebuddy.asm.Advice;
import net.bytebuddy.matcher.ElementMatcher; import net.bytebuddy.matcher.ElementMatcher;

View File

@ -8,13 +8,19 @@ import static net.bytebuddy.matcher.ElementMatchers.not;
import static net.bytebuddy.matcher.ElementMatchers.takesArgument; import static net.bytebuddy.matcher.ElementMatchers.takesArgument;
import com.google.auto.service.AutoService; import com.google.auto.service.AutoService;
import datadog.trace.agent.tooling.*; import datadog.trace.agent.tooling.Instrumenter;
import datadog.trace.bootstrap.CallDepthThreadLocalMap; import datadog.trace.bootstrap.CallDepthThreadLocalMap;
import datadog.trace.context.TraceScope; import datadog.trace.context.TraceScope;
import io.opentracing.Scope; import io.opentracing.Scope;
import io.opentracing.util.GlobalTracer; import io.opentracing.util.GlobalTracer;
import java.lang.reflect.Field; import java.lang.reflect.Field;
import java.util.*; import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.concurrent.Callable; import java.util.concurrent.Callable;
import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.Executor; import java.util.concurrent.Executor;
@ -98,7 +104,7 @@ public final class ExecutorInstrumentation extends Instrumenter.Default {
// Check for possible prefixes match only if not whitelisted already // Check for possible prefixes match only if not whitelisted already
if (!whitelisted) { if (!whitelisted) {
for (String name : WHITELISTED_EXECUTORS_PREFIXES) { for (final String name : WHITELISTED_EXECUTORS_PREFIXES) {
if (target.getName().startsWith(name)) { if (target.getName().startsWith(name)) {
whitelisted = true; whitelisted = true;
break; break;
@ -126,7 +132,7 @@ public final class ExecutorInstrumentation extends Instrumenter.Default {
@Override @Override
public Map<ElementMatcher, String> transformers() { public Map<ElementMatcher, String> transformers() {
Map<ElementMatcher, String> transformers = new HashMap<>(); final Map<ElementMatcher, String> transformers = new HashMap<>();
transformers.put( transformers.put(
named("execute").and(takesArgument(0, Runnable.class)), WrapRunnableAdvice.class.getName()); named("execute").and(takesArgument(0, Runnable.class)), WrapRunnableAdvice.class.getName());
transformers.put( transformers.put(
@ -141,7 +147,6 @@ public final class ExecutorInstrumentation extends Instrumenter.Default {
public static class WrapRunnableAdvice { public static class WrapRunnableAdvice {
@SuppressWarnings("unused")
@Advice.OnMethodEnter(suppress = Throwable.class) @Advice.OnMethodEnter(suppress = Throwable.class)
public static DatadogWrapper enterJobSubmit( public static DatadogWrapper enterJobSubmit(
@Advice.Argument(value = 0, readOnly = false) Runnable task) { @Advice.Argument(value = 0, readOnly = false) Runnable task) {
@ -153,7 +158,6 @@ public final class ExecutorInstrumentation extends Instrumenter.Default {
return null; return null;
} }
@SuppressWarnings("unused")
@Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class) @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class)
public static void exitJobSubmit( public static void exitJobSubmit(
@Advice.Enter final DatadogWrapper wrapper, @Advice.Thrown final Throwable throwable) { @Advice.Enter final DatadogWrapper wrapper, @Advice.Thrown final Throwable throwable) {
@ -163,7 +167,6 @@ public final class ExecutorInstrumentation extends Instrumenter.Default {
public static class WrapCallableAdvice { public static class WrapCallableAdvice {
@SuppressWarnings("unused")
@Advice.OnMethodEnter(suppress = Throwable.class) @Advice.OnMethodEnter(suppress = Throwable.class)
public static DatadogWrapper enterJobSubmit( public static DatadogWrapper enterJobSubmit(
@Advice.Argument(value = 0, readOnly = false) Callable<?> task) { @Advice.Argument(value = 0, readOnly = false) Callable<?> task) {
@ -176,7 +179,6 @@ public final class ExecutorInstrumentation extends Instrumenter.Default {
return null; return null;
} }
@SuppressWarnings("unused")
@Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class) @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class)
public static void exitJobSubmit( public static void exitJobSubmit(
@Advice.Enter final DatadogWrapper wrapper, @Advice.Thrown final Throwable throwable) { @Advice.Enter final DatadogWrapper wrapper, @Advice.Thrown final Throwable throwable) {
@ -186,7 +188,6 @@ public final class ExecutorInstrumentation extends Instrumenter.Default {
public static class WrapCallableCollectionAdvice { public static class WrapCallableCollectionAdvice {
@SuppressWarnings("unused")
@Advice.OnMethodEnter(suppress = Throwable.class) @Advice.OnMethodEnter(suppress = Throwable.class)
public static Collection<?> wrapJob( public static Collection<?> wrapJob(
@Advice.Argument(value = 0, readOnly = false) Collection<? extends Callable<?>> tasks) { @Advice.Argument(value = 0, readOnly = false) Collection<? extends Callable<?>> tasks) {
@ -196,7 +197,7 @@ public final class ExecutorInstrumentation extends Instrumenter.Default {
&& tasks != null && tasks != null
&& DatadogWrapper.isTopLevelCall()) { && DatadogWrapper.isTopLevelCall()) {
final Collection<Callable<?>> wrappedTasks = new ArrayList<>(tasks.size()); final Collection<Callable<?>> wrappedTasks = new ArrayList<>(tasks.size());
for (Callable<?> task : tasks) { for (final Callable<?> task : tasks) {
if (task != null && !(task instanceof CallableWrapper)) { if (task != null && !(task instanceof CallableWrapper)) {
wrappedTasks.add(new CallableWrapper<>(task, (TraceScope) scope)); wrappedTasks.add(new CallableWrapper<>(task, (TraceScope) scope));
} }
@ -207,7 +208,6 @@ public final class ExecutorInstrumentation extends Instrumenter.Default {
return null; return null;
} }
@SuppressWarnings("unused")
@Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class) @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class)
public static void checkCancel( public static void checkCancel(
@Advice.Enter final Collection<?> wrappedJobs, @Advice.Thrown final Throwable throwable) { @Advice.Enter final Collection<?> wrappedJobs, @Advice.Thrown final Throwable throwable) {
@ -250,13 +250,11 @@ public final class ExecutorInstrumentation extends Instrumenter.Default {
* *
* @return true iff call is not nested * @return true iff call is not nested
*/ */
@SuppressWarnings("WeakerAccess")
public static boolean isTopLevelCall() { public static boolean isTopLevelCall() {
return CallDepthThreadLocalMap.incrementCallDepth(ExecutorService.class) <= 0; return CallDepthThreadLocalMap.incrementCallDepth(ExecutorService.class) <= 0;
} }
/** Reset nested calls to executor. */ /** Reset nested calls to executor. */
@SuppressWarnings("WeakerAccess")
public static void resetNestedCalls() { public static void resetNestedCalls() {
CallDepthThreadLocalMap.reset(ExecutorService.class); CallDepthThreadLocalMap.reset(ExecutorService.class);
} }
@ -265,8 +263,7 @@ public final class ExecutorInstrumentation extends Instrumenter.Default {
* @param task task object * @param task task object
* @return true iff given task object should be wrapped * @return true iff given task object should be wrapped
*/ */
@SuppressWarnings("WeakerAccess") public static boolean shouldWrapTask(final Object task) {
public static boolean shouldWrapTask(Object task) {
final Scope scope = GlobalTracer.get().scopeManager().active(); final Scope scope = GlobalTracer.get().scopeManager().active();
return (scope instanceof TraceScope return (scope instanceof TraceScope
&& ((TraceScope) scope).isAsyncPropagating() && ((TraceScope) scope).isAsyncPropagating()
@ -281,7 +278,6 @@ public final class ExecutorInstrumentation extends Instrumenter.Default {
* @param wrapper task wrapper * @param wrapper task wrapper
* @param throwable throwable that may have been thrown * @param throwable throwable that may have been thrown
*/ */
@SuppressWarnings("WeakerAccess")
public static void cleanUpOnMethodExit( public static void cleanUpOnMethodExit(
final DatadogWrapper wrapper, final Throwable throwable) { final DatadogWrapper wrapper, final Throwable throwable) {
if (null != wrapper) { if (null != wrapper) {
@ -356,7 +352,7 @@ public final class ExecutorInstrumentation extends Instrumenter.Default {
if (o instanceof DatadogWrapper) { if (o instanceof DatadogWrapper) {
return (DatadogWrapper) o; return (DatadogWrapper) o;
} }
} catch (IllegalArgumentException | IllegalAccessException e) { } catch (final IllegalArgumentException | IllegalAccessException e) {
} finally { } finally {
field.setAccessible(false); field.setAccessible(false);
} }

View File

@ -10,7 +10,12 @@ import com.google.auto.service.AutoService;
import datadog.trace.agent.tooling.Instrumenter; import datadog.trace.agent.tooling.Instrumenter;
import datadog.trace.instrumentation.java.concurrent.ExecutorInstrumentation.ConcurrentUtils; import datadog.trace.instrumentation.java.concurrent.ExecutorInstrumentation.ConcurrentUtils;
import datadog.trace.instrumentation.java.concurrent.ExecutorInstrumentation.DatadogWrapper; import datadog.trace.instrumentation.java.concurrent.ExecutorInstrumentation.DatadogWrapper;
import java.util.*; import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.concurrent.Future; import java.util.concurrent.Future;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import net.bytebuddy.asm.Advice; import net.bytebuddy.asm.Advice;
@ -91,7 +96,7 @@ public final class FutureInstrumentation extends Instrumenter.Default {
@Override @Override
public Map<ElementMatcher, String> transformers() { public Map<ElementMatcher, String> transformers() {
Map<ElementMatcher, String> transformers = new HashMap<>(); final Map<ElementMatcher, String> transformers = new HashMap<>();
transformers.put( transformers.put(
named("cancel").and(returns(boolean.class)), CanceledFutureAdvice.class.getName()); named("cancel").and(returns(boolean.class)), CanceledFutureAdvice.class.getName());
return transformers; return transformers;

View File

@ -14,7 +14,9 @@ import io.opentracing.tag.Tags;
import io.opentracing.util.GlobalTracer; import io.opentracing.util.GlobalTracer;
import java.lang.annotation.Annotation; import java.lang.annotation.Annotation;
import java.lang.reflect.Method; import java.lang.reflect.Method;
import java.util.*; import java.util.HashMap;
import java.util.LinkedList;
import java.util.Map;
import javax.ws.rs.HttpMethod; import javax.ws.rs.HttpMethod;
import javax.ws.rs.Path; import javax.ws.rs.Path;
import net.bytebuddy.asm.Advice; import net.bytebuddy.asm.Advice;

View File

@ -6,7 +6,7 @@ import static net.bytebuddy.matcher.ElementMatchers.named;
import static net.bytebuddy.matcher.ElementMatchers.returns; import static net.bytebuddy.matcher.ElementMatchers.returns;
import com.google.auto.service.AutoService; import com.google.auto.service.AutoService;
import datadog.trace.agent.tooling.*; import datadog.trace.agent.tooling.Instrumenter;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
import javax.ws.rs.client.ClientBuilder; import javax.ws.rs.client.ClientBuilder;
@ -36,7 +36,7 @@ public final class JaxRsClientInstrumentation extends Instrumenter.Default {
@Override @Override
public Map<ElementMatcher, String> transformers() { public Map<ElementMatcher, String> transformers() {
Map<ElementMatcher, String> transformers = new HashMap<>(); final Map<ElementMatcher, String> transformers = new HashMap<>();
transformers.put( transformers.put(
named("build").and(returns(hasSuperType(named("javax.ws.rs.client.Client")))), named("build").and(returns(hasSuperType(named("javax.ws.rs.client.Client")))),
ClientBuilderAdvice.class.getName()); ClientBuilderAdvice.class.getName());

View File

@ -11,7 +11,7 @@ import static net.bytebuddy.matcher.ElementMatchers.not;
import static net.bytebuddy.matcher.ElementMatchers.takesArguments; import static net.bytebuddy.matcher.ElementMatchers.takesArguments;
import com.google.auto.service.AutoService; import com.google.auto.service.AutoService;
import datadog.trace.agent.tooling.*; import datadog.trace.agent.tooling.Instrumenter;
import datadog.trace.api.DDSpanTypes; import datadog.trace.api.DDSpanTypes;
import datadog.trace.api.DDTags; import datadog.trace.api.DDTags;
import datadog.trace.instrumentation.jms.util.MessagePropertyTextMap; import datadog.trace.instrumentation.jms.util.MessagePropertyTextMap;
@ -23,7 +23,9 @@ import io.opentracing.propagation.Format;
import io.opentracing.tag.Tags; import io.opentracing.tag.Tags;
import io.opentracing.util.GlobalTracer; import io.opentracing.util.GlobalTracer;
import java.lang.reflect.Method; import java.lang.reflect.Method;
import java.util.*; import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
import javax.jms.Message; import javax.jms.Message;
import javax.jms.MessageConsumer; import javax.jms.MessageConsumer;

View File

@ -1,7 +1,12 @@
package datadog.trace.instrumentation.jsp; package datadog.trace.instrumentation.jsp;
import static io.opentracing.log.Fields.ERROR_OBJECT; import static io.opentracing.log.Fields.ERROR_OBJECT;
import static net.bytebuddy.matcher.ElementMatchers.*; import static net.bytebuddy.matcher.ElementMatchers.hasSuperType;
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 com.google.auto.service.AutoService; import com.google.auto.service.AutoService;
import datadog.trace.agent.tooling.Instrumenter; import datadog.trace.agent.tooling.Instrumenter;

View File

@ -2,7 +2,9 @@ package datadog.trace.instrumentation.jsp;
import static datadog.trace.agent.tooling.ClassLoaderMatcher.classLoaderHasClasses; import static datadog.trace.agent.tooling.ClassLoaderMatcher.classLoaderHasClasses;
import static io.opentracing.log.Fields.ERROR_OBJECT; import static io.opentracing.log.Fields.ERROR_OBJECT;
import static net.bytebuddy.matcher.ElementMatchers.*; import static net.bytebuddy.matcher.ElementMatchers.isPublic;
import static net.bytebuddy.matcher.ElementMatchers.named;
import static net.bytebuddy.matcher.ElementMatchers.takesArguments;
import com.google.auto.service.AutoService; import com.google.auto.service.AutoService;
import datadog.trace.agent.tooling.Instrumenter; import datadog.trace.agent.tooling.Instrumenter;

View File

@ -1,7 +1,9 @@
package datadog.trace.instrumentation.lettuce; package datadog.trace.instrumentation.lettuce;
import static datadog.trace.agent.tooling.ClassLoaderMatcher.classLoaderHasClasses; import static datadog.trace.agent.tooling.ClassLoaderMatcher.classLoaderHasClasses;
import static net.bytebuddy.matcher.ElementMatchers.*; import static net.bytebuddy.matcher.ElementMatchers.isMethod;
import static net.bytebuddy.matcher.ElementMatchers.named;
import static net.bytebuddy.matcher.ElementMatchers.takesArgument;
import com.google.auto.service.AutoService; import com.google.auto.service.AutoService;
import datadog.trace.agent.tooling.Instrumenter; import datadog.trace.agent.tooling.Instrumenter;
@ -38,7 +40,7 @@ public class LettuceAsyncCommandsInstrumentation extends Instrumenter.Default {
@Override @Override
public Map<ElementMatcher, String> transformers() { public Map<ElementMatcher, String> transformers() {
Map<ElementMatcher, String> transformers = new HashMap<>(); final Map<ElementMatcher, String> transformers = new HashMap<>();
transformers.put( transformers.put(
isMethod() isMethod()
.and(named("dispatch")) .and(named("dispatch"))

View File

@ -1,7 +1,13 @@
package datadog.trace.instrumentation.lettuce; package datadog.trace.instrumentation.lettuce;
import static datadog.trace.agent.tooling.ClassLoaderMatcher.classLoaderHasClasses; import static datadog.trace.agent.tooling.ClassLoaderMatcher.classLoaderHasClasses;
import static net.bytebuddy.matcher.ElementMatchers.*; import static net.bytebuddy.matcher.ElementMatchers.isMethod;
import static net.bytebuddy.matcher.ElementMatchers.isPrivate;
import static net.bytebuddy.matcher.ElementMatchers.nameEndsWith;
import static net.bytebuddy.matcher.ElementMatchers.nameStartsWith;
import static net.bytebuddy.matcher.ElementMatchers.named;
import static net.bytebuddy.matcher.ElementMatchers.returns;
import static net.bytebuddy.matcher.ElementMatchers.takesArgument;
import com.google.auto.service.AutoService; import com.google.auto.service.AutoService;
import datadog.trace.agent.tooling.Instrumenter; import datadog.trace.agent.tooling.Instrumenter;
@ -42,7 +48,7 @@ public final class LettuceClientInstrumentation extends Instrumenter.Default {
@Override @Override
public Map<ElementMatcher, String> transformers() { public Map<ElementMatcher, String> transformers() {
Map<ElementMatcher, String> transformers = new HashMap<>(); final Map<ElementMatcher, String> transformers = new HashMap<>();
transformers.put( transformers.put(
isMethod() isMethod()
.and(isPrivate()) .and(isPrivate())

View File

@ -1,7 +1,12 @@
package datadog.trace.instrumentation.lettuce; package datadog.trace.instrumentation.lettuce;
import static datadog.trace.agent.tooling.ClassLoaderMatcher.classLoaderHasClasses; import static datadog.trace.agent.tooling.ClassLoaderMatcher.classLoaderHasClasses;
import static net.bytebuddy.matcher.ElementMatchers.*; import static net.bytebuddy.matcher.ElementMatchers.isMethod;
import static net.bytebuddy.matcher.ElementMatchers.nameEndsWith;
import static net.bytebuddy.matcher.ElementMatchers.nameStartsWith;
import static net.bytebuddy.matcher.ElementMatchers.named;
import static net.bytebuddy.matcher.ElementMatchers.returns;
import static net.bytebuddy.matcher.ElementMatchers.takesArgument;
import com.google.auto.service.AutoService; import com.google.auto.service.AutoService;
import datadog.trace.agent.tooling.Instrumenter; import datadog.trace.agent.tooling.Instrumenter;
@ -43,7 +48,7 @@ public class LettuceReactiveCommandsInstrumentation extends Instrumenter.Default
@Override @Override
public Map<ElementMatcher, String> transformers() { public Map<ElementMatcher, String> transformers() {
Map<ElementMatcher, String> transformers = new HashMap<>(); final Map<ElementMatcher, String> transformers = new HashMap<>();
transformers.put( transformers.put(
isMethod() isMethod()
.and(named("createMono")) .and(named("createMono"))

View File

@ -1,7 +1,9 @@
package datadog.trace.instrumentation.lettuce; package datadog.trace.instrumentation.lettuce;
import io.lettuce.core.protocol.RedisCommand; import io.lettuce.core.protocol.RedisCommand;
import java.util.*; import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;
public class LettuceInstrumentationUtil { public class LettuceInstrumentationUtil {
@ -30,7 +32,7 @@ public class LettuceInstrumentationUtil {
* @param commandName a redis command, without any prefixes * @param commandName a redis command, without any prefixes
* @return true if finish the span early (the command will not have a return value) * @return true if finish the span early (the command will not have a return value)
*/ */
public static boolean doFinishSpanEarly(String commandName) { public static boolean doFinishSpanEarly(final String commandName) {
return nonInstrumentingCommands.contains(commandName); return nonInstrumentingCommands.contains(commandName);
} }
@ -51,7 +53,7 @@ public class LettuceInstrumentationUtil {
* @return the redis command with a prefix if it is a command that will crash the trace agent, * @return the redis command with a prefix if it is a command that will crash the trace agent,
* otherwise, the original command is returned. * otherwise, the original command is returned.
*/ */
public static String getCommandResourceName(String actualCommandName) { public static String getCommandResourceName(final String actualCommandName) {
if (agentCrashingCommands.contains(actualCommandName)) { if (agentCrashingCommands.contains(actualCommandName)) {
return AGENT_CRASHING_COMMAND_PREFIX + actualCommandName; return AGENT_CRASHING_COMMAND_PREFIX + actualCommandName;
} }
@ -64,7 +66,7 @@ public class LettuceInstrumentationUtil {
* @param command the lettuce RedisCommand object * @param command the lettuce RedisCommand object
* @return the redis command as a string * @return the redis command as a string
*/ */
public static String getCommandName(RedisCommand command) { public static String getCommandName(final RedisCommand command) {
String commandName = "Redis Command"; String commandName = "Redis Command";
if (command != null) { if (command != null) {
/* /*

View File

@ -3,11 +3,14 @@ package datadog.trace.instrumentation.play;
import static datadog.trace.agent.tooling.ClassLoaderMatcher.classLoaderHasClassWithMethod; import static datadog.trace.agent.tooling.ClassLoaderMatcher.classLoaderHasClassWithMethod;
import static datadog.trace.agent.tooling.ClassLoaderMatcher.classLoaderHasClasses; import static datadog.trace.agent.tooling.ClassLoaderMatcher.classLoaderHasClasses;
import static io.opentracing.log.Fields.ERROR_OBJECT; import static io.opentracing.log.Fields.ERROR_OBJECT;
import static net.bytebuddy.matcher.ElementMatchers.*; import static net.bytebuddy.matcher.ElementMatchers.hasSuperType;
import static net.bytebuddy.matcher.ElementMatchers.named;
import static net.bytebuddy.matcher.ElementMatchers.returns;
import static net.bytebuddy.matcher.ElementMatchers.takesArgument;
import akka.japi.JavaPartialFunction; import akka.japi.JavaPartialFunction;
import com.google.auto.service.AutoService; import com.google.auto.service.AutoService;
import datadog.trace.agent.tooling.*; import datadog.trace.agent.tooling.Instrumenter;
import datadog.trace.api.DDSpanTypes; import datadog.trace.api.DDSpanTypes;
import datadog.trace.api.DDTags; import datadog.trace.api.DDTags;
import datadog.trace.context.TraceScope; import datadog.trace.context.TraceScope;
@ -18,7 +21,10 @@ import io.opentracing.propagation.Format;
import io.opentracing.propagation.TextMap; import io.opentracing.propagation.TextMap;
import io.opentracing.tag.Tags; import io.opentracing.tag.Tags;
import io.opentracing.util.GlobalTracer; import io.opentracing.util.GlobalTracer;
import java.util.*; import java.util.Collections;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import net.bytebuddy.asm.Advice; import net.bytebuddy.asm.Advice;
import net.bytebuddy.matcher.ElementMatcher; import net.bytebuddy.matcher.ElementMatcher;
@ -66,7 +72,7 @@ public final class PlayInstrumentation extends Instrumenter.Default {
@Override @Override
public Map<ElementMatcher, String> transformers() { public Map<ElementMatcher, String> transformers() {
Map<ElementMatcher, String> transformers = new HashMap<>(); final Map<ElementMatcher, String> transformers = new HashMap<>();
transformers.put( transformers.put(
named("apply") named("apply")
.and(takesArgument(0, named("play.api.mvc.Request"))) .and(takesArgument(0, named("play.api.mvc.Request")))
@ -149,7 +155,7 @@ public final class PlayInstrumentation extends Instrumenter.Default {
public static class PlayHeaders implements TextMap { public static class PlayHeaders implements TextMap {
private final Request request; private final Request request;
public PlayHeaders(Request request) { public PlayHeaders(final Request request) {
this.request = request; this.request = request;
} }
@ -166,7 +172,7 @@ public final class PlayInstrumentation extends Instrumenter.Default {
} }
@Override @Override
public void put(String s, String s1) { public void put(final String s, final String s1) {
throw new IllegalStateException("play headers can only be extracted"); throw new IllegalStateException("play headers can only be extracted");
} }
} }
@ -174,18 +180,18 @@ public final class PlayInstrumentation extends Instrumenter.Default {
public static class RequestError extends JavaPartialFunction<Throwable, Object> { public static class RequestError extends JavaPartialFunction<Throwable, Object> {
private final Span span; private final Span span;
public RequestError(Span span) { public RequestError(final Span span) {
this.span = span; this.span = span;
} }
@Override @Override
public Object apply(Throwable t, boolean isCheck) throws Exception { public Object apply(final Throwable t, final boolean isCheck) throws Exception {
try { try {
if (GlobalTracer.get().scopeManager().active() instanceof TraceScope) { if (GlobalTracer.get().scopeManager().active() instanceof TraceScope) {
((TraceScope) GlobalTracer.get().scopeManager().active()).setAsyncPropagation(false); ((TraceScope) GlobalTracer.get().scopeManager().active()).setAsyncPropagation(false);
} }
onError(span, t); onError(span, t);
} catch (Throwable t2) { } catch (final Throwable t2) {
LoggerFactory.getLogger(RequestCallback.class).debug("error in play instrumentation", t); LoggerFactory.getLogger(RequestCallback.class).debug("error in play instrumentation", t);
} }
span.finish(); span.finish();
@ -203,18 +209,18 @@ public final class PlayInstrumentation extends Instrumenter.Default {
public static class RequestCallback extends scala.runtime.AbstractFunction1<Result, Result> { public static class RequestCallback extends scala.runtime.AbstractFunction1<Result, Result> {
private final Span span; private final Span span;
public RequestCallback(Span span) { public RequestCallback(final Span span) {
this.span = span; this.span = span;
} }
@Override @Override
public Result apply(Result result) { public Result apply(final Result result) {
if (GlobalTracer.get().scopeManager().active() instanceof TraceScope) { if (GlobalTracer.get().scopeManager().active() instanceof TraceScope) {
((TraceScope) GlobalTracer.get().scopeManager().active()).setAsyncPropagation(false); ((TraceScope) GlobalTracer.get().scopeManager().active()).setAsyncPropagation(false);
} }
try { try {
Tags.HTTP_STATUS.set(span, result.header().status()); Tags.HTTP_STATUS.set(span, result.header().status());
} catch (Throwable t) { } catch (final Throwable t) {
log.debug("error in play instrumentation", t); log.debug("error in play instrumentation", t);
} }
span.finish(); span.finish();

View File

@ -1,7 +1,14 @@
package datadog.trace.instrumentation.ratpack; package datadog.trace.instrumentation.ratpack;
import static datadog.trace.agent.tooling.ClassLoaderMatcher.classLoaderHasClassWithMethod; import static datadog.trace.agent.tooling.ClassLoaderMatcher.classLoaderHasClassWithMethod;
import static net.bytebuddy.matcher.ElementMatchers.*; import static net.bytebuddy.matcher.ElementMatchers.hasSuperType;
import static net.bytebuddy.matcher.ElementMatchers.isInterface;
import static net.bytebuddy.matcher.ElementMatchers.isMethod;
import static net.bytebuddy.matcher.ElementMatchers.isStatic;
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.takesArguments;
import com.google.auto.service.AutoService; import com.google.auto.service.AutoService;
import datadog.trace.agent.tooling.Instrumenter; import datadog.trace.agent.tooling.Instrumenter;
@ -63,7 +70,7 @@ public final class RatpackInstrumentation extends Instrumenter.Default {
@Override @Override
public Map<ElementMatcher, String> transformers() { public Map<ElementMatcher, String> transformers() {
Map<ElementMatcher, String> transformers = new HashMap<>(); final Map<ElementMatcher, String> transformers = new HashMap<>();
transformers.put( transformers.put(
isMethod().and(isStatic()).and(named("buildBaseRegistry")), isMethod().and(isStatic()).and(named("buildBaseRegistry")),
RatpackServerAdvice.RatpackServerRegistryAdvice.class.getName()); RatpackServerAdvice.RatpackServerRegistryAdvice.class.getName());
@ -106,7 +113,7 @@ public final class RatpackInstrumentation extends Instrumenter.Default {
@Override @Override
public Map<ElementMatcher, String> transformers() { public Map<ElementMatcher, String> transformers() {
Map<ElementMatcher, String> transformers = new HashMap<>(); final Map<ElementMatcher, String> transformers = new HashMap<>();
transformers.put( transformers.put(
named("register").and(takesArguments(ACTION_TYPE_DESCRIPTION)), named("register").and(takesArguments(ACTION_TYPE_DESCRIPTION)),
RatpackServerAdvice.ExecStarterAdvice.class.getName()); RatpackServerAdvice.ExecStarterAdvice.class.getName());
@ -148,7 +155,7 @@ public final class RatpackInstrumentation extends Instrumenter.Default {
@Override @Override
public Map<ElementMatcher, String> transformers() { public Map<ElementMatcher, String> transformers() {
Map<ElementMatcher, String> transformers = new HashMap<>(); final Map<ElementMatcher, String> transformers = new HashMap<>();
transformers.put( transformers.put(
named("fork").and(returns(named("ratpack.exec.ExecStarter"))), named("fork").and(returns(named("ratpack.exec.ExecStarter"))),
RatpackServerAdvice.ExecutionAdvice.class.getName()); RatpackServerAdvice.ExecutionAdvice.class.getName());

View File

@ -1,7 +1,8 @@
package datadog.trace.instrumentation.ratpack.impl; package datadog.trace.instrumentation.ratpack.impl;
import io.opentracing.propagation.TextMap; import io.opentracing.propagation.TextMap;
import java.util.*; import java.util.Iterator;
import java.util.Map;
import ratpack.http.Request; import ratpack.http.Request;
import ratpack.util.MultiValueMap; import ratpack.util.MultiValueMap;
@ -12,8 +13,8 @@ import ratpack.util.MultiValueMap;
public class RatpackRequestExtractAdapter implements TextMap { public class RatpackRequestExtractAdapter implements TextMap {
private final MultiValueMap<String, String> headers; private final MultiValueMap<String, String> headers;
RatpackRequestExtractAdapter(Request request) { RatpackRequestExtractAdapter(final Request request) {
this.headers = request.getHeaders().asMultiValueMap(); headers = request.getHeaders().asMultiValueMap();
} }
@Override @Override
@ -22,7 +23,7 @@ public class RatpackRequestExtractAdapter implements TextMap {
} }
@Override @Override
public void put(String key, String value) { public void put(final String key, final String value) {
throw new UnsupportedOperationException("This class should be used only with Tracer.inject()!"); throw new UnsupportedOperationException("This class should be used only with Tracer.inject()!");
} }
} }

View File

@ -3,21 +3,21 @@ package datadog.trace.instrumentation.spymemcached;
import io.opentracing.Span; import io.opentracing.Span;
import io.opentracing.Tracer; import io.opentracing.Tracer;
import java.util.concurrent.ExecutionException; import java.util.concurrent.ExecutionException;
import net.spy.memcached.internal.*; import net.spy.memcached.internal.BulkGetFuture;
public class BulkGetCompletionListener extends CompletionListener<BulkGetFuture<?>> public class BulkGetCompletionListener extends CompletionListener<BulkGetFuture<?>>
implements net.spy.memcached.internal.BulkGetCompletionListener { implements net.spy.memcached.internal.BulkGetCompletionListener {
public BulkGetCompletionListener(Tracer tracer, String methodName) { public BulkGetCompletionListener(final Tracer tracer, final String methodName) {
super(tracer, methodName, true); super(tracer, methodName, true);
} }
@Override @Override
public void onComplete(BulkGetFuture<?> future) { public void onComplete(final BulkGetFuture<?> future) {
closeAsyncSpan(future); closeAsyncSpan(future);
} }
@Override @Override
protected void processResult(Span span, BulkGetFuture<?> future) protected void processResult(final Span span, final BulkGetFuture<?> future)
throws ExecutionException, InterruptedException { throws ExecutionException, InterruptedException {
/* /*
Note: for now we do not have an affective way of representing results of bulk operations, Note: for now we do not have an affective way of representing results of bulk operations,

View File

@ -1,7 +1,11 @@
package datadog.trace.instrumentation.spymemcached; package datadog.trace.instrumentation.spymemcached;
import static datadog.trace.agent.tooling.ClassLoaderMatcher.classLoaderHasClassWithMethod; import static datadog.trace.agent.tooling.ClassLoaderMatcher.classLoaderHasClassWithMethod;
import static net.bytebuddy.matcher.ElementMatchers.*; 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.returns;
import com.google.auto.service.AutoService; import com.google.auto.service.AutoService;
import datadog.trace.agent.tooling.Instrumenter; import datadog.trace.agent.tooling.Instrumenter;
@ -55,7 +59,7 @@ public final class MemcachedClientInstrumentation extends Instrumenter.Default {
@Override @Override
public Map<ElementMatcher, String> transformers() { public Map<ElementMatcher, String> transformers() {
Map<ElementMatcher, String> transformers = new HashMap<>(); final Map<ElementMatcher, String> transformers = new HashMap<>();
transformers.put( transformers.put(
isMethod() isMethod()
.and(isPublic()) .and(isPublic())
@ -96,7 +100,7 @@ public final class MemcachedClientInstrumentation extends Instrumenter.Default {
@Advice.Origin final Method method, @Advice.Origin final Method method,
@Advice.Return final OperationFuture future) { @Advice.Return final OperationFuture future) {
if (shouldInjectListener && future != null) { if (shouldInjectListener && future != null) {
OperationCompletionListener listener = final OperationCompletionListener listener =
new OperationCompletionListener(GlobalTracer.get(), method.getName()); new OperationCompletionListener(GlobalTracer.get(), method.getName());
future.addListener(listener); future.addListener(listener);
CallDepthThreadLocalMap.reset(MemcachedClient.class); CallDepthThreadLocalMap.reset(MemcachedClient.class);
@ -117,7 +121,7 @@ public final class MemcachedClientInstrumentation extends Instrumenter.Default {
@Advice.Origin final Method method, @Advice.Origin final Method method,
@Advice.Return final GetFuture future) { @Advice.Return final GetFuture future) {
if (shouldInjectListener && future != null) { if (shouldInjectListener && future != null) {
GetCompletionListener listener = final GetCompletionListener listener =
new GetCompletionListener(GlobalTracer.get(), method.getName()); new GetCompletionListener(GlobalTracer.get(), method.getName());
future.addListener(listener); future.addListener(listener);
CallDepthThreadLocalMap.reset(MemcachedClient.class); CallDepthThreadLocalMap.reset(MemcachedClient.class);
@ -138,7 +142,7 @@ public final class MemcachedClientInstrumentation extends Instrumenter.Default {
@Advice.Origin final Method method, @Advice.Origin final Method method,
@Advice.Return final BulkFuture future) { @Advice.Return final BulkFuture future) {
if (shouldInjectListener && future != null) { if (shouldInjectListener && future != null) {
BulkGetCompletionListener listener = final BulkGetCompletionListener listener =
new BulkGetCompletionListener(GlobalTracer.get(), method.getName()); new BulkGetCompletionListener(GlobalTracer.get(), method.getName());
future.addListener(listener); future.addListener(listener);
CallDepthThreadLocalMap.reset(MemcachedClient.class); CallDepthThreadLocalMap.reset(MemcachedClient.class);

View File

@ -16,7 +16,12 @@
*/ */
package datadog.trace.agent; package datadog.trace.agent;
import java.io.*; import java.io.BufferedReader;
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.lang.instrument.Instrumentation; import java.lang.instrument.Instrumentation;
import java.lang.reflect.Constructor; import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException; import java.lang.reflect.InvocationTargetException;
@ -91,8 +96,8 @@ public class TracingAgent {
* @param toolingJar jar to use for the classpath of the datadog classloader * @param toolingJar jar to use for the classpath of the datadog classloader
* @return Datadog Classloader * @return Datadog Classloader
*/ */
private static ClassLoader createDatadogClassLoader(File bootstrapJar, File toolingJar) private static ClassLoader createDatadogClassLoader(
throws Exception { final File bootstrapJar, final File toolingJar) throws Exception {
final ClassLoader agentParent; final ClassLoader agentParent;
final String javaVersion = System.getProperty("java.version"); final String javaVersion = System.getProperty("java.version");
if (javaVersion.startsWith("1.7") || javaVersion.startsWith("1.8")) { if (javaVersion.startsWith("1.7") || javaVersion.startsWith("1.8")) {
@ -101,9 +106,9 @@ public class TracingAgent {
// platform classloader is parent of system in java 9+ // platform classloader is parent of system in java 9+
agentParent = getPlatformClassLoader(); agentParent = getPlatformClassLoader();
} }
Class<?> loaderClass = final Class<?> loaderClass =
ClassLoader.getSystemClassLoader().loadClass("datadog.trace.bootstrap.DatadogClassLoader"); ClassLoader.getSystemClassLoader().loadClass("datadog.trace.bootstrap.DatadogClassLoader");
Constructor constructor = final Constructor constructor =
loaderClass.getDeclaredConstructor(URL.class, URL.class, ClassLoader.class); loaderClass.getDeclaredConstructor(URL.class, URL.class, ClassLoader.class);
return (ClassLoader) return (ClassLoader)
constructor.newInstance( constructor.newInstance(
@ -111,8 +116,8 @@ public class TracingAgent {
} }
/** Extract sourcePath out of loader to a temporary file named destName. */ /** Extract sourcePath out of loader to a temporary file named destName. */
private static File extractToTmpFile(ClassLoader loader, String sourcePath, String destName) private static File extractToTmpFile(
throws Exception { final ClassLoader loader, final String sourcePath, final String destName) throws Exception {
final String destPrefix; final String destPrefix;
final String destSuffix; final String destSuffix;
{ {
@ -171,7 +176,7 @@ public class TracingAgent {
public static void main(final String... args) { public static void main(final String... args) {
try { try {
System.out.println(getAgentVersion()); System.out.println(getAgentVersion());
} catch (Exception e) { } catch (final Exception e) {
System.out.println("Failed to parse agent version"); System.out.println("Failed to parse agent version");
e.printStackTrace(); e.printStackTrace();
} }

View File

@ -4,7 +4,10 @@ import com.fasterxml.jackson.annotation.JsonIgnore;
import datadog.opentracing.decorators.AbstractDecorator; import datadog.opentracing.decorators.AbstractDecorator;
import datadog.trace.api.DDTags; import datadog.trace.api.DDTags;
import datadog.trace.api.sampling.PrioritySampling; import datadog.trace.api.sampling.PrioritySampling;
import java.util.*; import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.TreeMap;
import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.atomic.AtomicReference; import java.util.concurrent.atomic.AtomicReference;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
@ -115,15 +118,15 @@ public class DDSpanContext implements io.opentracing.SpanContext {
} }
public String getTraceId() { public String getTraceId() {
return this.traceId; return traceId;
} }
public String getParentId() { public String getParentId() {
return this.parentId; return parentId;
} }
public String getSpanId() { public String getSpanId() {
return this.spanId; return spanId;
} }
public String getServiceName() { public String getServiceName() {
@ -135,9 +138,7 @@ public class DDSpanContext implements io.opentracing.SpanContext {
} }
public String getResourceName() { public String getResourceName() {
return this.resourceName == null || this.resourceName.isEmpty() return resourceName == null || resourceName.isEmpty() ? operationName : resourceName;
? this.operationName
: this.resourceName;
} }
public void setResourceName(final String resourceName) { public void setResourceName(final String resourceName) {
@ -170,7 +171,7 @@ public class DDSpanContext implements io.opentracing.SpanContext {
public void setSamplingPriority(final int newPriority) { public void setSamplingPriority(final int newPriority) {
if (trace != null) { if (trace != null) {
DDSpan rootSpan = trace.getRootSpan(); final DDSpan rootSpan = trace.getRootSpan();
if (null != rootSpan && rootSpan.context() != this) { if (null != rootSpan && rootSpan.context() != this) {
rootSpan.context().setSamplingPriority(newPriority); rootSpan.context().setSamplingPriority(newPriority);
return; return;
@ -197,7 +198,7 @@ public class DDSpanContext implements io.opentracing.SpanContext {
/** @return the sampling priority of this span's trace, or null if no priority has been set */ /** @return the sampling priority of this span's trace, or null if no priority has been set */
public int getSamplingPriority() { public int getSamplingPriority() {
if (trace != null) { if (trace != null) {
DDSpan rootSpan = trace.getRootSpan(); final DDSpan rootSpan = trace.getRootSpan();
if (null != rootSpan && rootSpan.context() != this) { if (null != rootSpan && rootSpan.context() != this) {
return rootSpan.context().getSamplingPriority(); return rootSpan.context().getSamplingPriority();
} }
@ -217,7 +218,7 @@ public class DDSpanContext implements io.opentracing.SpanContext {
*/ */
public boolean lockSamplingPriority() { public boolean lockSamplingPriority() {
if (trace != null) { if (trace != null) {
DDSpan rootSpan = trace.getRootSpan(); final DDSpan rootSpan = trace.getRootSpan();
if (null != rootSpan && rootSpan.context() != this) { if (null != rootSpan && rootSpan.context() != this) {
return rootSpan.context().lockSamplingPriority(); return rootSpan.context().lockSamplingPriority();
} }
@ -236,11 +237,11 @@ public class DDSpanContext implements io.opentracing.SpanContext {
} }
public void setBaggageItem(final String key, final String value) { public void setBaggageItem(final String key, final String value) {
this.baggageItems.put(key, value); baggageItems.put(key, value);
} }
public String getBaggageItem(final String key) { public String getBaggageItem(final String key) {
return this.baggageItems.get(key); return baggageItems.get(key);
} }
public Map<String, String> getBaggageItems() { public Map<String, String> getBaggageItems() {
@ -252,17 +253,17 @@ public class DDSpanContext implements io.opentracing.SpanContext {
*/ */
@Override @Override
public Iterable<Map.Entry<String, String>> baggageItems() { public Iterable<Map.Entry<String, String>> baggageItems() {
return this.baggageItems.entrySet(); return baggageItems.entrySet();
} }
@JsonIgnore @JsonIgnore
public PendingTrace getTrace() { public PendingTrace getTrace() {
return this.trace; return trace;
} }
@JsonIgnore @JsonIgnore
public DDTracer getTracer() { public DDTracer getTracer() {
return this.tracer; return tracer;
} }
public Map<String, Number> getMetrics() { public Map<String, Number> getMetrics() {
@ -270,7 +271,7 @@ public class DDSpanContext implements io.opentracing.SpanContext {
return metrics == null ? EMPTY_METRICS : metrics; return metrics == null ? EMPTY_METRICS : metrics;
} }
public void setMetric(String key, Number value) { public void setMetric(final String key, final Number value) {
if (metrics.get() == null) { if (metrics.get() == null) {
metrics.compareAndSet(null, new ConcurrentHashMap<String, Number>()); metrics.compareAndSet(null, new ConcurrentHashMap<String, Number>());
} }
@ -306,7 +307,7 @@ public class DDSpanContext implements io.opentracing.SpanContext {
} }
if (addTag) { if (addTag) {
this.tags.put(tag, value); tags.put(tag, value);
} }
} }