diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 0000000000..19c7d9f302 --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,30 @@ +### Contributing + +Pull requests for bug fixes are welcome, but before submitting new features or changes to current functionality [open an issue](https://github.com/DataDog/dd-trace-java/issues/new) +and discuss your ideas or propose the changes you wish to make. After a resolution is reached a PR can be submitted for review. + +### Code Style + +This project includes a `.editorconfig` file for basic editor settings. This file is supported by most common text editors. + +Java files must be formatted using [google-java-format](https://github.com/google/google-java-format). Please run the following task to ensure files are formatted before committing: + +```shell +./gradlew :googleJavaFormat +``` + +Other source files (Groovy, Scala, etc) should ideally be formatted by Intellij Idea's default formatting, but are not enforced. + +### Intellij Idea + +Suggested plugins and settings: + +* Editor > Code Style > Java/Groovy > Imports + * Class count to use import with '*': `10` (some number sufficiently large that is unlikely to matter) + * Names count to use static import with '*': `10` + * With java use the following import layout (groovy should still use the default) to ensure consistency with google-java-format: + ![import layout](https://user-images.githubusercontent.com/734411/43430811-28442636-94ae-11e8-86f1-f270ddcba023.png) +* [Google Java Format](https://plugins.jetbrains.com/plugin/8527-google-java-format) +* [Lombok](https://plugins.jetbrains.com/plugin/6317-lombok-plugin) +* [Save Actions](https://plugins.jetbrains.com/plugin/7642-save-actions) + ![Recommended Settings](https://user-images.githubusercontent.com/734411/43430944-db84bf8a-94ae-11e8-8cec-0daa064937c4.png) diff --git a/buildSrc/src/main/groovy/MuzzlePlugin.groovy b/buildSrc/src/main/groovy/MuzzlePlugin.groovy index 3c85179a39..5c203c0e6c 100644 --- a/buildSrc/src/main/groovy/MuzzlePlugin.groovy +++ b/buildSrc/src/main/groovy/MuzzlePlugin.groovy @@ -21,11 +21,11 @@ class MuzzlePlugin implements Plugin { List userUrls = new ArrayList<>() project.getLogger().info("Creating user classpath for: " + project.getName()) for (File f : project.configurations.compileOnly.getFiles()) { - project.getLogger().info( '--' + f) + project.getLogger().info('--' + f) userUrls.add(f.toURI().toURL()) } for (File f : bootstrapProject.sourceSets.main.runtimeClasspath.getFiles()) { - project.getLogger().info( '--' + f) + project.getLogger().info('--' + f) userUrls.add(f.toURI().toURL()) } final ClassLoader userCL = new URLClassLoader(userUrls.toArray(new URL[0]), (ClassLoader) null) @@ -33,11 +33,11 @@ class MuzzlePlugin implements Plugin { project.getLogger().info("Creating dd classpath for: " + project.getName()) Set ddUrls = new HashSet<>() for (File f : toolingProject.sourceSets.main.runtimeClasspath.getFiles()) { - project.getLogger().info( '--' + f) + project.getLogger().info('--' + f) ddUrls.add(f.toURI().toURL()) } - for(File f : project.sourceSets.main.runtimeClasspath.getFiles()) { - project.getLogger().info( '--' + f) + for (File f : project.sourceSets.main.runtimeClasspath.getFiles()) { + project.getLogger().info('--' + f) ddUrls.add(f.toURI().toURL()) } diff --git a/dd-java-agent-ittests/src/test/groovy/datadog/trace/agent/integration/classloading/ClassLoadingTest.groovy b/dd-java-agent-ittests/src/test/groovy/datadog/trace/agent/integration/classloading/ClassLoadingTest.groovy index 9a234f3b7c..721471c4e6 100644 --- a/dd-java-agent-ittests/src/test/groovy/datadog/trace/agent/integration/classloading/ClassLoadingTest.groovy +++ b/dd-java-agent-ittests/src/test/groovy/datadog/trace/agent/integration/classloading/ClassLoadingTest.groovy @@ -9,10 +9,10 @@ import static datadog.trace.agent.test.IntegrationTestUtils.createJarWithClasses class ClassLoadingTest extends Specification { /** Assert that we can instrument classloaders which cannot resolve agent advice classes. */ - def "instrument classloader without agent classes" () { + def "instrument classloader without agent classes"() { setup: final URL[] classpath = [createJarWithClasses(ClassToInstrument, Trace)] - final URLClassLoader loader = new URLClassLoader(classpath, (ClassLoader)null) + final URLClassLoader loader = new URLClassLoader(classpath, (ClassLoader) null) when: loader.loadClass("datadog.agent.TracingAgent") diff --git a/dd-java-agent-ittests/src/test/groovy/datadog/trace/agent/integration/classloading/ShadowPackageRenamingTest.groovy b/dd-java-agent-ittests/src/test/groovy/datadog/trace/agent/integration/classloading/ShadowPackageRenamingTest.groovy index 0362d10a13..67095543cd 100644 --- a/dd-java-agent-ittests/src/test/groovy/datadog/trace/agent/integration/classloading/ShadowPackageRenamingTest.groovy +++ b/dd-java-agent-ittests/src/test/groovy/datadog/trace/agent/integration/classloading/ShadowPackageRenamingTest.groovy @@ -54,51 +54,51 @@ class ShadowPackageRenamingTest extends Specification { } def "agent jar contains no bootstrap classes"() { - setup: - final ClassPath agentClasspath = ClassPath.from(IntegrationTestUtils.getAgentClassLoader()) + setup: + final ClassPath agentClasspath = ClassPath.from(IntegrationTestUtils.getAgentClassLoader()) - final ClassPath bootstrapClasspath = ClassPath.from(IntegrationTestUtils.getBootstrapProxy()) - final Set bootstrapClasses = new HashSet<>() - final String[] bootstrapPrefixes = IntegrationTestUtils.getBootstrapPackagePrefixes() - final String[] agentPrefixes = IntegrationTestUtils.getAgentPackagePrefixes() - final List badBootstrapPrefixes = [] - final List badAgentPrefixes = [] - for (ClassPath.ClassInfo info : bootstrapClasspath.getAllClasses()) { - bootstrapClasses.add(info.getName()) - // make sure all bootstrap classes can be loaded from system - ClassLoader.getSystemClassLoader().loadClass(info.getName()) - boolean goodPrefix = false - for (int i = 0; i < bootstrapPrefixes.length; ++i) { - if (info.getName().startsWith(bootstrapPrefixes[i])) { - goodPrefix = true - break - } - } - if (!goodPrefix) { - badBootstrapPrefixes.add(info.getName()) - } - } + final ClassPath bootstrapClasspath = ClassPath.from(IntegrationTestUtils.getBootstrapProxy()) + final Set bootstrapClasses = new HashSet<>() + final String[] bootstrapPrefixes = IntegrationTestUtils.getBootstrapPackagePrefixes() + final String[] agentPrefixes = IntegrationTestUtils.getAgentPackagePrefixes() + final List badBootstrapPrefixes = [] + final List badAgentPrefixes = [] + for (ClassPath.ClassInfo info : bootstrapClasspath.getAllClasses()) { + bootstrapClasses.add(info.getName()) + // make sure all bootstrap classes can be loaded from system + ClassLoader.getSystemClassLoader().loadClass(info.getName()) + boolean goodPrefix = false + for (int i = 0; i < bootstrapPrefixes.length; ++i) { + if (info.getName().startsWith(bootstrapPrefixes[i])) { + goodPrefix = true + break + } + } + if (!goodPrefix) { + badBootstrapPrefixes.add(info.getName()) + } + } - final List duplicateClassFile = new ArrayList<>() - for (ClassPath.ClassInfo classInfo : agentClasspath.getAllClasses()) { - if (bootstrapClasses.contains(classInfo.getName())) { - duplicateClassFile.add(classInfo) - } - boolean goodPrefix = false - for (int i = 0; i < agentPrefixes.length; ++i) { - if (classInfo.getName().startsWith(agentPrefixes[i])) { - goodPrefix = true - break - } - } - if (!goodPrefix) { - badAgentPrefixes.add(classInfo.getName()) - } - } + final List duplicateClassFile = new ArrayList<>() + for (ClassPath.ClassInfo classInfo : agentClasspath.getAllClasses()) { + if (bootstrapClasses.contains(classInfo.getName())) { + duplicateClassFile.add(classInfo) + } + boolean goodPrefix = false + for (int i = 0; i < agentPrefixes.length; ++i) { + if (classInfo.getName().startsWith(agentPrefixes[i])) { + goodPrefix = true + break + } + } + if (!goodPrefix) { + badAgentPrefixes.add(classInfo.getName()) + } + } - expect: - duplicateClassFile == [] - badBootstrapPrefixes == [] - badAgentPrefixes == [] + expect: + duplicateClassFile == [] + badBootstrapPrefixes == [] + badAgentPrefixes == [] } } diff --git a/dd-java-agent-ittests/src/test/groovy/datadog/trace/agent/integration/muzzle/MuzzleBytecodeTransformTest.groovy b/dd-java-agent-ittests/src/test/groovy/datadog/trace/agent/integration/muzzle/MuzzleBytecodeTransformTest.groovy index 0269047eb5..ea487184eb 100644 --- a/dd-java-agent-ittests/src/test/groovy/datadog/trace/agent/integration/muzzle/MuzzleBytecodeTransformTest.groovy +++ b/dd-java-agent-ittests/src/test/groovy/datadog/trace/agent/integration/muzzle/MuzzleBytecodeTransformTest.groovy @@ -1,10 +1,10 @@ package datadog.trace.agent.integration.muzzle import datadog.trace.agent.test.IntegrationTestUtils -import java.lang.reflect.Field -import java.lang.reflect.Method import spock.lang.Specification +import java.lang.reflect.Field +import java.lang.reflect.Method class MuzzleBytecodeTransformTest extends Specification { @@ -33,7 +33,7 @@ class MuzzleBytecodeTransformTest extends Specification { if (f.get(instrumenter) == null) { unInitFields.add(instrumenter.getClass()) } - } catch(NoSuchFieldException | NoSuchMethodException e) { + } catch (NoSuchFieldException | NoSuchMethodException e) { unMuzzledClasses.add(instrumenter.getClass()) } finally { if (null != f) { diff --git a/dd-java-agent/agent-bootstrap/agent-bootstrap.gradle b/dd-java-agent/agent-bootstrap/agent-bootstrap.gradle index 27d932ee61..facd73c5fa 100644 --- a/dd-java-agent/agent-bootstrap/agent-bootstrap.gradle +++ b/dd-java-agent/agent-bootstrap/agent-bootstrap.gradle @@ -5,7 +5,7 @@ plugins { apply from: "${rootDir}/gradle/java.gradle" -excludedClassesConverage += [ 'datadog.trace.bootstrap.*' ] +excludedClassesConverage += ['datadog.trace.bootstrap.*'] dependencies { compile project(':dd-trace-api') diff --git a/dd-java-agent/agent-tooling/agent-tooling.gradle b/dd-java-agent/agent-tooling/agent-tooling.gradle index d84a956fdf..b44748192e 100644 --- a/dd-java-agent/agent-tooling/agent-tooling.gradle +++ b/dd-java-agent/agent-tooling/agent-tooling.gradle @@ -1,6 +1,6 @@ apply from: "${rootDir}/gradle/java.gradle" -excludedClassesConverage += [ 'datadog.trace.agent.tooling.*' ] +excludedClassesConverage += ['datadog.trace.agent.tooling.*'] configurations { // classpath used by the instrumentation muzzle plugin diff --git a/dd-java-agent/agent-tooling/src/main/java/datadog/trace/agent/tooling/ClassLoaderMatcher.java b/dd-java-agent/agent-tooling/src/main/java/datadog/trace/agent/tooling/ClassLoaderMatcher.java index 88afbe8380..1dc632faa3 100644 --- a/dd-java-agent/agent-tooling/src/main/java/datadog/trace/agent/tooling/ClassLoaderMatcher.java +++ b/dd-java-agent/agent-tooling/src/main/java/datadog/trace/agent/tooling/ClassLoaderMatcher.java @@ -3,7 +3,11 @@ package datadog.trace.agent.tooling; import datadog.trace.bootstrap.DatadogClassLoader; import datadog.trace.bootstrap.PatchLogger; 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 net.bytebuddy.matcher.ElementMatcher; @@ -44,7 +48,7 @@ public class ClassLoaderMatcher { private static final Set CLASSLOADER_CLASSES_TO_SKIP; static { - final Set classesToSkip = new HashSet(); + final Set classesToSkip = new HashSet<>(); classesToSkip.add("org.codehaus.groovy.runtime.callsite.CallSiteClassLoader"); classesToSkip.add("sun.reflect.DelegatingClassLoader"); classesToSkip.add("jdk.internal.reflect.DelegatingClassLoader"); @@ -55,7 +59,7 @@ public class ClassLoaderMatcher { private SkipClassLoaderMatcher() {} @Override - public boolean matches(ClassLoader target) { + public boolean matches(final ClassLoader target) { if (target == BOOTSTRAP_CLASSLOADER) { // Don't skip bootstrap loader return false; @@ -63,7 +67,7 @@ public class ClassLoaderMatcher { 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()); } @@ -77,7 +81,7 @@ public class ClassLoaderMatcher { if (null != cached) { return cached.booleanValue(); } - boolean skip = !delegatesToBootstrap(loader); + final boolean skip = !delegatesToBootstrap(loader); if (skip) { log.debug( "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; if (!loadsExpectedClass(loader, GlobalTracer.class)) { log.debug("loader {} failed to delegate bootstrap opentracing class", loader); @@ -100,10 +104,10 @@ public class ClassLoaderMatcher { return delegates; } - private boolean loadsExpectedClass(ClassLoader loader, Class expectedClass) { + private boolean loadsExpectedClass(final ClassLoader loader, final Class expectedClass) { try { return loader.loadClass(expectedClass.getName()) == expectedClass; - } catch (ClassNotFoundException e) { + } catch (final ClassNotFoundException e) { return false; } } diff --git a/dd-java-agent/agent-tooling/src/main/java/datadog/trace/agent/tooling/muzzle/MuzzleVisitor.java b/dd-java-agent/agent-tooling/src/main/java/datadog/trace/agent/tooling/muzzle/MuzzleVisitor.java index 9fb91d0d51..a91d3e714b 100644 --- a/dd-java-agent/agent-tooling/src/main/java/datadog/trace/agent/tooling/muzzle/MuzzleVisitor.java +++ b/dd-java-agent/agent-tooling/src/main/java/datadog/trace/agent/tooling/muzzle/MuzzleVisitor.java @@ -12,7 +12,12 @@ import net.bytebuddy.description.field.FieldList; import net.bytebuddy.description.method.MethodList; import net.bytebuddy.description.type.TypeDescription; 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; /** Visit a class and add: a private instrumenationMuzzle field and getter */ diff --git a/dd-java-agent/agent-tooling/src/main/java/datadog/trace/agent/tooling/muzzle/Reference.java b/dd-java-agent/agent-tooling/src/main/java/datadog/trace/agent/tooling/muzzle/Reference.java index 6d8ce0cdb3..042b16ef34 100644 --- a/dd-java-agent/agent-tooling/src/main/java/datadog/trace/agent/tooling/muzzle/Reference.java +++ b/dd-java-agent/agent-tooling/src/main/java/datadog/trace/agent/tooling/muzzle/Reference.java @@ -3,7 +3,10 @@ package datadog.trace.agent.tooling.muzzle; import static datadog.trace.agent.tooling.ClassLoaderMatcher.BOOTSTRAP_CLASSLOADER; 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. */ public class Reference { diff --git a/dd-java-agent/agent-tooling/src/main/java/datadog/trace/agent/tooling/muzzle/ReferenceCreator.java b/dd-java-agent/agent-tooling/src/main/java/datadog/trace/agent/tooling/muzzle/ReferenceCreator.java index 12ce1fe4f7..5780cc9c8f 100644 --- a/dd-java-agent/agent-tooling/src/main/java/datadog/trace/agent/tooling/muzzle/ReferenceCreator.java +++ b/dd-java-agent/agent-tooling/src/main/java/datadog/trace/agent/tooling/muzzle/ReferenceCreator.java @@ -3,8 +3,17 @@ package datadog.trace.agent.tooling.muzzle; import datadog.trace.agent.tooling.Utils; import java.io.IOException; import java.io.InputStream; -import java.util.*; -import net.bytebuddy.jar.asm.*; +import java.util.ArrayDeque; +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. */ public class ReferenceCreator extends ClassVisitor { diff --git a/dd-java-agent/agent-tooling/src/main/java/datadog/trace/agent/tooling/muzzle/ReferenceMatcher.java b/dd-java-agent/agent-tooling/src/main/java/datadog/trace/agent/tooling/muzzle/ReferenceMatcher.java index cfcbdf4895..807af39d6f 100644 --- a/dd-java-agent/agent-tooling/src/main/java/datadog/trace/agent/tooling/muzzle/ReferenceMatcher.java +++ b/dd-java-agent/agent-tooling/src/main/java/datadog/trace/agent/tooling/muzzle/ReferenceMatcher.java @@ -3,7 +3,14 @@ package datadog.trace.agent.tooling.muzzle; import static net.bytebuddy.dynamic.loading.ClassLoadingStrategy.BOOTSTRAP_LOADER; 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; /** Matches a set of references against a classloader. */ diff --git a/dd-java-agent/agent-tooling/src/test/groovy/datadog/trace/agent/test/ClassLoaderMatcherTest.groovy b/dd-java-agent/agent-tooling/src/test/groovy/datadog/trace/agent/test/ClassLoaderMatcherTest.groovy index 964e843f82..b0563e86ce 100644 --- a/dd-java-agent/agent-tooling/src/test/groovy/datadog/trace/agent/test/ClassLoaderMatcherTest.groovy +++ b/dd-java-agent/agent-tooling/src/test/groovy/datadog/trace/agent/test/ClassLoaderMatcherTest.groovy @@ -1,10 +1,9 @@ package datadog.trace.agent.test -import datadog.trace.bootstrap.DatadogClassLoader import datadog.trace.agent.tooling.ClassLoaderMatcher +import datadog.trace.bootstrap.DatadogClassLoader import spock.lang.Specification - class ClassLoaderMatcherTest extends Specification { def "skip non-delegating classloader"() { @@ -24,7 +23,7 @@ class ClassLoaderMatcherTest extends Specification { def "does not skip empty classloader"() { setup: - final ClassLoader emptyLoader = new ClassLoader(){} + final ClassLoader emptyLoader = new ClassLoader() {} expect: !ClassLoaderMatcher.skipClassLoader().matches(emptyLoader) } @@ -37,9 +36,10 @@ class ClassLoaderMatcherTest extends Specification { /* * A URLClassloader which only delegates java.* classes */ + private static class NonDelegatingClassLoader extends URLClassLoader { NonDelegatingClassLoader() { - super(new URL[0], (ClassLoader)null) + super(new URL[0], (ClassLoader) null) } @Override diff --git a/dd-java-agent/agent-tooling/src/test/groovy/datadog/trace/agent/test/ExceptionHandlerTest.groovy b/dd-java-agent/agent-tooling/src/test/groovy/datadog/trace/agent/test/ExceptionHandlerTest.groovy index 12e2366865..3eaa949fbe 100644 --- a/dd-java-agent/agent-tooling/src/test/groovy/datadog/trace/agent/test/ExceptionHandlerTest.groovy +++ b/dd-java-agent/agent-tooling/src/test/groovy/datadog/trace/agent/test/ExceptionHandlerTest.groovy @@ -1,22 +1,20 @@ package datadog.trace.agent.test -import datadog.trace.bootstrap.ExceptionLogger +import ch.qos.logback.classic.Level +import ch.qos.logback.classic.Logger +import ch.qos.logback.core.read.ListAppender import datadog.trace.agent.tooling.ExceptionHandlers +import datadog.trace.bootstrap.ExceptionLogger import net.bytebuddy.agent.ByteBuddyAgent +import net.bytebuddy.agent.builder.AgentBuilder import net.bytebuddy.dynamic.ClassFileLocator +import org.slf4j.LoggerFactory +import spock.lang.Shared +import spock.lang.Specification import static net.bytebuddy.matcher.ElementMatchers.isMethod import static net.bytebuddy.matcher.ElementMatchers.named -import net.bytebuddy.agent.builder.AgentBuilder -import spock.lang.Specification -import spock.lang.Shared - -import org.slf4j.LoggerFactory -import ch.qos.logback.classic.Logger -import ch.qos.logback.core.read.ListAppender -import ch.qos.logback.classic.Level - class ExceptionHandlerTest extends Specification { @Shared ListAppender testAppender = new ListAppender() @@ -25,7 +23,7 @@ class ExceptionHandlerTest extends Specification { AgentBuilder builder = new AgentBuilder.Default() .disableClassFormatChanges() .with(AgentBuilder.RedefinitionStrategy.RETRANSFORMATION) - .type(named(getClass().getName()+'$SomeClass')) + .type(named(getClass().getName() + '$SomeClass')) .transform( new AgentBuilder.Transformer.ForAdvice() .with(new AgentBuilder.LocationStrategy.Simple(ClassFileLocator.ForClassLoader.of(BadAdvice.getClassLoader()))) @@ -68,11 +66,11 @@ class ExceptionHandlerTest extends Specification { testAppender.list.get(testAppender.list.size() - 1).getMessage() == "Failed to handle exception in instrumentation" } - def "exception on non-delegating classloader" () { + def "exception on non-delegating classloader"() { setup: int initLogEvents = testAppender.list.size() - URL[] classpath = [ SomeClass.getProtectionDomain().getCodeSource().getLocation(), - GroovyObject.getProtectionDomain().getCodeSource().getLocation() ] + URL[] classpath = [SomeClass.getProtectionDomain().getCodeSource().getLocation(), + GroovyObject.getProtectionDomain().getCodeSource().getLocation()] URLClassLoader loader = new URLClassLoader(classpath, (ClassLoader) null) when: loader.loadClass(LoggerFactory.getName()) diff --git a/dd-java-agent/agent-tooling/src/test/groovy/datadog/trace/agent/test/HelperInjectionTest.groovy b/dd-java-agent/agent-tooling/src/test/groovy/datadog/trace/agent/test/HelperInjectionTest.groovy index 7b333e70d4..f59a7d4ec4 100644 --- a/dd-java-agent/agent-tooling/src/test/groovy/datadog/trace/agent/test/HelperInjectionTest.groovy +++ b/dd-java-agent/agent-tooling/src/test/groovy/datadog/trace/agent/test/HelperInjectionTest.groovy @@ -1,9 +1,6 @@ package datadog.trace.agent.test import datadog.trace.agent.tooling.AgentInstaller - -import static datadog.trace.agent.tooling.ClassLoaderMatcher.BOOTSTRAP_CLASSLOADER - import datadog.trace.agent.tooling.HelperInjector import datadog.trace.agent.tooling.Utils import net.bytebuddy.agent.ByteBuddyAgent @@ -11,6 +8,8 @@ import spock.lang.Specification import java.lang.reflect.Method +import static datadog.trace.agent.tooling.ClassLoaderMatcher.BOOTSTRAP_CLASSLOADER + class HelperInjectionTest extends Specification { def "helpers injected to non-delegating classloader"() { diff --git a/dd-java-agent/benchmark-integration/jetty-perftest/jetty-perftest.gradle b/dd-java-agent/benchmark-integration/jetty-perftest/jetty-perftest.gradle index c6821fb988..59f5e8fff9 100644 --- a/dd-java-agent/benchmark-integration/jetty-perftest/jetty-perftest.gradle +++ b/dd-java-agent/benchmark-integration/jetty-perftest/jetty-perftest.gradle @@ -2,7 +2,7 @@ dependencies { compile project(':dd-trace-api') compile project(':dd-java-agent:benchmark-integration') compile deps.opentracing - + compile group: 'org.eclipse.jetty', name: 'jetty-server', version: '9.4.1.v20170120' compile group: 'org.eclipse.jetty', name: 'jetty-servlet', version: '9.4.1.v20170120' } diff --git a/dd-java-agent/dd-java-agent.gradle b/dd-java-agent/dd-java-agent.gradle index 61c585e04b..af1409c922 100644 --- a/dd-java-agent/dd-java-agent.gradle +++ b/dd-java-agent/dd-java-agent.gradle @@ -14,6 +14,7 @@ jacocoTestReport.dependsOn ':dd-java-agent-ittests:test' * Note jarname must end in .zip, or its classes will be on the classpath of * the dd-java-agent jar. */ + def includeShadowJar(subproject, jarname) { def agent_project = project subproject.afterEvaluate { diff --git a/dd-java-agent/instrumentation/akka-http-10.0/src/lagomTest/groovy/LagomTest.groovy b/dd-java-agent/instrumentation/akka-http-10.0/src/lagomTest/groovy/LagomTest.groovy index cb59cb8c1e..59574d086c 100644 --- a/dd-java-agent/instrumentation/akka-http-10.0/src/lagomTest/groovy/LagomTest.groovy +++ b/dd-java-agent/instrumentation/akka-http-10.0/src/lagomTest/groovy/LagomTest.groovy @@ -1,20 +1,20 @@ import akka.NotUsed import akka.stream.javadsl.Source +import akka.stream.testkit.TestSubscriber.Probe import akka.stream.testkit.javadsl.TestSink +import datadog.trace.agent.test.AgentTestRunner import datadog.trace.api.DDSpanTypes import datadog.trace.api.DDTags import io.opentracing.tag.Tags import net.bytebuddy.utility.JavaModule - -import datadog.trace.agent.test.AgentTestRunner import play.inject.guice.GuiceApplicationBuilder import spock.lang.Shared -import akka.stream.testkit.TestSubscriber.Probe - import java.util.function.Function -import static com.lightbend.lagom.javadsl.testkit.ServiceTest.* +import static com.lightbend.lagom.javadsl.testkit.ServiceTest.TestServer +import static com.lightbend.lagom.javadsl.testkit.ServiceTest.defaultSetup +import static com.lightbend.lagom.javadsl.testkit.ServiceTest.startServer import static datadog.trace.agent.test.ListWriterAssert.assertTraces class LagomTest extends AgentTestRunner { @@ -41,30 +41,31 @@ class LagomTest extends AgentTestRunner { def setupSpec() { server = startServer(defaultSetup() - .withCluster(false) - .withPersistence(false) - .withCassandra(false) - .withJdbc(false) - .withConfigureBuilder( - new Function() { - @Override - GuiceApplicationBuilder apply(GuiceApplicationBuilder builder) { - return builder - .bindings(new ServiceTestModule()) - }})) + .withCluster(false) + .withPersistence(false) + .withCassandra(false) + .withJdbc(false) + .withConfigureBuilder( + new Function() { + @Override + GuiceApplicationBuilder apply(GuiceApplicationBuilder builder) { + return builder + .bindings(new ServiceTestModule()) + } + })) } def cleanupSpec() { server.stop() } - def "normal request traces" () { + def "normal request traces"() { setup: EchoService service = server.client(EchoService) Source input = Source.from(Arrays.asList("msg1", "msg2", "msg3")) - .concat(Source.maybe()) + .concat(Source.maybe()) Source output = service.echo().invoke(input) .toCompletableFuture().get() Probe probe = output.runWith(TestSink.probe(server.system()), server.materializer()) @@ -80,7 +81,7 @@ class LagomTest extends AgentTestRunner { span(0) { serviceName "unnamed-java-app" operationName "akka-http.request" - resourceName "GET ws://?/echo" + resourceName "GET ws://?/echo" errored false tags { defaultTags() @@ -100,7 +101,7 @@ class LagomTest extends AgentTestRunner { } } - def "error traces" () { + def "error traces"() { setup: EchoService service = server.client(EchoService) diff --git a/dd-java-agent/instrumentation/akka-http-10.0/src/lagomTest/java/EchoService.java b/dd-java-agent/instrumentation/akka-http-10.0/src/lagomTest/java/EchoService.java index 74db83c669..a5884c2064 100644 --- a/dd-java-agent/instrumentation/akka-http-10.0/src/lagomTest/java/EchoService.java +++ b/dd-java-agent/instrumentation/akka-http-10.0/src/lagomTest/java/EchoService.java @@ -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.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 { diff --git a/dd-java-agent/instrumentation/akka-http-10.0/src/main/scala/datadog/trace/instrumentation/akkahttp/AkkaHttpClientInstrumentation.java b/dd-java-agent/instrumentation/akka-http-10.0/src/main/scala/datadog/trace/instrumentation/akkahttp/AkkaHttpClientInstrumentation.java index 10ac93b274..7a9e03b0ce 100644 --- a/dd-java-agent/instrumentation/akka-http-10.0/src/main/scala/datadog/trace/instrumentation/akkahttp/AkkaHttpClientInstrumentation.java +++ b/dd-java-agent/instrumentation/akka-http-10.0/src/main/scala/datadog/trace/instrumentation/akkahttp/AkkaHttpClientInstrumentation.java @@ -1,7 +1,9 @@ package datadog.trace.instrumentation.akkahttp; 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.http.javadsl.model.headers.RawHeader; @@ -10,7 +12,7 @@ import akka.http.scaladsl.model.HttpRequest; import akka.http.scaladsl.model.HttpResponse; import akka.stream.scaladsl.Flow; 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.DDTags; 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_URL.getKey(), request.getUri().toString()); } - Scope scope = builder.startActive(false); + final Scope scope = builder.startActive(false); 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); // Request is immutable, so we have to assign new value once we update headers request = headers.getRequest(); @@ -111,7 +113,7 @@ public final class AkkaHttpClientInstrumentation extends Instrumenter.Default { @Advice.Return final Future responseFuture, @Advice.Enter final Scope scope, @Advice.Thrown final Throwable throwable) { - Span span = scope.span(); + final Span span = scope.span(); if (throwable == null) { responseFuture.onComplete(new OnCompleteHandler(span), thiz.system().dispatcher()); } else { @@ -135,12 +137,12 @@ public final class AkkaHttpClientInstrumentation extends Instrumenter.Default { public static class OnCompleteHandler extends AbstractFunction1, Void> { private final Span span; - public OnCompleteHandler(Span span) { + public OnCompleteHandler(final Span span) { this.span = span; } @Override - public Void apply(Try result) { + public Void apply(final Try result) { if (result.isSuccess()) { Tags.HTTP_STATUS.set(span, result.get().status().intValue()); } else { @@ -155,7 +157,7 @@ public final class AkkaHttpClientInstrumentation extends Instrumenter.Default { public static class AkkaHttpHeaders implements TextMap { private HttpRequest request; - public AkkaHttpHeaders(HttpRequest request) { + public AkkaHttpHeaders(final HttpRequest request) { this.request = request; } diff --git a/dd-java-agent/instrumentation/akka-http-10.0/src/main/scala/datadog/trace/instrumentation/akkahttp/AkkaHttpClientTransformFlow.scala b/dd-java-agent/instrumentation/akka-http-10.0/src/main/scala/datadog/trace/instrumentation/akkahttp/AkkaHttpClientTransformFlow.scala index 447624cec1..c22e67c03f 100644 --- a/dd-java-agent/instrumentation/akka-http-10.0/src/main/scala/datadog/trace/instrumentation/akkahttp/AkkaHttpClientTransformFlow.scala +++ b/dd-java-agent/instrumentation/akka-http-10.0/src/main/scala/datadog/trace/instrumentation/akkahttp/AkkaHttpClientTransformFlow.scala @@ -4,11 +4,10 @@ import java.util.Collections import akka.NotUsed import akka.http.scaladsl.model.{HttpRequest, HttpResponse} -import akka.stream.Supervision import akka.stream.scaladsl.Flow import datadog.trace.api.{DDSpanTypes, DDTags} +import io.opentracing.Span import io.opentracing.log.Fields.ERROR_OBJECT -import io.opentracing.{Scope, Span} import io.opentracing.propagation.Format import io.opentracing.tag.Tags import io.opentracing.util.GlobalTracer diff --git a/dd-java-agent/instrumentation/akka-http-10.0/src/main/scala/datadog/trace/instrumentation/akkahttp/AkkaHttpServerInstrumentation.java b/dd-java-agent/instrumentation/akka-http-10.0/src/main/scala/datadog/trace/instrumentation/akkahttp/AkkaHttpServerInstrumentation.java index c9570b6d96..55294c3e41 100644 --- a/dd-java-agent/instrumentation/akka-http-10.0/src/main/scala/datadog/trace/instrumentation/akkahttp/AkkaHttpServerInstrumentation.java +++ b/dd-java-agent/instrumentation/akka-http-10.0/src/main/scala/datadog/trace/instrumentation/akkahttp/AkkaHttpServerInstrumentation.java @@ -1,14 +1,15 @@ package datadog.trace.instrumentation.akkahttp; 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.scaladsl.model.HttpRequest; import akka.http.scaladsl.model.HttpResponse; -import akka.stream.*; +import akka.stream.Materializer; 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.DDTags; import datadog.trace.context.TraceScope; @@ -19,7 +20,10 @@ import io.opentracing.propagation.Format; import io.opentracing.propagation.TextMap; import io.opentracing.tag.Tags; 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 net.bytebuddy.asm.Advice; import net.bytebuddy.description.type.TypeDescription; @@ -90,13 +94,13 @@ public final class AkkaHttpServerInstrumentation extends Instrumenter.Default { public static void wrapHandler( @Advice.Argument(value = 0, readOnly = false) Function1> handler, - @Advice.Argument(value = 7) Materializer materializer) { + @Advice.Argument(value = 7) final Materializer materializer) { handler = new DatadogAsyncWrapper(handler, materializer.executionContext()); } } public static class DatadogWrapperHelper { - public static Scope createSpan(HttpRequest request) { + public static Scope createSpan(final HttpRequest request) { final SpanContext extractedContext = GlobalTracer.get() .extract(Format.Builtin.HTTP_HEADERS, new AkkaHttpServerHeaders(request)); @@ -117,7 +121,7 @@ public final class AkkaHttpServerInstrumentation extends Instrumenter.Default { 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()); if (GlobalTracer.get().scopeManager().active() instanceof TraceScope) { @@ -126,7 +130,7 @@ public final class AkkaHttpServerInstrumentation extends Instrumenter.Default { 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); span.log(Collections.singletonMap(ERROR_OBJECT, t)); Tags.HTTP_STATUS.set(span, 500); @@ -141,19 +145,19 @@ public final class AkkaHttpServerInstrumentation extends Instrumenter.Default { public static class DatadogSyncWrapper extends AbstractFunction1 { private final Function1 userHandler; - public DatadogSyncWrapper(Function1 userHandler) { + public DatadogSyncWrapper(final Function1 userHandler) { this.userHandler = userHandler; } @Override - public HttpResponse apply(HttpRequest request) { + public HttpResponse apply(final HttpRequest request) { final Scope scope = DatadogWrapperHelper.createSpan(request); try { final HttpResponse response = userHandler.apply(request); scope.close(); DatadogWrapperHelper.finishSpan(scope.span(), response); return response; - } catch (Throwable t) { + } catch (final Throwable t) { scope.close(); DatadogWrapperHelper.finishSpan(scope.span(), t); throw t; @@ -167,19 +171,19 @@ public final class AkkaHttpServerInstrumentation extends Instrumenter.Default { private final ExecutionContext executionContext; public DatadogAsyncWrapper( - Function1> userHandler, - ExecutionContext executionContext) { + final Function1> userHandler, + final ExecutionContext executionContext) { this.userHandler = userHandler; this.executionContext = executionContext; } @Override - public Future apply(HttpRequest request) { + public Future apply(final HttpRequest request) { final Scope scope = DatadogWrapperHelper.createSpan(request); Future futureResponse = null; try { futureResponse = userHandler.apply(request); - } catch (Throwable t) { + } catch (final Throwable t) { scope.close(); DatadogWrapperHelper.finishSpan(scope.span(), t); throw t; @@ -188,14 +192,14 @@ public final class AkkaHttpServerInstrumentation extends Instrumenter.Default { futureResponse.transform( new AbstractFunction1() { @Override - public HttpResponse apply(HttpResponse response) { + public HttpResponse apply(final HttpResponse response) { DatadogWrapperHelper.finishSpan(scope.span(), response); return response; } }, new AbstractFunction1() { @Override - public Throwable apply(Throwable t) { + public Throwable apply(final Throwable t) { DatadogWrapperHelper.finishSpan(scope.span(), t); return t; } @@ -209,7 +213,7 @@ public final class AkkaHttpServerInstrumentation extends Instrumenter.Default { public static class AkkaHttpServerHeaders implements TextMap { private final HttpRequest request; - public AkkaHttpServerHeaders(HttpRequest request) { + public AkkaHttpServerHeaders(final HttpRequest request) { this.request = request; } @@ -217,7 +221,7 @@ public final class AkkaHttpServerInstrumentation extends Instrumenter.Default { public Iterator> iterator() { final Map javaMap = new HashMap<>(request.headers().size()); - for (HttpHeader header : request.getHeaders()) { + for (final HttpHeader header : request.getHeaders()) { javaMap.put(header.name(), header.value()); } @@ -225,7 +229,7 @@ public final class AkkaHttpServerInstrumentation extends Instrumenter.Default { } @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"); } } diff --git a/dd-java-agent/instrumentation/akka-http-10.0/src/test/groovy/AkkaHttpClientInstrumentationTest.groovy b/dd-java-agent/instrumentation/akka-http-10.0/src/test/groovy/AkkaHttpClientInstrumentationTest.groovy index d63b329596..690c4efa55 100644 --- a/dd-java-agent/instrumentation/akka-http-10.0/src/test/groovy/AkkaHttpClientInstrumentationTest.groovy +++ b/dd-java-agent/instrumentation/akka-http-10.0/src/test/groovy/AkkaHttpClientInstrumentationTest.groovy @@ -55,9 +55,9 @@ class AkkaHttpClientInstrumentationTest extends AgentTestRunner { @Shared ActorMaterializer materializer = ActorMaterializer.create(system) - def pool = Http.get(system).superPool(materializer) + def pool = Http.get(system). superPool(materializer) - def "#route request trace" () { + def "#route request trace"() { setup: def url = server.address.resolve("/" + route).toURL() @@ -116,7 +116,7 @@ class AkkaHttpClientInstrumentationTest extends AgentTestRunner { "error" | 500 | true | null } - def "error request trace" () { + def "error request trace"() { setup: def url = new URL("http://localhost:${server.address.port + 1}/test") @@ -153,7 +153,7 @@ class AkkaHttpClientInstrumentationTest extends AgentTestRunner { } } - def "singleRequest exception trace" () { + def "singleRequest exception trace"() { when: // Passing null causes NPE in singleRequest Http.get(system).singleRequest(null, materializer) @@ -183,14 +183,14 @@ class AkkaHttpClientInstrumentationTest extends AgentTestRunner { } - def "#route pool request trace" () { + def "#route pool request trace"() { setup: def url = server.address.resolve("/" + route).toURL() CompletionStage, Integer>> sink = Source - .>single(new Pair(HttpRequest.create(url.toString()), 1)) + .> single(new Pair(HttpRequest.create(url.toString()), 1)) .via(pool) - .runWith(Sink., Integer>>head(), materializer) + .runWith(Sink., Integer>> head(), materializer) when: HttpResponse response = sink.toCompletableFuture().get().first().get() @@ -242,14 +242,14 @@ class AkkaHttpClientInstrumentationTest extends AgentTestRunner { "error" | 500 | true | null } - def "error request pool trace" () { + def "error request pool trace"() { setup: def url = new URL("http://localhost:${server.address.port + 1}/test") CompletionStage, Integer>> sink = Source - .>single(new Pair(HttpRequest.create(url.toString()), 1)) + .> single(new Pair(HttpRequest.create(url.toString()), 1)) .via(pool) - .runWith(Sink., Integer>>head(), materializer) + .runWith(Sink., Integer>> head(), materializer) def response = sink.toCompletableFuture().get().first() when: diff --git a/dd-java-agent/instrumentation/akka-http-10.0/src/test/groovy/AkkaHttpServerInstrumentationTest.groovy b/dd-java-agent/instrumentation/akka-http-10.0/src/test/groovy/AkkaHttpServerInstrumentationTest.groovy index a2083d69a9..4273d63742 100644 --- a/dd-java-agent/instrumentation/akka-http-10.0/src/test/groovy/AkkaHttpServerInstrumentationTest.groovy +++ b/dd-java-agent/instrumentation/akka-http-10.0/src/test/groovy/AkkaHttpServerInstrumentationTest.groovy @@ -30,7 +30,7 @@ class AkkaHttpServerInstrumentationTest extends AgentTestRunner { AkkaHttpTestSyncWebServer.stop() } - def "#server 200 request trace" () { + def "#server 200 request trace"() { setup: OkHttpClient client = new OkHttpClient.Builder().build() def request = new Request.Builder() @@ -71,12 +71,12 @@ class AkkaHttpServerInstrumentationTest extends AgentTestRunner { } where: - server | port - "async" | asyncPort - "sync" | syncPort + server | port + "async" | asyncPort + "sync" | syncPort } - def "#server exceptions trace for #endpoint" () { + def "#server exceptions trace for #endpoint"() { setup: OkHttpClient client = new OkHttpClient.Builder().build() def request = new Request.Builder() @@ -110,13 +110,13 @@ class AkkaHttpServerInstrumentationTest extends AgentTestRunner { } where: - server | port | endpoint | errorMessage - "async" | asyncPort | "throw-handler" | "Oh no handler" - "async" | asyncPort | "throw-callback" | "Oh no callback" - "sync" | syncPort | "throw-handler" | "Oh no handler" + server | port | endpoint | errorMessage + "async" | asyncPort | "throw-handler" | "Oh no handler" + "async" | asyncPort | "throw-callback" | "Oh no callback" + "sync" | syncPort | "throw-handler" | "Oh no handler" } - def "#server 5xx trace" () { + def "#server 5xx trace"() { setup: OkHttpClient client = new OkHttpClient.Builder().build() def request = new Request.Builder() @@ -150,12 +150,12 @@ class AkkaHttpServerInstrumentationTest extends AgentTestRunner { } where: - server | port - "async" | asyncPort - "sync" | syncPort + server | port + "async" | asyncPort + "sync" | syncPort } - def "#server 4xx trace" () { + def "#server 4xx trace"() { setup: OkHttpClient client = new OkHttpClient.Builder().build() def request = new Request.Builder() @@ -188,8 +188,8 @@ class AkkaHttpServerInstrumentationTest extends AgentTestRunner { } where: - server | port - "async" | asyncPort - "sync" | syncPort + server | port + "async" | asyncPort + "sync" | syncPort } } diff --git a/dd-java-agent/instrumentation/akka-http-10.0/src/test/scala/AkkaHttpTestWebServer.scala b/dd-java-agent/instrumentation/akka-http-10.0/src/test/scala/AkkaHttpTestWebServer.scala index a66b1cbd6c..7357e5917c 100644 --- a/dd-java-agent/instrumentation/akka-http-10.0/src/test/scala/AkkaHttpTestWebServer.scala +++ b/dd-java-agent/instrumentation/akka-http-10.0/src/test/scala/AkkaHttpTestWebServer.scala @@ -1,8 +1,8 @@ import akka.actor.ActorSystem import akka.http.scaladsl.Http import akka.http.scaladsl.Http.ServerBinding -import akka.http.scaladsl.model._ import akka.http.scaladsl.model.HttpMethods.GET +import akka.http.scaladsl.model._ import akka.stream.ActorMaterializer import datadog.trace.agent.test.TestUtils import datadog.trace.api.Trace @@ -37,7 +37,7 @@ object AkkaHttpTestAsyncWebServer { } } - private var binding :ServerBinding = null + private var binding: ServerBinding = null def start(): Unit = synchronized { if (null == binding) { @@ -77,7 +77,7 @@ object AkkaHttpTestSyncWebServer { HttpResponse(entity = "Not found unit test.", status = StatusCodes.NotFound) } - private var binding :ServerBinding = null + private var binding: ServerBinding = null def start(): Unit = synchronized { if (null == binding) { diff --git a/dd-java-agent/instrumentation/aws-java-sdk-1.11.0/src/main/java/datadog/trace/instrumentation/aws/v0/SpanDecorator.java b/dd-java-agent/instrumentation/aws-java-sdk-1.11.0/src/main/java/datadog/trace/instrumentation/aws/v0/SpanDecorator.java index 7f16cfef38..404e97c6a4 100644 --- a/dd-java-agent/instrumentation/aws-java-sdk-1.11.0/src/main/java/datadog/trace/instrumentation/aws/v0/SpanDecorator.java +++ b/dd-java-agent/instrumentation/aws-java-sdk-1.11.0/src/main/java/datadog/trace/instrumentation/aws/v0/SpanDecorator.java @@ -13,7 +13,11 @@ */ 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.Request; diff --git a/dd-java-agent/instrumentation/aws-java-sdk-1.11.106/src/main/java/datadog/trace/instrumentation/aws/v106/SpanDecorator.java b/dd-java-agent/instrumentation/aws-java-sdk-1.11.106/src/main/java/datadog/trace/instrumentation/aws/v106/SpanDecorator.java index 370b4f011f..27f77913c6 100644 --- a/dd-java-agent/instrumentation/aws-java-sdk-1.11.106/src/main/java/datadog/trace/instrumentation/aws/v106/SpanDecorator.java +++ b/dd-java-agent/instrumentation/aws-java-sdk-1.11.106/src/main/java/datadog/trace/instrumentation/aws/v106/SpanDecorator.java @@ -13,7 +13,11 @@ */ 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.Request; diff --git a/dd-java-agent/instrumentation/classloaders/classloaders.gradle b/dd-java-agent/instrumentation/classloaders/classloaders.gradle index 24e24ba3f3..2f31d65c65 100644 --- a/dd-java-agent/instrumentation/classloaders/classloaders.gradle +++ b/dd-java-agent/instrumentation/classloaders/classloaders.gradle @@ -8,6 +8,6 @@ dependencies { compile deps.opentracing annotationProcessor deps.autoservice implementation deps.autoservice - + testCompile project(':dd-java-agent:testing') } diff --git a/dd-java-agent/instrumentation/datastax-cassandra-3.2/src/main/java/datadog/trace/instrumentation/datastax/cassandra/TracingSession.java b/dd-java-agent/instrumentation/datastax-cassandra-3.2/src/main/java/datadog/trace/instrumentation/datastax/cassandra/TracingSession.java index 51c0a89dbd..29672c67f5 100644 --- a/dd-java-agent/instrumentation/datastax-cassandra-3.2/src/main/java/datadog/trace/instrumentation/datastax/cassandra/TracingSession.java +++ b/dd-java-agent/instrumentation/datastax-cassandra-3.2/src/main/java/datadog/trace/instrumentation/datastax/cassandra/TracingSession.java @@ -13,7 +13,11 @@ */ 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.CloseFuture; @@ -244,7 +248,7 @@ class TracingSession implements Session { public void run() { try { finishSpan(span, future.get()); - } catch (InterruptedException | ExecutionException e) { + } catch (final InterruptedException | ExecutionException e) { finishSpan(span, e); } } diff --git a/dd-java-agent/instrumentation/datastax-cassandra-3.2/src/test/groovy/CassandraClientTest.groovy b/dd-java-agent/instrumentation/datastax-cassandra-3.2/src/test/groovy/CassandraClientTest.groovy index 35b86a5d1a..f6d92f900a 100644 --- a/dd-java-agent/instrumentation/datastax-cassandra-3.2/src/test/groovy/CassandraClientTest.groovy +++ b/dd-java-agent/instrumentation/datastax-cassandra-3.2/src/test/groovy/CassandraClientTest.groovy @@ -40,7 +40,7 @@ class CassandraClientTest extends AgentTestRunner { session.execute("DROP KEYSPACE IF EXISTS sync_test") session.execute( - "CREATE KEYSPACE sync_test WITH REPLICATION = {'class':'SimpleStrategy', 'replication_factor':3}") + "CREATE KEYSPACE sync_test WITH REPLICATION = {'class':'SimpleStrategy', 'replication_factor':3}") session.execute("CREATE TABLE sync_test.users ( id UUID PRIMARY KEY, name text )") session.execute("INSERT INTO sync_test.users (id, name) values (uuid(), 'alice')") session.execute("SELECT * FROM sync_test.users where name = 'alice' ALLOW FILTERING") @@ -72,15 +72,15 @@ class CassandraClientTest extends AgentTestRunner { session.executeAsync("DROP KEYSPACE IF EXISTS async_test").get() session - .executeAsync( - "CREATE KEYSPACE async_test WITH REPLICATION = {'class':'SimpleStrategy', 'replication_factor':3}") - .get() + .executeAsync( + "CREATE KEYSPACE async_test WITH REPLICATION = {'class':'SimpleStrategy', 'replication_factor':3}") + .get() session.executeAsync("CREATE TABLE async_test.users ( id UUID PRIMARY KEY, name text )").get() session.executeAsync("INSERT INTO async_test.users (id, name) values (uuid(), 'alice')").get() TEST_WRITER.waitForTraces(4) session - .executeAsync("SELECT * FROM async_test.users where name = 'alice' ALLOW FILTERING") - .get() + .executeAsync("SELECT * FROM async_test.users where name = 'alice' ALLOW FILTERING") + .get() TEST_WRITER.waitForTraces(5) def query = "SELECT * FROM async_test.users where name = 'alice' ALLOW FILTERING" diff --git a/dd-java-agent/instrumentation/elasticsearch-transport-2/src/test/groovy/Elasticsearch2NodeClientTest.groovy b/dd-java-agent/instrumentation/elasticsearch-transport-2/src/test/groovy/Elasticsearch2NodeClientTest.groovy index f80767042e..cac0a9a719 100644 --- a/dd-java-agent/instrumentation/elasticsearch-transport-2/src/test/groovy/Elasticsearch2NodeClientTest.groovy +++ b/dd-java-agent/instrumentation/elasticsearch-transport-2/src/test/groovy/Elasticsearch2NodeClientTest.groovy @@ -39,7 +39,7 @@ class Elasticsearch2NodeClientTest extends AgentTestRunner { def settings = Settings.builder() .put("path.home", esWorkingDir.path) - // Since we use listeners to close spans this should make our span closing deterministic which is good for tests + // Since we use listeners to close spans this should make our span closing deterministic which is good for tests .put("threadpool.listener.size", 1) .put("http.port", httpPort) .put("transport.tcp.port", tcpPort) diff --git a/dd-java-agent/instrumentation/elasticsearch-transport-2/src/test/groovy/Elasticsearch2SpringTemplateTest.groovy b/dd-java-agent/instrumentation/elasticsearch-transport-2/src/test/groovy/Elasticsearch2SpringTemplateTest.groovy index 9e50a0b6cd..6dd6864b0a 100644 --- a/dd-java-agent/instrumentation/elasticsearch-transport-2/src/test/groovy/Elasticsearch2SpringTemplateTest.groovy +++ b/dd-java-agent/instrumentation/elasticsearch-transport-2/src/test/groovy/Elasticsearch2SpringTemplateTest.groovy @@ -50,7 +50,7 @@ class Elasticsearch2SpringTemplateTest extends AgentTestRunner { def settings = Settings.builder() .put("path.home", esWorkingDir.path) - // Since we use listeners to close spans this should make our span closing deterministic which is good for tests + // Since we use listeners to close spans this should make our span closing deterministic which is good for tests .put("threadpool.listener.size", 1) .put("http.port", httpPort) .put("transport.tcp.port", tcpPort) diff --git a/dd-java-agent/instrumentation/elasticsearch-transport-2/src/test/groovy/Elasticsearch2TransportClientTest.groovy b/dd-java-agent/instrumentation/elasticsearch-transport-2/src/test/groovy/Elasticsearch2TransportClientTest.groovy index 0c3d383d48..02e9ff7bbb 100644 --- a/dd-java-agent/instrumentation/elasticsearch-transport-2/src/test/groovy/Elasticsearch2TransportClientTest.groovy +++ b/dd-java-agent/instrumentation/elasticsearch-transport-2/src/test/groovy/Elasticsearch2TransportClientTest.groovy @@ -51,7 +51,7 @@ class Elasticsearch2TransportClientTest extends AgentTestRunner { client = TransportClient.builder().settings( Settings.builder() - // Since we use listeners to close spans this should make our span closing deterministic which is good for tests + // Since we use listeners to close spans this should make our span closing deterministic which is good for tests .put("threadpool.listener.size", 1) .put("cluster.name", "test-cluster") .build() diff --git a/dd-java-agent/instrumentation/elasticsearch-transport-5/src/test/groovy/Elasticsearch5NodeClientTest.groovy b/dd-java-agent/instrumentation/elasticsearch-transport-5/src/test/groovy/Elasticsearch5NodeClientTest.groovy index 4fc8221d93..5f622ca05e 100644 --- a/dd-java-agent/instrumentation/elasticsearch-transport-5/src/test/groovy/Elasticsearch5NodeClientTest.groovy +++ b/dd-java-agent/instrumentation/elasticsearch-transport-5/src/test/groovy/Elasticsearch5NodeClientTest.groovy @@ -42,7 +42,7 @@ class Elasticsearch5NodeClientTest extends AgentTestRunner { def settings = Settings.builder() .put("path.home", esWorkingDir.path) - // Since we use listeners to close spans this should make our span closing deterministic which is good for tests + // Since we use listeners to close spans this should make our span closing deterministic which is good for tests .put("thread_pool.listener.size", 1) .put("http.port", httpPort) .put("transport.tcp.port", tcpPort) diff --git a/dd-java-agent/instrumentation/elasticsearch-transport-5/src/test/groovy/Elasticsearch5TransportClientTest.groovy b/dd-java-agent/instrumentation/elasticsearch-transport-5/src/test/groovy/Elasticsearch5TransportClientTest.groovy index b1959a79f6..6c826ec619 100644 --- a/dd-java-agent/instrumentation/elasticsearch-transport-5/src/test/groovy/Elasticsearch5TransportClientTest.groovy +++ b/dd-java-agent/instrumentation/elasticsearch-transport-5/src/test/groovy/Elasticsearch5TransportClientTest.groovy @@ -58,7 +58,7 @@ class Elasticsearch5TransportClientTest extends AgentTestRunner { client = new PreBuiltTransportClient( Settings.builder() - // Since we use listeners to close spans this should make our span closing deterministic which is good for tests + // Since we use listeners to close spans this should make our span closing deterministic which is good for tests .put("thread_pool.listener.size", 1) .put(CLUSTER_NAME_SETTING.getKey(), "test-cluster") .build() diff --git a/dd-java-agent/instrumentation/elasticsearch-transport-6/src/test/groovy/Elasticsearch6NodeClientTest.groovy b/dd-java-agent/instrumentation/elasticsearch-transport-6/src/test/groovy/Elasticsearch6NodeClientTest.groovy index df9c8b4734..9ae5ec1d49 100644 --- a/dd-java-agent/instrumentation/elasticsearch-transport-6/src/test/groovy/Elasticsearch6NodeClientTest.groovy +++ b/dd-java-agent/instrumentation/elasticsearch-transport-6/src/test/groovy/Elasticsearch6NodeClientTest.groovy @@ -41,7 +41,7 @@ class Elasticsearch6NodeClientTest extends AgentTestRunner { def settings = Settings.builder() .put("path.home", esWorkingDir.path) - // Since we use listeners to close spans this should make our span closing deterministic which is good for tests + // Since we use listeners to close spans this should make our span closing deterministic which is good for tests .put("thread_pool.listener.size", 1) .put("http.port", httpPort) .put("transport.tcp.port", tcpPort) diff --git a/dd-java-agent/instrumentation/elasticsearch-transport-6/src/test/groovy/Elasticsearch6TransportClientTest.groovy b/dd-java-agent/instrumentation/elasticsearch-transport-6/src/test/groovy/Elasticsearch6TransportClientTest.groovy index 72d810942b..e54313a378 100644 --- a/dd-java-agent/instrumentation/elasticsearch-transport-6/src/test/groovy/Elasticsearch6TransportClientTest.groovy +++ b/dd-java-agent/instrumentation/elasticsearch-transport-6/src/test/groovy/Elasticsearch6TransportClientTest.groovy @@ -55,7 +55,7 @@ class Elasticsearch6TransportClientTest extends AgentTestRunner { client = new PreBuiltTransportClient( Settings.builder() - // Since we use listeners to close spans this should make our span closing deterministic which is good for tests + // Since we use listeners to close spans this should make our span closing deterministic which is good for tests .put("thread_pool.listener.size", 1) .put(CLUSTER_NAME_SETTING.getKey(), "test-cluster") .build() diff --git a/dd-java-agent/instrumentation/hystrix-1.4/src/main/java/datadog/trace/instrumentation/hystrix/HystrixCommandInstrumentation.java b/dd-java-agent/instrumentation/hystrix-1.4/src/main/java/datadog/trace/instrumentation/hystrix/HystrixCommandInstrumentation.java index 3458e1be52..bb723c565b 100644 --- a/dd-java-agent/instrumentation/hystrix-1.4/src/main/java/datadog/trace/instrumentation/hystrix/HystrixCommandInstrumentation.java +++ b/dd-java-agent/instrumentation/hystrix-1.4/src/main/java/datadog/trace/instrumentation/hystrix/HystrixCommandInstrumentation.java @@ -14,7 +14,9 @@ import io.opentracing.Span; import io.opentracing.tag.Tags; import io.opentracing.util.GlobalTracer; 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.matcher.ElementMatcher; @@ -34,7 +36,7 @@ public class HystrixCommandInstrumentation extends Instrumenter.Default { @Override public Map transformers() { - Map transformers = new HashMap<>(); + final Map transformers = new HashMap<>(); transformers.put( isMethod().and(named("run").or(named("getFallback"))), TraceAdvice.class.getName()); return transformers; diff --git a/dd-java-agent/instrumentation/hystrix-1.4/src/main/java/datadog/trace/instrumentation/hystrix/HystrixThreadPoolInstrumentation.java b/dd-java-agent/instrumentation/hystrix-1.4/src/main/java/datadog/trace/instrumentation/hystrix/HystrixThreadPoolInstrumentation.java index f4fd053cb6..ad924588ef 100644 --- a/dd-java-agent/instrumentation/hystrix-1.4/src/main/java/datadog/trace/instrumentation/hystrix/HystrixThreadPoolInstrumentation.java +++ b/dd-java-agent/instrumentation/hystrix-1.4/src/main/java/datadog/trace/instrumentation/hystrix/HystrixThreadPoolInstrumentation.java @@ -10,7 +10,8 @@ import datadog.trace.agent.tooling.Instrumenter; import datadog.trace.context.TraceScope; import io.opentracing.Scope; import io.opentracing.util.GlobalTracer; -import java.util.*; +import java.util.HashMap; +import java.util.Map; import net.bytebuddy.asm.Advice; import net.bytebuddy.matcher.ElementMatcher; diff --git a/dd-java-agent/instrumentation/instrumentation.gradle b/dd-java-agent/instrumentation/instrumentation.gradle index 68793d1547..23df635318 100644 --- a/dd-java-agent/instrumentation/instrumentation.gradle +++ b/dd-java-agent/instrumentation/instrumentation.gradle @@ -40,7 +40,7 @@ subprojects { subProj -> } } -excludedClassesConverage += [ 'datadog.trace.instrumentation.*' ] +excludedClassesConverage += ['datadog.trace.instrumentation.*'] dependencies { compile(project(':dd-java-agent:agent-tooling')) { diff --git a/dd-java-agent/instrumentation/java-concurrent/akka-testing/akka-testing.gradle b/dd-java-agent/instrumentation/java-concurrent/akka-testing/akka-testing.gradle index fbcbd36dd5..415b310aa5 100644 --- a/dd-java-agent/instrumentation/java-concurrent/akka-testing/akka-testing.gradle +++ b/dd-java-agent/instrumentation/java-concurrent/akka-testing/akka-testing.gradle @@ -1,7 +1,7 @@ apply from: "${rootDir}/gradle/java.gradle" apply plugin: 'scala' -excludedClassesConverage += [ '*' ] +excludedClassesConverage += ['*'] dependencies { compile project(':dd-trace-api') diff --git a/dd-java-agent/instrumentation/java-concurrent/akka-testing/src/main/scala/AkkaActors.scala b/dd-java-agent/instrumentation/java-concurrent/akka-testing/src/main/scala/AkkaActors.scala index f2dc79d46c..8d05c0525d 100644 --- a/dd-java-agent/instrumentation/java-concurrent/akka-testing/src/main/scala/AkkaActors.scala +++ b/dd-java-agent/instrumentation/java-concurrent/akka-testing/src/main/scala/AkkaActors.scala @@ -26,26 +26,28 @@ object AkkaActors { } class AkkaActors { + import AkkaActors._ import Greeter._ + implicit val timeout: Timeout = 5.minutes @Trace - def basicTell() : Unit = { + def basicTell(): Unit = { GlobalTracer.get().scopeManager().active().asInstanceOf[TraceScope].setAsyncPropagation(true) howdyGreeter ! WhoToGreet("Akka") howdyGreeter ! Greet } @Trace - def basicAsk() : Unit = { + def basicAsk(): Unit = { GlobalTracer.get().scopeManager().active().asInstanceOf[TraceScope].setAsyncPropagation(true) howdyGreeter ! WhoToGreet("Akka") howdyGreeter ? Greet } @Trace - def basicForward() : Unit = { + def basicForward(): Unit = { GlobalTracer.get().scopeManager().active().asInstanceOf[TraceScope].setAsyncPropagation(true) helloGreeter ! WhoToGreet("Akka") helloGreeter ? Greet @@ -54,11 +56,15 @@ class AkkaActors { object Greeter { def props(message: String, receiverActor: ActorRef): Props = Props(new Greeter(message, receiverActor)) + final case class WhoToGreet(who: String) + case object Greet + } class Greeter(message: String, receiverActor: ActorRef) extends Actor { + import Greeter._ import Receiver._ @@ -67,17 +73,20 @@ class Greeter(message: String, receiverActor: ActorRef) extends Actor { def receive = { case WhoToGreet(who) => greeting = s"$message, $who" - case Greet => + case Greet => receiverActor ! Greeting(greeting) } } object Receiver { def props: Props = Props[Receiver] + final case class Greeting(greeting: String) + } class Receiver extends Actor with ActorLogging { + import Receiver._ def receive = { diff --git a/dd-java-agent/instrumentation/java-concurrent/scala-testing/src/test/scala/ScalaConcurrentTests.scala b/dd-java-agent/instrumentation/java-concurrent/scala-testing/src/test/scala/ScalaConcurrentTests.scala index 40578a5e2d..579cd83e7d 100644 --- a/dd-java-agent/instrumentation/java-concurrent/scala-testing/src/test/scala/ScalaConcurrentTests.scala +++ b/dd-java-agent/instrumentation/java-concurrent/scala-testing/src/test/scala/ScalaConcurrentTests.scala @@ -12,7 +12,7 @@ class ScalaConcurrentTests { * @return Number of expected spans in the trace */ @Trace - def traceWithFutureAndCallbacks() : Integer = { + def traceWithFutureAndCallbacks(): Integer = { GlobalTracer.get().scopeManager().active().asInstanceOf[TraceScope].setAsyncPropagation(true) val goodFuture: Future[Integer] = Future { tracedChild("goodFuture") @@ -33,7 +33,7 @@ class ScalaConcurrentTests { } @Trace - def tracedAcrossThreadsWithNoTrace() :Integer = { + def tracedAcrossThreadsWithNoTrace(): Integer = { GlobalTracer.get().scopeManager().active().asInstanceOf[TraceScope].setAsyncPropagation(true) val goodFuture: Future[Integer] = Future { 1 @@ -53,7 +53,7 @@ class ScalaConcurrentTests { * @return Number of expected spans in the trace */ @Trace - def traceWithPromises() : Integer = { + def traceWithPromises(): Integer = { GlobalTracer.get().scopeManager().active().asInstanceOf[TraceScope].setAsyncPropagation(true) val keptPromise = Promise[Boolean]() val brokenPromise = Promise[Boolean]() @@ -86,7 +86,7 @@ class ScalaConcurrentTests { * @return Number of expected spans in the trace */ @Trace - def tracedWithFutureFirstCompletions() :Integer = { + def tracedWithFutureFirstCompletions(): Integer = { GlobalTracer.get().scopeManager().active().asInstanceOf[TraceScope].setAsyncPropagation(true) val completedVal = Future.firstCompletedOf( List( @@ -114,7 +114,7 @@ class ScalaConcurrentTests { GlobalTracer.get().scopeManager().active().asInstanceOf[TraceScope].setAsyncPropagation(true) val f: Future[String] = Future { tracedChild("timeoutChild") - while(true) { + while (true) { // never actually finish } "done" diff --git a/dd-java-agent/instrumentation/java-concurrent/src/main/java/datadog/trace/instrumentation/java/concurrent/ExecutorInstrumentation.java b/dd-java-agent/instrumentation/java-concurrent/src/main/java/datadog/trace/instrumentation/java/concurrent/ExecutorInstrumentation.java index 31c1dbbaed..4bc99e0463 100644 --- a/dd-java-agent/instrumentation/java-concurrent/src/main/java/datadog/trace/instrumentation/java/concurrent/ExecutorInstrumentation.java +++ b/dd-java-agent/instrumentation/java-concurrent/src/main/java/datadog/trace/instrumentation/java/concurrent/ExecutorInstrumentation.java @@ -8,13 +8,19 @@ import static net.bytebuddy.matcher.ElementMatchers.not; import static net.bytebuddy.matcher.ElementMatchers.takesArgument; 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.context.TraceScope; import io.opentracing.Scope; import io.opentracing.util.GlobalTracer; 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.ConcurrentHashMap; 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 if (!whitelisted) { - for (String name : WHITELISTED_EXECUTORS_PREFIXES) { + for (final String name : WHITELISTED_EXECUTORS_PREFIXES) { if (target.getName().startsWith(name)) { whitelisted = true; break; @@ -126,7 +132,7 @@ public final class ExecutorInstrumentation extends Instrumenter.Default { @Override public Map transformers() { - Map transformers = new HashMap<>(); + final Map transformers = new HashMap<>(); transformers.put( named("execute").and(takesArgument(0, Runnable.class)), WrapRunnableAdvice.class.getName()); transformers.put( @@ -141,7 +147,6 @@ public final class ExecutorInstrumentation extends Instrumenter.Default { public static class WrapRunnableAdvice { - @SuppressWarnings("unused") @Advice.OnMethodEnter(suppress = Throwable.class) public static DatadogWrapper enterJobSubmit( @Advice.Argument(value = 0, readOnly = false) Runnable task) { @@ -153,7 +158,6 @@ public final class ExecutorInstrumentation extends Instrumenter.Default { return null; } - @SuppressWarnings("unused") @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class) public static void exitJobSubmit( @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 { - @SuppressWarnings("unused") @Advice.OnMethodEnter(suppress = Throwable.class) public static DatadogWrapper enterJobSubmit( @Advice.Argument(value = 0, readOnly = false) Callable task) { @@ -176,7 +179,6 @@ public final class ExecutorInstrumentation extends Instrumenter.Default { return null; } - @SuppressWarnings("unused") @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class) public static void exitJobSubmit( @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 { - @SuppressWarnings("unused") @Advice.OnMethodEnter(suppress = Throwable.class) public static Collection wrapJob( @Advice.Argument(value = 0, readOnly = false) Collection> tasks) { @@ -196,7 +197,7 @@ public final class ExecutorInstrumentation extends Instrumenter.Default { && tasks != null && DatadogWrapper.isTopLevelCall()) { final Collection> wrappedTasks = new ArrayList<>(tasks.size()); - for (Callable task : tasks) { + for (final Callable task : tasks) { if (task != null && !(task instanceof CallableWrapper)) { wrappedTasks.add(new CallableWrapper<>(task, (TraceScope) scope)); } @@ -207,7 +208,6 @@ public final class ExecutorInstrumentation extends Instrumenter.Default { return null; } - @SuppressWarnings("unused") @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class) public static void checkCancel( @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 */ - @SuppressWarnings("WeakerAccess") public static boolean isTopLevelCall() { return CallDepthThreadLocalMap.incrementCallDepth(ExecutorService.class) <= 0; } /** Reset nested calls to executor. */ - @SuppressWarnings("WeakerAccess") public static void resetNestedCalls() { CallDepthThreadLocalMap.reset(ExecutorService.class); } @@ -265,8 +263,7 @@ public final class ExecutorInstrumentation extends Instrumenter.Default { * @param task task object * @return true iff given task object should be wrapped */ - @SuppressWarnings("WeakerAccess") - public static boolean shouldWrapTask(Object task) { + public static boolean shouldWrapTask(final Object task) { final Scope scope = GlobalTracer.get().scopeManager().active(); return (scope instanceof TraceScope && ((TraceScope) scope).isAsyncPropagating() @@ -281,7 +278,6 @@ public final class ExecutorInstrumentation extends Instrumenter.Default { * @param wrapper task wrapper * @param throwable throwable that may have been thrown */ - @SuppressWarnings("WeakerAccess") public static void cleanUpOnMethodExit( final DatadogWrapper wrapper, final Throwable throwable) { if (null != wrapper) { @@ -356,7 +352,7 @@ public final class ExecutorInstrumentation extends Instrumenter.Default { if (o instanceof DatadogWrapper) { return (DatadogWrapper) o; } - } catch (IllegalArgumentException | IllegalAccessException e) { + } catch (final IllegalArgumentException | IllegalAccessException e) { } finally { field.setAccessible(false); } diff --git a/dd-java-agent/instrumentation/java-concurrent/src/main/java/datadog/trace/instrumentation/java/concurrent/FutureInstrumentation.java b/dd-java-agent/instrumentation/java-concurrent/src/main/java/datadog/trace/instrumentation/java/concurrent/FutureInstrumentation.java index 0471b38d3c..3f6a4a0504 100644 --- a/dd-java-agent/instrumentation/java-concurrent/src/main/java/datadog/trace/instrumentation/java/concurrent/FutureInstrumentation.java +++ b/dd-java-agent/instrumentation/java-concurrent/src/main/java/datadog/trace/instrumentation/java/concurrent/FutureInstrumentation.java @@ -10,7 +10,12 @@ import com.google.auto.service.AutoService; import datadog.trace.agent.tooling.Instrumenter; import datadog.trace.instrumentation.java.concurrent.ExecutorInstrumentation.ConcurrentUtils; 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 lombok.extern.slf4j.Slf4j; import net.bytebuddy.asm.Advice; @@ -91,7 +96,7 @@ public final class FutureInstrumentation extends Instrumenter.Default { @Override public Map transformers() { - Map transformers = new HashMap<>(); + final Map transformers = new HashMap<>(); transformers.put( named("cancel").and(returns(boolean.class)), CanceledFutureAdvice.class.getName()); return transformers; diff --git a/dd-java-agent/instrumentation/java-concurrent/src/slickTest/scala/SlickUtils.scala b/dd-java-agent/instrumentation/java-concurrent/src/slickTest/scala/SlickUtils.scala index 34f81803b3..110cc5b305 100644 --- a/dd-java-agent/instrumentation/java-concurrent/src/slickTest/scala/SlickUtils.scala +++ b/dd-java-agent/instrumentation/java-concurrent/src/slickTest/scala/SlickUtils.scala @@ -3,19 +3,20 @@ import datadog.trace.context.TraceScope import io.opentracing.util.GlobalTracer import slick.jdbc.H2Profile.api._ -import scala.concurrent.{Await, Future} import scala.concurrent.duration.Duration +import scala.concurrent.{Await, Future} class SlickUtils { + import SlickUtils._ val database = Database.forURL(Url, - user=Username, - driver="org.h2.Driver", - keepAliveConnection=true, + user = Username, + driver = "org.h2.Driver", + keepAliveConnection = true, // Limit number of threads to hit Slick-specific case when we need to avoid re-wrapping // wrapped runnables. - executor=AsyncExecutor("test", numThreads=1, queueSize=1000) + executor = AsyncExecutor("test", numThreads = 1, queueSize = 1000) ) Await.result(database.run(sqlu"""CREATE ALIAS SLEEP FOR "java.lang.Thread.sleep(long)""""), Duration.Inf) diff --git a/dd-java-agent/instrumentation/jax-rs-annotations/src/main/java/datadog/trace/instrumentation/jaxrs/JaxRsAnnotationsInstrumentation.java b/dd-java-agent/instrumentation/jax-rs-annotations/src/main/java/datadog/trace/instrumentation/jaxrs/JaxRsAnnotationsInstrumentation.java index 9598fb539b..8ae0bd7de8 100644 --- a/dd-java-agent/instrumentation/jax-rs-annotations/src/main/java/datadog/trace/instrumentation/jaxrs/JaxRsAnnotationsInstrumentation.java +++ b/dd-java-agent/instrumentation/jax-rs-annotations/src/main/java/datadog/trace/instrumentation/jaxrs/JaxRsAnnotationsInstrumentation.java @@ -14,7 +14,9 @@ import io.opentracing.tag.Tags; import io.opentracing.util.GlobalTracer; import java.lang.annotation.Annotation; 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.Path; import net.bytebuddy.asm.Advice; diff --git a/dd-java-agent/instrumentation/jax-rs-client/src/main/java/datadog/trace/instrumentation/jaxrs/JaxRsClientInstrumentation.java b/dd-java-agent/instrumentation/jax-rs-client/src/main/java/datadog/trace/instrumentation/jaxrs/JaxRsClientInstrumentation.java index 9dc0193a32..1315114efd 100644 --- a/dd-java-agent/instrumentation/jax-rs-client/src/main/java/datadog/trace/instrumentation/jaxrs/JaxRsClientInstrumentation.java +++ b/dd-java-agent/instrumentation/jax-rs-client/src/main/java/datadog/trace/instrumentation/jaxrs/JaxRsClientInstrumentation.java @@ -6,7 +6,7 @@ import static net.bytebuddy.matcher.ElementMatchers.named; import static net.bytebuddy.matcher.ElementMatchers.returns; import com.google.auto.service.AutoService; -import datadog.trace.agent.tooling.*; +import datadog.trace.agent.tooling.Instrumenter; import java.util.HashMap; import java.util.Map; import javax.ws.rs.client.ClientBuilder; @@ -36,7 +36,7 @@ public final class JaxRsClientInstrumentation extends Instrumenter.Default { @Override public Map transformers() { - Map transformers = new HashMap<>(); + final Map transformers = new HashMap<>(); transformers.put( named("build").and(returns(hasSuperType(named("javax.ws.rs.client.Client")))), ClientBuilderAdvice.class.getName()); diff --git a/dd-java-agent/instrumentation/jdbc/src/test/groovy/JDBCInstrumentationTest.groovy b/dd-java-agent/instrumentation/jdbc/src/test/groovy/JDBCInstrumentationTest.groovy index 1f59b2b2d6..78f160069e 100644 --- a/dd-java-agent/instrumentation/jdbc/src/test/groovy/JDBCInstrumentationTest.groovy +++ b/dd-java-agent/instrumentation/jdbc/src/test/groovy/JDBCInstrumentationTest.groovy @@ -176,19 +176,19 @@ class JDBCInstrumentationTest extends AgentTestRunner { connection.close() where: - driver | connection | username | query - "h2" | new Driver().connect(jdbcUrls.get("h2"), null) | null | "SELECT 3" - "derby" | new EmbeddedDriver().connect(jdbcUrls.get("derby"), null)| "APP" | "SELECT 3 FROM SYSIBM.SYSDUMMY1" - "hsqldb" | new JDBCDriver().connect(jdbcUrls.get("hsqldb"), null) | "SA" | "SELECT 3 FROM INFORMATION_SCHEMA.SYSTEM_USERS" - "h2" | cpDatasources.get("tomcat").get("h2").getConnection() | null | "SELECT 3" - "derby" | cpDatasources.get("tomcat").get("derby").getConnection() | "APP" | "SELECT 3 FROM SYSIBM.SYSDUMMY1" - "hsqldb" | cpDatasources.get("tomcat").get("hsqldb").getConnection()| "SA" | "SELECT 3 FROM INFORMATION_SCHEMA.SYSTEM_USERS" - "h2" | cpDatasources.get("hikari").get("h2").getConnection() | null | "SELECT 3" - "derby" | cpDatasources.get("hikari").get("derby").getConnection() | "APP" | "SELECT 3 FROM SYSIBM.SYSDUMMY1" - "hsqldb" | cpDatasources.get("hikari").get("hsqldb").getConnection()| "SA" | "SELECT 3 FROM INFORMATION_SCHEMA.SYSTEM_USERS" - "h2" | cpDatasources.get("c3p0").get("h2").getConnection() | null | "SELECT 3" - "derby" | cpDatasources.get("c3p0").get("derby").getConnection() | "APP" | "SELECT 3 FROM SYSIBM.SYSDUMMY1" - "hsqldb" | cpDatasources.get("c3p0").get("hsqldb").getConnection() | "SA" | "SELECT 3 FROM INFORMATION_SCHEMA.SYSTEM_USERS" + driver | connection | username | query + "h2" | new Driver().connect(jdbcUrls.get("h2"), null) | null | "SELECT 3" + "derby" | new EmbeddedDriver().connect(jdbcUrls.get("derby"), null) | "APP" | "SELECT 3 FROM SYSIBM.SYSDUMMY1" + "hsqldb" | new JDBCDriver().connect(jdbcUrls.get("hsqldb"), null) | "SA" | "SELECT 3 FROM INFORMATION_SCHEMA.SYSTEM_USERS" + "h2" | cpDatasources.get("tomcat").get("h2").getConnection() | null | "SELECT 3" + "derby" | cpDatasources.get("tomcat").get("derby").getConnection() | "APP" | "SELECT 3 FROM SYSIBM.SYSDUMMY1" + "hsqldb" | cpDatasources.get("tomcat").get("hsqldb").getConnection() | "SA" | "SELECT 3 FROM INFORMATION_SCHEMA.SYSTEM_USERS" + "h2" | cpDatasources.get("hikari").get("h2").getConnection() | null | "SELECT 3" + "derby" | cpDatasources.get("hikari").get("derby").getConnection() | "APP" | "SELECT 3 FROM SYSIBM.SYSDUMMY1" + "hsqldb" | cpDatasources.get("hikari").get("hsqldb").getConnection() | "SA" | "SELECT 3 FROM INFORMATION_SCHEMA.SYSTEM_USERS" + "h2" | cpDatasources.get("c3p0").get("h2").getConnection() | null | "SELECT 3" + "derby" | cpDatasources.get("c3p0").get("derby").getConnection() | "APP" | "SELECT 3 FROM SYSIBM.SYSDUMMY1" + "hsqldb" | cpDatasources.get("c3p0").get("hsqldb").getConnection() | "SA" | "SELECT 3 FROM INFORMATION_SCHEMA.SYSTEM_USERS" } @Unroll @@ -230,15 +230,15 @@ class JDBCInstrumentationTest extends AgentTestRunner { connection.close() where: - driver | connection | username | query - "h2" | new Driver().connect(jdbcUrls.get("h2"), null) | null | "SELECT 3" - "derby" | new EmbeddedDriver().connect(jdbcUrls.get("derby"), null)| "APP" | "SELECT 3 FROM SYSIBM.SYSDUMMY1" - "h2" | cpDatasources.get("tomcat").get("h2").getConnection() | null | "SELECT 3" - "derby" | cpDatasources.get("tomcat").get("derby").getConnection() | "APP" | "SELECT 3 FROM SYSIBM.SYSDUMMY1" - "h2" | cpDatasources.get("hikari").get("h2").getConnection() | null | "SELECT 3" - "derby" | cpDatasources.get("hikari").get("derby").getConnection() | "APP" | "SELECT 3 FROM SYSIBM.SYSDUMMY1" - "h2" | cpDatasources.get("c3p0").get("h2").getConnection() | null | "SELECT 3" - "derby" | cpDatasources.get("c3p0").get("derby").getConnection() | "APP" | "SELECT 3 FROM SYSIBM.SYSDUMMY1" + driver | connection | username | query + "h2" | new Driver().connect(jdbcUrls.get("h2"), null) | null | "SELECT 3" + "derby" | new EmbeddedDriver().connect(jdbcUrls.get("derby"), null) | "APP" | "SELECT 3 FROM SYSIBM.SYSDUMMY1" + "h2" | cpDatasources.get("tomcat").get("h2").getConnection() | null | "SELECT 3" + "derby" | cpDatasources.get("tomcat").get("derby").getConnection() | "APP" | "SELECT 3 FROM SYSIBM.SYSDUMMY1" + "h2" | cpDatasources.get("hikari").get("h2").getConnection() | null | "SELECT 3" + "derby" | cpDatasources.get("hikari").get("derby").getConnection() | "APP" | "SELECT 3 FROM SYSIBM.SYSDUMMY1" + "h2" | cpDatasources.get("c3p0").get("h2").getConnection() | null | "SELECT 3" + "derby" | cpDatasources.get("c3p0").get("derby").getConnection() | "APP" | "SELECT 3 FROM SYSIBM.SYSDUMMY1" } @Unroll @@ -279,15 +279,15 @@ class JDBCInstrumentationTest extends AgentTestRunner { connection.close() where: - driver | connection | username | query - "h2" | new Driver().connect(jdbcUrls.get("h2"), null) | null | "SELECT 3" - "derby" | new EmbeddedDriver().connect(jdbcUrls.get("derby"), null)| "APP" | "SELECT 3 FROM SYSIBM.SYSDUMMY1" - "h2" | cpDatasources.get("tomcat").get("h2").getConnection() | null | "SELECT 3" - "derby" | cpDatasources.get("tomcat").get("derby").getConnection() | "APP" | "SELECT 3 FROM SYSIBM.SYSDUMMY1" - "h2" | cpDatasources.get("hikari").get("h2").getConnection() | null | "SELECT 3" - "derby" | cpDatasources.get("hikari").get("derby").getConnection() | "APP" | "SELECT 3 FROM SYSIBM.SYSDUMMY1" - "h2" | cpDatasources.get("c3p0").get("h2").getConnection() | null | "SELECT 3" - "derby" | cpDatasources.get("c3p0").get("derby").getConnection() | "APP" | "SELECT 3 FROM SYSIBM.SYSDUMMY1" + driver | connection | username | query + "h2" | new Driver().connect(jdbcUrls.get("h2"), null) | null | "SELECT 3" + "derby" | new EmbeddedDriver().connect(jdbcUrls.get("derby"), null) | "APP" | "SELECT 3 FROM SYSIBM.SYSDUMMY1" + "h2" | cpDatasources.get("tomcat").get("h2").getConnection() | null | "SELECT 3" + "derby" | cpDatasources.get("tomcat").get("derby").getConnection() | "APP" | "SELECT 3 FROM SYSIBM.SYSDUMMY1" + "h2" | cpDatasources.get("hikari").get("h2").getConnection() | null | "SELECT 3" + "derby" | cpDatasources.get("hikari").get("derby").getConnection() | "APP" | "SELECT 3 FROM SYSIBM.SYSDUMMY1" + "h2" | cpDatasources.get("c3p0").get("h2").getConnection() | null | "SELECT 3" + "derby" | cpDatasources.get("c3p0").get("derby").getConnection() | "APP" | "SELECT 3 FROM SYSIBM.SYSDUMMY1" } @Unroll @@ -328,19 +328,19 @@ class JDBCInstrumentationTest extends AgentTestRunner { connection.close() where: - driver | connection | username | query - "h2" | new Driver().connect(jdbcUrls.get("h2"), null) | null | "CREATE TABLE S_H2 (id INTEGER not NULL, PRIMARY KEY ( id ))" - "derby" | new EmbeddedDriver().connect(jdbcUrls.get("derby"), null)| "APP" | "CREATE TABLE S_DERBY (id INTEGER not NULL, PRIMARY KEY ( id ))" - "hsqldb" | new JDBCDriver().connect(jdbcUrls.get("hsqldb"), null) | "SA" | "CREATE TABLE PUBLIC.S_HSQLDB (id INTEGER not NULL, PRIMARY KEY ( id ))" - "h2" | cpDatasources.get("tomcat").get("h2").getConnection() | null | "CREATE TABLE S_H2_TOMCAT (id INTEGER not NULL, PRIMARY KEY ( id ))" - "derby" | cpDatasources.get("tomcat").get("derby").getConnection() | "APP" | "CREATE TABLE S_DERBY_TOMCAT (id INTEGER not NULL, PRIMARY KEY ( id ))" - "hsqldb" | cpDatasources.get("tomcat").get("hsqldb").getConnection()| "SA" | "CREATE TABLE PUBLIC.S_HSQLDB_TOMCAT (id INTEGER not NULL, PRIMARY KEY ( id ))" - "h2" | cpDatasources.get("hikari").get("h2").getConnection() | null | "CREATE TABLE S_H2_HIKARI (id INTEGER not NULL, PRIMARY KEY ( id ))" - "derby" | cpDatasources.get("hikari").get("derby").getConnection() | "APP" | "CREATE TABLE S_DERBY_HIKARI (id INTEGER not NULL, PRIMARY KEY ( id ))" - "hsqldb" | cpDatasources.get("hikari").get("hsqldb").getConnection()| "SA" | "CREATE TABLE PUBLIC.S_HSQLDB_HIKARI (id INTEGER not NULL, PRIMARY KEY ( id ))" - "h2" | cpDatasources.get("c3p0").get("h2").getConnection() | null | "CREATE TABLE S_H2_C3P0 (id INTEGER not NULL, PRIMARY KEY ( id ))" - "derby" | cpDatasources.get("c3p0").get("derby").getConnection() | "APP" | "CREATE TABLE S_DERBY_C3P0 (id INTEGER not NULL, PRIMARY KEY ( id ))" - "hsqldb" | cpDatasources.get("c3p0").get("hsqldb").getConnection() | "SA" | "CREATE TABLE PUBLIC.S_HSQLDB_C3P0 (id INTEGER not NULL, PRIMARY KEY ( id ))" + driver | connection | username | query + "h2" | new Driver().connect(jdbcUrls.get("h2"), null) | null | "CREATE TABLE S_H2 (id INTEGER not NULL, PRIMARY KEY ( id ))" + "derby" | new EmbeddedDriver().connect(jdbcUrls.get("derby"), null) | "APP" | "CREATE TABLE S_DERBY (id INTEGER not NULL, PRIMARY KEY ( id ))" + "hsqldb" | new JDBCDriver().connect(jdbcUrls.get("hsqldb"), null) | "SA" | "CREATE TABLE PUBLIC.S_HSQLDB (id INTEGER not NULL, PRIMARY KEY ( id ))" + "h2" | cpDatasources.get("tomcat").get("h2").getConnection() | null | "CREATE TABLE S_H2_TOMCAT (id INTEGER not NULL, PRIMARY KEY ( id ))" + "derby" | cpDatasources.get("tomcat").get("derby").getConnection() | "APP" | "CREATE TABLE S_DERBY_TOMCAT (id INTEGER not NULL, PRIMARY KEY ( id ))" + "hsqldb" | cpDatasources.get("tomcat").get("hsqldb").getConnection() | "SA" | "CREATE TABLE PUBLIC.S_HSQLDB_TOMCAT (id INTEGER not NULL, PRIMARY KEY ( id ))" + "h2" | cpDatasources.get("hikari").get("h2").getConnection() | null | "CREATE TABLE S_H2_HIKARI (id INTEGER not NULL, PRIMARY KEY ( id ))" + "derby" | cpDatasources.get("hikari").get("derby").getConnection() | "APP" | "CREATE TABLE S_DERBY_HIKARI (id INTEGER not NULL, PRIMARY KEY ( id ))" + "hsqldb" | cpDatasources.get("hikari").get("hsqldb").getConnection() | "SA" | "CREATE TABLE PUBLIC.S_HSQLDB_HIKARI (id INTEGER not NULL, PRIMARY KEY ( id ))" + "h2" | cpDatasources.get("c3p0").get("h2").getConnection() | null | "CREATE TABLE S_H2_C3P0 (id INTEGER not NULL, PRIMARY KEY ( id ))" + "derby" | cpDatasources.get("c3p0").get("derby").getConnection() | "APP" | "CREATE TABLE S_DERBY_C3P0 (id INTEGER not NULL, PRIMARY KEY ( id ))" + "hsqldb" | cpDatasources.get("c3p0").get("hsqldb").getConnection() | "SA" | "CREATE TABLE PUBLIC.S_HSQLDB_C3P0 (id INTEGER not NULL, PRIMARY KEY ( id ))" } @Unroll @@ -380,18 +380,18 @@ class JDBCInstrumentationTest extends AgentTestRunner { connection.close() where: - driver | connection | username | query - "h2" | new Driver().connect(jdbcUrls.get("h2"), null) | null | "CREATE TABLE PS_H2 (id INTEGER not NULL, PRIMARY KEY ( id ))" - "derby" | new EmbeddedDriver().connect(jdbcUrls.get("derby"), null)| "APP" | "CREATE TABLE PS_DERBY (id INTEGER not NULL, PRIMARY KEY ( id ))" - "h2" | cpDatasources.get("tomcat").get("h2").getConnection() | null | "CREATE TABLE PS_H2_TOMCAT (id INTEGER not NULL, PRIMARY KEY ( id ))" - "derby" | cpDatasources.get("tomcat").get("derby").getConnection() | "APP" | "CREATE TABLE PS_DERBY_TOMCAT (id INTEGER not NULL, PRIMARY KEY ( id ))" - "h2" | cpDatasources.get("hikari").get("h2").getConnection() | null | "CREATE TABLE PS_H2_HIKARI (id INTEGER not NULL, PRIMARY KEY ( id ))" - "derby" | cpDatasources.get("hikari").get("derby").getConnection() | "APP" | "CREATE TABLE PS_DERBY_HIKARI (id INTEGER not NULL, PRIMARY KEY ( id ))" - "h2" | cpDatasources.get("c3p0").get("h2").getConnection() | null | "CREATE TABLE PS_H2_C3P0 (id INTEGER not NULL, PRIMARY KEY ( id ))" - "derby" | cpDatasources.get("c3p0").get("derby").getConnection() | "APP" | "CREATE TABLE PS_DERBY_C3P0 (id INTEGER not NULL, PRIMARY KEY ( id ))" + driver | connection | username | query + "h2" | new Driver().connect(jdbcUrls.get("h2"), null) | null | "CREATE TABLE PS_H2 (id INTEGER not NULL, PRIMARY KEY ( id ))" + "derby" | new EmbeddedDriver().connect(jdbcUrls.get("derby"), null) | "APP" | "CREATE TABLE PS_DERBY (id INTEGER not NULL, PRIMARY KEY ( id ))" + "h2" | cpDatasources.get("tomcat").get("h2").getConnection() | null | "CREATE TABLE PS_H2_TOMCAT (id INTEGER not NULL, PRIMARY KEY ( id ))" + "derby" | cpDatasources.get("tomcat").get("derby").getConnection() | "APP" | "CREATE TABLE PS_DERBY_TOMCAT (id INTEGER not NULL, PRIMARY KEY ( id ))" + "h2" | cpDatasources.get("hikari").get("h2").getConnection() | null | "CREATE TABLE PS_H2_HIKARI (id INTEGER not NULL, PRIMARY KEY ( id ))" + "derby" | cpDatasources.get("hikari").get("derby").getConnection() | "APP" | "CREATE TABLE PS_DERBY_HIKARI (id INTEGER not NULL, PRIMARY KEY ( id ))" + "h2" | cpDatasources.get("c3p0").get("h2").getConnection() | null | "CREATE TABLE PS_H2_C3P0 (id INTEGER not NULL, PRIMARY KEY ( id ))" + "derby" | cpDatasources.get("c3p0").get("derby").getConnection() | "APP" | "CREATE TABLE PS_DERBY_C3P0 (id INTEGER not NULL, PRIMARY KEY ( id ))" } - + @Unroll def "connection constructor throwing then generating correct spans after recovery using #driver connection (prepare statement = #prepareStatement)"() { setup: @@ -454,11 +454,11 @@ class JDBCInstrumentationTest extends AgentTestRunner { } where: - prepareStatement | driver | driverClass | url | username | query - true | "h2" | new Driver() | "jdbc:h2:mem:" + dbName | null | "SELECT 3;" - true | "derby" | new EmbeddedDriver() | "jdbc:derby:memory:" + dbName + ";create=true" | "APP" | "SELECT 3 FROM SYSIBM.SYSDUMMY1" - false | "h2" | new Driver() | "jdbc:h2:mem:" + dbName | null | "SELECT 3;" - false | "derby" | new EmbeddedDriver() | "jdbc:derby:memory:" + dbName + ";create=true" | "APP" | "SELECT 3 FROM SYSIBM.SYSDUMMY1" + prepareStatement | driver | driverClass | url | username | query + true | "h2" | new Driver() | "jdbc:h2:mem:" + dbName | null | "SELECT 3;" + true | "derby" | new EmbeddedDriver() | "jdbc:derby:memory:" + dbName + ";create=true" | "APP" | "SELECT 3 FROM SYSIBM.SYSDUMMY1" + false | "h2" | new Driver() | "jdbc:h2:mem:" + dbName | null | "SELECT 3;" + false | "derby" | new EmbeddedDriver() | "jdbc:derby:memory:" + dbName + ";create=true" | "APP" | "SELECT 3 FROM SYSIBM.SYSDUMMY1" } @Unroll diff --git a/dd-java-agent/instrumentation/jms-1/src/main/java/datadog/trace/instrumentation/jms1/JMS1MessageConsumerInstrumentation.java b/dd-java-agent/instrumentation/jms-1/src/main/java/datadog/trace/instrumentation/jms1/JMS1MessageConsumerInstrumentation.java index 1b6d6ce48c..c9bc5896ac 100644 --- a/dd-java-agent/instrumentation/jms-1/src/main/java/datadog/trace/instrumentation/jms1/JMS1MessageConsumerInstrumentation.java +++ b/dd-java-agent/instrumentation/jms-1/src/main/java/datadog/trace/instrumentation/jms1/JMS1MessageConsumerInstrumentation.java @@ -11,7 +11,7 @@ import static net.bytebuddy.matcher.ElementMatchers.not; import static net.bytebuddy.matcher.ElementMatchers.takesArguments; 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.DDTags; import datadog.trace.instrumentation.jms.util.MessagePropertyTextMap; @@ -23,7 +23,9 @@ import io.opentracing.propagation.Format; import io.opentracing.tag.Tags; import io.opentracing.util.GlobalTracer; 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 javax.jms.Message; import javax.jms.MessageConsumer; diff --git a/dd-java-agent/instrumentation/jsp-2.3/src/main/java/datadog/trace/instrumentation/jsp/JSPInstrumentation.java b/dd-java-agent/instrumentation/jsp-2.3/src/main/java/datadog/trace/instrumentation/jsp/JSPInstrumentation.java index 4405b4f721..ed11deeb25 100644 --- a/dd-java-agent/instrumentation/jsp-2.3/src/main/java/datadog/trace/instrumentation/jsp/JSPInstrumentation.java +++ b/dd-java-agent/instrumentation/jsp-2.3/src/main/java/datadog/trace/instrumentation/jsp/JSPInstrumentation.java @@ -1,7 +1,12 @@ package datadog.trace.instrumentation.jsp; 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 datadog.trace.agent.tooling.Instrumenter; diff --git a/dd-java-agent/instrumentation/jsp-2.3/src/main/java/datadog/trace/instrumentation/jsp/JasperJSPCompilationContextInstrumentation.java b/dd-java-agent/instrumentation/jsp-2.3/src/main/java/datadog/trace/instrumentation/jsp/JasperJSPCompilationContextInstrumentation.java index e84af1ced5..9b3a80c4cf 100644 --- a/dd-java-agent/instrumentation/jsp-2.3/src/main/java/datadog/trace/instrumentation/jsp/JasperJSPCompilationContextInstrumentation.java +++ b/dd-java-agent/instrumentation/jsp-2.3/src/main/java/datadog/trace/instrumentation/jsp/JasperJSPCompilationContextInstrumentation.java @@ -2,7 +2,9 @@ package datadog.trace.instrumentation.jsp; import static datadog.trace.agent.tooling.ClassLoaderMatcher.classLoaderHasClasses; 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 datadog.trace.agent.tooling.Instrumenter; diff --git a/dd-java-agent/instrumentation/jsp-2.3/src/test/groovy/JSPInstrumentationBasicTests.groovy b/dd-java-agent/instrumentation/jsp-2.3/src/test/groovy/JSPInstrumentationBasicTests.groovy index 641e24eca0..e3d13b716f 100644 --- a/dd-java-agent/instrumentation/jsp-2.3/src/test/groovy/JSPInstrumentationBasicTests.groovy +++ b/dd-java-agent/instrumentation/jsp-2.3/src/test/groovy/JSPInstrumentationBasicTests.groovy @@ -144,10 +144,10 @@ class JSPInstrumentationBasicTests extends AgentTestRunner { res.close() where: - test | jspFileName | jspClassName | jspClassNamePrefix - "no java jsp" | "nojava.jsp" | "nojava_jsp" | "" - "basic loop jsp"|"common/loop.jsp" | "loop_jsp" | "common." - "invalid HTML markup"|"invalidMarkup.jsp" | "invalidMarkup_jsp" | "" + test | jspFileName | jspClassName | jspClassNamePrefix + "no java jsp" | "nojava.jsp" | "nojava_jsp" | "" + "basic loop jsp" | "common/loop.jsp" | "loop_jsp" | "common." + "invalid HTML markup" | "invalidMarkup.jsp" | "invalidMarkup_jsp" | "" } def "non-erroneous GET with query string"() { @@ -368,10 +368,10 @@ class JSPInstrumentationBasicTests extends AgentTestRunner { res.close() where: - test | jspFileName | jspClassName | exceptionClass | errorMessage - "java runtime error" | "runtimeError.jsp" | "runtimeError_jsp" | ArithmeticException | String - "invalid write" | "invalidWrite.jsp" | "invalidWrite_jsp" | StringIndexOutOfBoundsException | String - "missing query gives null" | "getQuery.jsp" | "getQuery_jsp" | NullPointerException | null + test | jspFileName | jspClassName | exceptionClass | errorMessage + "java runtime error" | "runtimeError.jsp" | "runtimeError_jsp" | ArithmeticException | String + "invalid write" | "invalidWrite.jsp" | "invalidWrite_jsp" | StringIndexOutOfBoundsException | String + "missing query gives null" | "getQuery.jsp" | "getQuery_jsp" | NullPointerException | null } def "non-erroneous include plain HTML GET"() { @@ -638,8 +638,8 @@ class JSPInstrumentationBasicTests extends AgentTestRunner { res.close() where: - test | jspFileName | jspClassName | jspClassNamePrefix - "normal" | "compileError.jsp" | "compileError_jsp" | "" - "forward"|"forwards/forwardWithCompileError.jsp" | "forwardWithCompileError_jsp" | "forwards." + test | jspFileName | jspClassName | jspClassNamePrefix + "normal" | "compileError.jsp" | "compileError_jsp" | "" + "forward" | "forwards/forwardWithCompileError.jsp" | "forwardWithCompileError_jsp" | "forwards." } } diff --git a/dd-java-agent/instrumentation/jsp-2.3/src/test/groovy/JSPInstrumentationForwardTests.groovy b/dd-java-agent/instrumentation/jsp-2.3/src/test/groovy/JSPInstrumentationForwardTests.groovy index a0193a374f..a2f85ba55e 100644 --- a/dd-java-agent/instrumentation/jsp-2.3/src/test/groovy/JSPInstrumentationForwardTests.groovy +++ b/dd-java-agent/instrumentation/jsp-2.3/src/test/groovy/JSPInstrumentationForwardTests.groovy @@ -4,7 +4,9 @@ import datadog.trace.agent.test.OkHttpUtils import datadog.trace.agent.test.TestUtils import datadog.trace.api.DDSpanTypes import io.netty.handler.codec.http.HttpResponseStatus -import okhttp3.* +import okhttp3.OkHttpClient +import okhttp3.Request +import okhttp3.Response import org.apache.catalina.Context import org.apache.catalina.startup.Tomcat import org.apache.jasper.JasperException @@ -174,9 +176,9 @@ class JSPInstrumentationForwardTests extends AgentTestRunner { res.close() where: - forwardTo | forwardFromFileName | forwardDestFileName | jspForwardFromClassName | jspForwardFromClassPrefix | jspForwardDestClassName | jspForwardDestClassPrefix - "no java jsp" | "forwards/forwardToNoJavaJsp.jsp" | "nojava.jsp" | "forwardToNoJavaJsp_jsp" | "forwards." | "nojava_jsp" | "" - "normal java jsp" | "forwards/forwardToSimpleJava.jsp" | "common/loop.jsp" | "forwardToSimpleJava_jsp" | "forwards." | "loop_jsp" | "common." + forwardTo | forwardFromFileName | forwardDestFileName | jspForwardFromClassName | jspForwardFromClassPrefix | jspForwardDestClassName | jspForwardDestClassPrefix + "no java jsp" | "forwards/forwardToNoJavaJsp.jsp" | "nojava.jsp" | "forwardToNoJavaJsp_jsp" | "forwards." | "nojava_jsp" | "" + "normal java jsp" | "forwards/forwardToSimpleJava.jsp" | "common/loop.jsp" | "forwardToSimpleJava_jsp" | "forwards." | "loop_jsp" | "common." } def "non-erroneous GET forward to plain HTML"() { diff --git a/dd-java-agent/instrumentation/kafka-streams-0.11/kafka-streams-0.11.gradle b/dd-java-agent/instrumentation/kafka-streams-0.11/kafka-streams-0.11.gradle index 7f6ce7ac44..dfb262f279 100644 --- a/dd-java-agent/instrumentation/kafka-streams-0.11/kafka-streams-0.11.gradle +++ b/dd-java-agent/instrumentation/kafka-streams-0.11/kafka-streams-0.11.gradle @@ -5,7 +5,7 @@ versionScan { module = "kafka-streams" versions = "[0.11.0.0,)" verifyPresent = [ - 'org.apache.kafka.streams.state.internals.OrderedBytes' : null + 'org.apache.kafka.streams.state.internals.OrderedBytes': null ] } diff --git a/dd-java-agent/instrumentation/lettuce-5/lettuce-5.gradle b/dd-java-agent/instrumentation/lettuce-5/lettuce-5.gradle index 8f4699b02a..64f9289417 100644 --- a/dd-java-agent/instrumentation/lettuce-5/lettuce-5.gradle +++ b/dd-java-agent/instrumentation/lettuce-5/lettuce-5.gradle @@ -51,7 +51,7 @@ dependencies { compile deps.opentracing annotationProcessor deps.autoservice implementation deps.autoservice - + testCompile project(':dd-java-agent:testing') testCompile group: 'com.github.kstyrc', name: 'embedded-redis', version: '0.6' diff --git a/dd-java-agent/instrumentation/lettuce-5/src/main/java/datadog/trace/instrumentation/lettuce/LettuceAsyncCommandsInstrumentation.java b/dd-java-agent/instrumentation/lettuce-5/src/main/java/datadog/trace/instrumentation/lettuce/LettuceAsyncCommandsInstrumentation.java index 4b97aa5090..b7618f3108 100644 --- a/dd-java-agent/instrumentation/lettuce-5/src/main/java/datadog/trace/instrumentation/lettuce/LettuceAsyncCommandsInstrumentation.java +++ b/dd-java-agent/instrumentation/lettuce-5/src/main/java/datadog/trace/instrumentation/lettuce/LettuceAsyncCommandsInstrumentation.java @@ -1,7 +1,9 @@ package datadog.trace.instrumentation.lettuce; 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 datadog.trace.agent.tooling.Instrumenter; @@ -38,7 +40,7 @@ public class LettuceAsyncCommandsInstrumentation extends Instrumenter.Default { @Override public Map transformers() { - Map transformers = new HashMap<>(); + final Map transformers = new HashMap<>(); transformers.put( isMethod() .and(named("dispatch")) diff --git a/dd-java-agent/instrumentation/lettuce-5/src/main/java/datadog/trace/instrumentation/lettuce/LettuceClientInstrumentation.java b/dd-java-agent/instrumentation/lettuce-5/src/main/java/datadog/trace/instrumentation/lettuce/LettuceClientInstrumentation.java index 93c6a00210..0f9316fce9 100644 --- a/dd-java-agent/instrumentation/lettuce-5/src/main/java/datadog/trace/instrumentation/lettuce/LettuceClientInstrumentation.java +++ b/dd-java-agent/instrumentation/lettuce-5/src/main/java/datadog/trace/instrumentation/lettuce/LettuceClientInstrumentation.java @@ -1,7 +1,13 @@ package datadog.trace.instrumentation.lettuce; 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 datadog.trace.agent.tooling.Instrumenter; @@ -42,7 +48,7 @@ public final class LettuceClientInstrumentation extends Instrumenter.Default { @Override public Map transformers() { - Map transformers = new HashMap<>(); + final Map transformers = new HashMap<>(); transformers.put( isMethod() .and(isPrivate()) diff --git a/dd-java-agent/instrumentation/lettuce-5/src/main/java/datadog/trace/instrumentation/lettuce/LettuceReactiveCommandsInstrumentation.java b/dd-java-agent/instrumentation/lettuce-5/src/main/java/datadog/trace/instrumentation/lettuce/LettuceReactiveCommandsInstrumentation.java index 395225e012..c65b573d4f 100644 --- a/dd-java-agent/instrumentation/lettuce-5/src/main/java/datadog/trace/instrumentation/lettuce/LettuceReactiveCommandsInstrumentation.java +++ b/dd-java-agent/instrumentation/lettuce-5/src/main/java/datadog/trace/instrumentation/lettuce/LettuceReactiveCommandsInstrumentation.java @@ -1,7 +1,12 @@ package datadog.trace.instrumentation.lettuce; 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 datadog.trace.agent.tooling.Instrumenter; @@ -43,7 +48,7 @@ public class LettuceReactiveCommandsInstrumentation extends Instrumenter.Default @Override public Map transformers() { - Map transformers = new HashMap<>(); + final Map transformers = new HashMap<>(); transformers.put( isMethod() .and(named("createMono")) diff --git a/dd-java-agent/instrumentation/lettuce-5/src/main/java8/datadog/trace/instrumentation/lettuce/LettuceInstrumentationUtil.java b/dd-java-agent/instrumentation/lettuce-5/src/main/java8/datadog/trace/instrumentation/lettuce/LettuceInstrumentationUtil.java index d1da8d072f..4e6b83b9de 100644 --- a/dd-java-agent/instrumentation/lettuce-5/src/main/java8/datadog/trace/instrumentation/lettuce/LettuceInstrumentationUtil.java +++ b/dd-java-agent/instrumentation/lettuce-5/src/main/java8/datadog/trace/instrumentation/lettuce/LettuceInstrumentationUtil.java @@ -1,7 +1,9 @@ package datadog.trace.instrumentation.lettuce; import io.lettuce.core.protocol.RedisCommand; -import java.util.*; +import java.util.Arrays; +import java.util.HashSet; +import java.util.Set; public class LettuceInstrumentationUtil { @@ -30,7 +32,7 @@ public class LettuceInstrumentationUtil { * @param commandName a redis command, without any prefixes * @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); } @@ -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, * otherwise, the original command is returned. */ - public static String getCommandResourceName(String actualCommandName) { + public static String getCommandResourceName(final String actualCommandName) { if (agentCrashingCommands.contains(actualCommandName)) { return AGENT_CRASHING_COMMAND_PREFIX + actualCommandName; } @@ -64,7 +66,7 @@ public class LettuceInstrumentationUtil { * @param command the lettuce RedisCommand object * @return the redis command as a string */ - public static String getCommandName(RedisCommand command) { + public static String getCommandName(final RedisCommand command) { String commandName = "Redis Command"; if (command != null) { /* diff --git a/dd-java-agent/instrumentation/lettuce-5/src/test/groovy/LettuceAsyncClientTest.groovy b/dd-java-agent/instrumentation/lettuce-5/src/test/groovy/LettuceAsyncClientTest.groovy index 0f964bda02..4acc60e13d 100644 --- a/dd-java-agent/instrumentation/lettuce-5/src/test/groovy/LettuceAsyncClientTest.groovy +++ b/dd-java-agent/instrumentation/lettuce-5/src/test/groovy/LettuceAsyncClientTest.groovy @@ -50,9 +50,9 @@ class LettuceAsyncClientTest extends AgentTestRunner { @Shared Map testHashMap = [ - firstname: "John", - lastname: "Doe", - age: "53" + firstname: "John", + lastname : "Doe", + age : "53" ] RedisClient redisClient @@ -254,7 +254,7 @@ class LettuceAsyncClientTest extends AgentTestRunner { BiFunction firstStage = new BiFunction() { @Override String apply(String res, Throwable throwable) { - conds.evaluate{ + conds.evaluate { assert res == null assert throwable == null } @@ -264,7 +264,7 @@ class LettuceAsyncClientTest extends AgentTestRunner { Function secondStage = new Function() { @Override Object apply(String input) { - conds.evaluate{ + conds.evaluate { assert input == successStr } return null @@ -304,7 +304,7 @@ class LettuceAsyncClientTest extends AgentTestRunner { BiConsumer biConsumer = new BiConsumer() { @Override void accept(String keyRetrieved, Throwable throwable) { - conds.evaluate{ + conds.evaluate { assert keyRetrieved != null } } @@ -419,7 +419,7 @@ class LettuceAsyncClientTest extends AgentTestRunner { def conds = new AsyncConditions() RedisFuture redisFuture = asyncCommands.del("key1", "key2") boolean completedExceptionally = ((AsyncCommand) redisFuture).completeExceptionally(new IllegalStateException("TestException")) - redisFuture.exceptionally ({ + redisFuture.exceptionally({ throwable -> conds.evaluate { assert throwable != null @@ -466,10 +466,11 @@ class LettuceAsyncClientTest extends AgentTestRunner { def conds = new AsyncConditions() RedisFuture redisFuture = asyncCommands.sadd("SKEY", "1", "2") redisFuture.whenCompleteAsync({ - res, throwable -> conds.evaluate { - assert throwable != null - assert throwable instanceof CancellationException - } + res, throwable -> + conds.evaluate { + assert throwable != null + assert throwable instanceof CancellationException + } }) when: diff --git a/dd-java-agent/instrumentation/lettuce-5/src/test/groovy/LettuceReactiveClientTest.groovy b/dd-java-agent/instrumentation/lettuce-5/src/test/groovy/LettuceReactiveClientTest.groovy index 45f019f83e..cb1ff767b3 100644 --- a/dd-java-agent/instrumentation/lettuce-5/src/test/groovy/LettuceReactiveClientTest.groovy +++ b/dd-java-agent/instrumentation/lettuce-5/src/test/groovy/LettuceReactiveClientTest.groovy @@ -1,6 +1,7 @@ import datadog.trace.agent.test.AgentTestRunner import datadog.trace.agent.test.TestUtils -import io.lettuce.core.* +import io.lettuce.core.ClientOptions +import io.lettuce.core.RedisClient import io.lettuce.core.api.StatefulConnection import io.lettuce.core.api.reactive.RedisReactiveCommands import io.lettuce.core.api.sync.RedisCommands @@ -36,9 +37,9 @@ class LettuceReactiveClientTest extends AgentTestRunner { embeddedDbUri = "redis://" + dbAddr redisServer = RedisServer.builder() - // bind to localhost to avoid firewall popup + // bind to localhost to avoid firewall popup .setting("bind " + HOST) - // set max memory to avoid problems in CI + // set max memory to avoid problems in CI .setting("maxmemory 128M") .port(port).build() } @@ -109,7 +110,7 @@ class LettuceReactiveClientTest extends AgentTestRunner { def conds = new AsyncConditions() when: - reactiveCommands.get("TESTKEY").subscribe { res -> conds.evaluate { assert res == "TESTVAL"} } + reactiveCommands.get("TESTKEY").subscribe { res -> conds.evaluate { assert res == "TESTVAL" } } then: conds.await() @@ -143,9 +144,10 @@ class LettuceReactiveClientTest extends AgentTestRunner { when: reactiveCommands.get("NON_EXISTENT_KEY").defaultIfEmpty(defaultVal).subscribe { - res -> conds.evaluate { - assert res == defaultVal - } + res -> + conds.evaluate { + assert res == defaultVal + } } then: @@ -178,9 +180,10 @@ class LettuceReactiveClientTest extends AgentTestRunner { when: reactiveCommands.randomkey().subscribe { - res -> conds.evaluate { - assert res == "TESTKEY" - } + res -> + conds.evaluate { + assert res == "TESTKEY" + } } then: diff --git a/dd-java-agent/instrumentation/lettuce-5/src/test/groovy/LettuceSyncClientTest.groovy b/dd-java-agent/instrumentation/lettuce-5/src/test/groovy/LettuceSyncClientTest.groovy index f2dadabf18..694ef494f3 100644 --- a/dd-java-agent/instrumentation/lettuce-5/src/test/groovy/LettuceSyncClientTest.groovy +++ b/dd-java-agent/instrumentation/lettuce-5/src/test/groovy/LettuceSyncClientTest.groovy @@ -37,9 +37,9 @@ class LettuceSyncClientTest extends AgentTestRunner { @Shared Map testHashMap = [ - firstname: "John", - lastname: "Doe", - age: "53" + firstname: "John", + lastname : "Doe", + age : "53" ] RedisClient redisClient @@ -55,9 +55,9 @@ class LettuceSyncClientTest extends AgentTestRunner { embeddedDbUri = "redis://" + dbAddr redisServer = RedisServer.builder() - // bind to localhost to avoid firewall popup + // bind to localhost to avoid firewall popup .setting("bind " + HOST) - // set max memory to avoid problems in CI + // set max memory to avoid problems in CI .setting("maxmemory 128M") .port(port).build() } diff --git a/dd-java-agent/instrumentation/mongo-async-3.3/mongo-async-3.3.gradle b/dd-java-agent/instrumentation/mongo-async-3.3/mongo-async-3.3.gradle index 3970abbb98..364da95300 100644 --- a/dd-java-agent/instrumentation/mongo-async-3.3/mongo-async-3.3.gradle +++ b/dd-java-agent/instrumentation/mongo-async-3.3/mongo-async-3.3.gradle @@ -6,7 +6,7 @@ versionScan { scanMethods = true versions = "[3.3,)" verifyPresent = [ - 'com.mongodb.async.client.MongoClientSettings$Builder': 'addCommandListener' + 'com.mongodb.async.client.MongoClientSettings$Builder': 'addCommandListener' ] } diff --git a/dd-java-agent/instrumentation/play-2.4/src/latestDepTest/groovy/Play26Test.groovy b/dd-java-agent/instrumentation/play-2.4/src/latestDepTest/groovy/Play26Test.groovy index 3247ea3be0..29a72fdb0c 100644 --- a/dd-java-agent/instrumentation/play-2.4/src/latestDepTest/groovy/Play26Test.groovy +++ b/dd-java-agent/instrumentation/play-2.4/src/latestDepTest/groovy/Play26Test.groovy @@ -28,7 +28,7 @@ class Play26Test extends AgentTestRunner { testServer.stop() } - def "request traces" () { + def "request traces"() { setup: OkHttpClient client = new OkHttpClient.Builder().build() def request = new Request.Builder() @@ -83,7 +83,7 @@ class Play26Test extends AgentTestRunner { } } - def "5xx errors trace" () { + def "5xx errors trace"() { setup: OkHttpClient client = new OkHttpClient.Builder().build() def request = new Request.Builder() @@ -132,7 +132,7 @@ class Play26Test extends AgentTestRunner { } } - def "error thrown in request" () { + def "error thrown in request"() { setup: OkHttpClient client = new OkHttpClient.Builder().build() def request = new Request.Builder() @@ -185,7 +185,7 @@ class Play26Test extends AgentTestRunner { } } - def "4xx errors trace" () { + def "4xx errors trace"() { setup: OkHttpClient client = new OkHttpClient.Builder().build() def request = new Request.Builder() diff --git a/dd-java-agent/instrumentation/play-2.4/src/latestDepTest/scala/Play26TestUtils.scala b/dd-java-agent/instrumentation/play-2.4/src/latestDepTest/scala/Play26TestUtils.scala index 2d9852df67..45293a42ce 100644 --- a/dd-java-agent/instrumentation/play-2.4/src/latestDepTest/scala/Play26TestUtils.scala +++ b/dd-java-agent/instrumentation/play-2.4/src/latestDepTest/scala/Play26TestUtils.scala @@ -1,21 +1,19 @@ -import play.api.mvc.Action -import play.api.routing.{HandlerDef, Router} -import play.api.mvc._ -import play.api.routing.sird._ import java.lang.reflect.Field import datadog.trace.api.Trace -import play.api.libs.typedmap.TypedKey import play.api.mvc.request.RequestAttrKey +import play.api.mvc.{Action, _} +import play.api.routing.sird._ +import play.api.routing.{HandlerDef, Router} -import scala.concurrent.{Await, Future} import scala.concurrent.duration._ +import scala.concurrent.{Await, Future} object Play26TestUtils { def buildTestApp(): play.Application = { // build play.api.Application with desired setting and pass into play.Application for testing - val apiApp :play.api.Application = new play.api.inject.guice.GuiceApplicationBuilder() + val apiApp: play.api.Application = new play.api.inject.guice.GuiceApplicationBuilder() .requireAtInjectOnConstructors(true) .router( Router.from { diff --git a/dd-java-agent/instrumentation/play-2.4/src/main/java/datadog/trace/instrumentation/play/PlayInstrumentation.java b/dd-java-agent/instrumentation/play-2.4/src/main/java/datadog/trace/instrumentation/play/PlayInstrumentation.java index 35c6a35b43..4ae61e5335 100644 --- a/dd-java-agent/instrumentation/play-2.4/src/main/java/datadog/trace/instrumentation/play/PlayInstrumentation.java +++ b/dd-java-agent/instrumentation/play-2.4/src/main/java/datadog/trace/instrumentation/play/PlayInstrumentation.java @@ -3,11 +3,14 @@ package datadog.trace.instrumentation.play; import static datadog.trace.agent.tooling.ClassLoaderMatcher.classLoaderHasClassWithMethod; import static datadog.trace.agent.tooling.ClassLoaderMatcher.classLoaderHasClasses; 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 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.DDTags; import datadog.trace.context.TraceScope; @@ -18,7 +21,10 @@ import io.opentracing.propagation.Format; import io.opentracing.propagation.TextMap; import io.opentracing.tag.Tags; 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 net.bytebuddy.asm.Advice; import net.bytebuddy.matcher.ElementMatcher; @@ -66,7 +72,7 @@ public final class PlayInstrumentation extends Instrumenter.Default { @Override public Map transformers() { - Map transformers = new HashMap<>(); + final Map transformers = new HashMap<>(); transformers.put( named("apply") .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 { private final Request request; - public PlayHeaders(Request request) { + public PlayHeaders(final Request request) { this.request = request; } @@ -166,7 +172,7 @@ public final class PlayInstrumentation extends Instrumenter.Default { } @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"); } } @@ -174,18 +180,18 @@ public final class PlayInstrumentation extends Instrumenter.Default { public static class RequestError extends JavaPartialFunction { private final Span span; - public RequestError(Span span) { + public RequestError(final Span span) { this.span = span; } @Override - public Object apply(Throwable t, boolean isCheck) throws Exception { + public Object apply(final Throwable t, final boolean isCheck) throws Exception { try { if (GlobalTracer.get().scopeManager().active() instanceof TraceScope) { ((TraceScope) GlobalTracer.get().scopeManager().active()).setAsyncPropagation(false); } onError(span, t); - } catch (Throwable t2) { + } catch (final Throwable t2) { LoggerFactory.getLogger(RequestCallback.class).debug("error in play instrumentation", t); } span.finish(); @@ -203,18 +209,18 @@ public final class PlayInstrumentation extends Instrumenter.Default { public static class RequestCallback extends scala.runtime.AbstractFunction1 { private final Span span; - public RequestCallback(Span span) { + public RequestCallback(final Span span) { this.span = span; } @Override - public Result apply(Result result) { + public Result apply(final Result result) { if (GlobalTracer.get().scopeManager().active() instanceof TraceScope) { ((TraceScope) GlobalTracer.get().scopeManager().active()).setAsyncPropagation(false); } try { Tags.HTTP_STATUS.set(span, result.header().status()); - } catch (Throwable t) { + } catch (final Throwable t) { log.debug("error in play instrumentation", t); } span.finish(); diff --git a/dd-java-agent/instrumentation/play-2.4/src/test/groovy/Play24Test.groovy b/dd-java-agent/instrumentation/play-2.4/src/test/groovy/Play24Test.groovy index 4e2eb5c923..600fdf1294 100644 --- a/dd-java-agent/instrumentation/play-2.4/src/test/groovy/Play24Test.groovy +++ b/dd-java-agent/instrumentation/play-2.4/src/test/groovy/Play24Test.groovy @@ -23,7 +23,7 @@ class Play24Test extends AgentTestRunner { testServer.stop() } - def "request traces" () { + def "request traces"() { setup: OkHttpClient client = new OkHttpClient.Builder().build() def request = new Request.Builder() @@ -59,7 +59,7 @@ class Play24Test extends AgentTestRunner { root.context().tags["component"] == "play-action" } - def "5xx errors trace" () { + def "5xx errors trace"() { setup: OkHttpClient client = new OkHttpClient.Builder().build() def request = new Request.Builder() @@ -86,7 +86,7 @@ class Play24Test extends AgentTestRunner { root.context().tags["component"] == "play-action" } - def "error thrown in request" () { + def "error thrown in request"() { setup: OkHttpClient client = new OkHttpClient.Builder().build() def request = new Request.Builder() @@ -116,7 +116,7 @@ class Play24Test extends AgentTestRunner { root.context().tags["component"] == "play-action" } - def "4xx errors trace" () { + def "4xx errors trace"() { setup: OkHttpClient client = new OkHttpClient.Builder().build() def request = new Request.Builder() diff --git a/dd-java-agent/instrumentation/play-2.4/src/test/scala/Play24TestUtils.scala b/dd-java-agent/instrumentation/play-2.4/src/test/scala/Play24TestUtils.scala index 1a00476917..4242651138 100644 --- a/dd-java-agent/instrumentation/play-2.4/src/test/scala/Play24TestUtils.scala +++ b/dd-java-agent/instrumentation/play-2.4/src/test/scala/Play24TestUtils.scala @@ -1,46 +1,44 @@ import java.lang.reflect.Field -import play.api.mvc.Action -import play.api.routing.Router -import play.api.mvc._ -import play.api.routing.sird._ import datadog.trace.api.Trace +import play.api.inject.bind +import play.api.mvc.{Action, _} +import play.api.routing.Router +import play.api.routing.sird._ import play.inject.DelegateInjector -import scala.concurrent.{Await, Future} -import scala.concurrent.duration._ -import play.api.inject.bind - import scala.concurrent.ExecutionContext.Implicits.global +import scala.concurrent.duration._ +import scala.concurrent.{Await, Future} object Play24TestUtils { def buildTestApp(): play.Application = { // build play.api.Application with desired setting and pass into play.Application for testing - val apiApp :play.api.Application = new play.api.inject.guice.GuiceApplicationBuilder() - .overrides(bind[Router].toInstance(Router.from { - case GET(p"/helloplay/$from") => Action { req: RequestHeader => - HandlerSetter.setHandler(req, "/helloplay/:from") - val f: Future[String] = Future[String] { - TracedWork.doWork() - from - } - Results.Ok(s"hello " + Await.result(f, 5 seconds)) + val apiApp: play.api.Application = new play.api.inject.guice.GuiceApplicationBuilder() + .overrides(bind[Router].toInstance(Router.from { + case GET(p"/helloplay/$from") => Action { req: RequestHeader => + HandlerSetter.setHandler(req, "/helloplay/:from") + val f: Future[String] = Future[String] { + TracedWork.doWork() + from } - case GET(p"/make-error") => Action { req: RequestHeader => - HandlerSetter.setHandler(req, "/make-error") - Results.InternalServerError("Really sorry...") + Results.Ok(s"hello " + Await.result(f, 5 seconds)) + } + case GET(p"/make-error") => Action { req: RequestHeader => + HandlerSetter.setHandler(req, "/make-error") + Results.InternalServerError("Really sorry...") + } + case GET(p"/exception") => Action { req: RequestHeader => + HandlerSetter.setHandler(req, "/exception") + if (System.currentTimeMillis() > 0) { + throw new RuntimeException("oh no") } - case GET(p"/exception") => Action { req: RequestHeader => - HandlerSetter.setHandler(req, "/exception") - if (System.currentTimeMillis() > 0) { - throw new RuntimeException("oh no") - } - Results.Ok("hello") - } - case _ => Action { - Results.NotFound("Sorry..") - } - })) + Results.Ok("hello") + } + case _ => Action { + Results.NotFound("Sorry..") + } + })) .build() @@ -64,7 +62,7 @@ object HandlerSetter { f.setAccessible(false) } - private def getField(o: Object, fieldName :String): Object = { + private def getField(o: Object, fieldName: String): Object = { val f: Field = o.getClass().getDeclaredField(fieldName) f.setAccessible(true) val result: Object = f.get(o) diff --git a/dd-java-agent/instrumentation/ratpack-1.4/src/main/java/datadog/trace/instrumentation/ratpack/RatpackInstrumentation.java b/dd-java-agent/instrumentation/ratpack-1.4/src/main/java/datadog/trace/instrumentation/ratpack/RatpackInstrumentation.java index a536a86c45..da4c15bc74 100644 --- a/dd-java-agent/instrumentation/ratpack-1.4/src/main/java/datadog/trace/instrumentation/ratpack/RatpackInstrumentation.java +++ b/dd-java-agent/instrumentation/ratpack-1.4/src/main/java/datadog/trace/instrumentation/ratpack/RatpackInstrumentation.java @@ -1,7 +1,14 @@ package datadog.trace.instrumentation.ratpack; 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 datadog.trace.agent.tooling.Instrumenter; @@ -63,7 +70,7 @@ public final class RatpackInstrumentation extends Instrumenter.Default { @Override public Map transformers() { - Map transformers = new HashMap<>(); + final Map transformers = new HashMap<>(); transformers.put( isMethod().and(isStatic()).and(named("buildBaseRegistry")), RatpackServerAdvice.RatpackServerRegistryAdvice.class.getName()); @@ -106,7 +113,7 @@ public final class RatpackInstrumentation extends Instrumenter.Default { @Override public Map transformers() { - Map transformers = new HashMap<>(); + final Map transformers = new HashMap<>(); transformers.put( named("register").and(takesArguments(ACTION_TYPE_DESCRIPTION)), RatpackServerAdvice.ExecStarterAdvice.class.getName()); @@ -148,7 +155,7 @@ public final class RatpackInstrumentation extends Instrumenter.Default { @Override public Map transformers() { - Map transformers = new HashMap<>(); + final Map transformers = new HashMap<>(); transformers.put( named("fork").and(returns(named("ratpack.exec.ExecStarter"))), RatpackServerAdvice.ExecutionAdvice.class.getName()); diff --git a/dd-java-agent/instrumentation/ratpack-1.4/src/main/java8/datadog/trace/instrumentation/ratpack/impl/RatpackRequestExtractAdapter.java b/dd-java-agent/instrumentation/ratpack-1.4/src/main/java8/datadog/trace/instrumentation/ratpack/impl/RatpackRequestExtractAdapter.java index 2e1fb6d6a1..f99bc4b040 100644 --- a/dd-java-agent/instrumentation/ratpack-1.4/src/main/java8/datadog/trace/instrumentation/ratpack/impl/RatpackRequestExtractAdapter.java +++ b/dd-java-agent/instrumentation/ratpack-1.4/src/main/java8/datadog/trace/instrumentation/ratpack/impl/RatpackRequestExtractAdapter.java @@ -1,7 +1,8 @@ package datadog.trace.instrumentation.ratpack.impl; import io.opentracing.propagation.TextMap; -import java.util.*; +import java.util.Iterator; +import java.util.Map; import ratpack.http.Request; import ratpack.util.MultiValueMap; @@ -12,8 +13,8 @@ import ratpack.util.MultiValueMap; public class RatpackRequestExtractAdapter implements TextMap { private final MultiValueMap headers; - RatpackRequestExtractAdapter(Request request) { - this.headers = request.getHeaders().asMultiValueMap(); + RatpackRequestExtractAdapter(final Request request) { + headers = request.getHeaders().asMultiValueMap(); } @Override @@ -22,7 +23,7 @@ public class RatpackRequestExtractAdapter implements TextMap { } @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()!"); } } diff --git a/dd-java-agent/instrumentation/spring-web/spring-web.gradle b/dd-java-agent/instrumentation/spring-web/spring-web.gradle index 8eec6895a4..288a205b0c 100644 --- a/dd-java-agent/instrumentation/spring-web/spring-web.gradle +++ b/dd-java-agent/instrumentation/spring-web/spring-web.gradle @@ -33,7 +33,7 @@ dependencies { testCompile group: 'javax.validation', name: 'validation-api', version: '1.1.0.Final' testCompile group: 'org.hibernate', name: 'hibernate-validator', version: '5.4.2.Final' - + testCompile group: 'org.spockframework', name: 'spock-spring', version: '1.1-groovy-2.4' testCompile group: 'org.springframework', name: 'spring-web', version: '4.3.14.RELEASE' diff --git a/dd-java-agent/instrumentation/spymemcached-2.12/spymemcached-2.12.gradle b/dd-java-agent/instrumentation/spymemcached-2.12/spymemcached-2.12.gradle index d2e4677843..f615c4eac8 100644 --- a/dd-java-agent/instrumentation/spymemcached-2.12/spymemcached-2.12.gradle +++ b/dd-java-agent/instrumentation/spymemcached-2.12/spymemcached-2.12.gradle @@ -33,8 +33,8 @@ dependencies { testCompile project(':dd-java-agent:testing') testCompile group: 'net.spy', name: 'spymemcached', version: '2.12.0' - testCompile group: 'org.spockframework', name:'spock-core', version:'1.1-groovy-2.4' - testCompile group: 'org.testcontainers', name:'testcontainers', version:'1.7.3' + testCompile group: 'org.spockframework', name: 'spock-core', version: '1.1-groovy-2.4' + testCompile group: 'org.testcontainers', name: 'testcontainers', version: '1.7.3' } configurations.latestDepTestCompile { diff --git a/dd-java-agent/instrumentation/spymemcached-2.12/src/main/java/datadog/trace/instrumentation/spymemcached/BulkGetCompletionListener.java b/dd-java-agent/instrumentation/spymemcached-2.12/src/main/java/datadog/trace/instrumentation/spymemcached/BulkGetCompletionListener.java index 34f89c2b34..178dacaef6 100644 --- a/dd-java-agent/instrumentation/spymemcached-2.12/src/main/java/datadog/trace/instrumentation/spymemcached/BulkGetCompletionListener.java +++ b/dd-java-agent/instrumentation/spymemcached-2.12/src/main/java/datadog/trace/instrumentation/spymemcached/BulkGetCompletionListener.java @@ -3,21 +3,21 @@ package datadog.trace.instrumentation.spymemcached; import io.opentracing.Span; import io.opentracing.Tracer; import java.util.concurrent.ExecutionException; -import net.spy.memcached.internal.*; +import net.spy.memcached.internal.BulkGetFuture; public class BulkGetCompletionListener extends CompletionListener> implements net.spy.memcached.internal.BulkGetCompletionListener { - public BulkGetCompletionListener(Tracer tracer, String methodName) { + public BulkGetCompletionListener(final Tracer tracer, final String methodName) { super(tracer, methodName, true); } @Override - public void onComplete(BulkGetFuture future) { + public void onComplete(final BulkGetFuture future) { closeAsyncSpan(future); } @Override - protected void processResult(Span span, BulkGetFuture future) + protected void processResult(final Span span, final BulkGetFuture future) throws ExecutionException, InterruptedException { /* Note: for now we do not have an affective way of representing results of bulk operations, diff --git a/dd-java-agent/instrumentation/spymemcached-2.12/src/main/java/datadog/trace/instrumentation/spymemcached/MemcachedClientInstrumentation.java b/dd-java-agent/instrumentation/spymemcached-2.12/src/main/java/datadog/trace/instrumentation/spymemcached/MemcachedClientInstrumentation.java index 2fac128f7d..6737bbb4e0 100644 --- a/dd-java-agent/instrumentation/spymemcached-2.12/src/main/java/datadog/trace/instrumentation/spymemcached/MemcachedClientInstrumentation.java +++ b/dd-java-agent/instrumentation/spymemcached-2.12/src/main/java/datadog/trace/instrumentation/spymemcached/MemcachedClientInstrumentation.java @@ -1,7 +1,11 @@ package datadog.trace.instrumentation.spymemcached; 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 datadog.trace.agent.tooling.Instrumenter; @@ -55,7 +59,7 @@ public final class MemcachedClientInstrumentation extends Instrumenter.Default { @Override public Map transformers() { - Map transformers = new HashMap<>(); + final Map transformers = new HashMap<>(); transformers.put( isMethod() .and(isPublic()) @@ -96,7 +100,7 @@ public final class MemcachedClientInstrumentation extends Instrumenter.Default { @Advice.Origin final Method method, @Advice.Return final OperationFuture future) { if (shouldInjectListener && future != null) { - OperationCompletionListener listener = + final OperationCompletionListener listener = new OperationCompletionListener(GlobalTracer.get(), method.getName()); future.addListener(listener); CallDepthThreadLocalMap.reset(MemcachedClient.class); @@ -117,7 +121,7 @@ public final class MemcachedClientInstrumentation extends Instrumenter.Default { @Advice.Origin final Method method, @Advice.Return final GetFuture future) { if (shouldInjectListener && future != null) { - GetCompletionListener listener = + final GetCompletionListener listener = new GetCompletionListener(GlobalTracer.get(), method.getName()); future.addListener(listener); CallDepthThreadLocalMap.reset(MemcachedClient.class); @@ -138,7 +142,7 @@ public final class MemcachedClientInstrumentation extends Instrumenter.Default { @Advice.Origin final Method method, @Advice.Return final BulkFuture future) { if (shouldInjectListener && future != null) { - BulkGetCompletionListener listener = + final BulkGetCompletionListener listener = new BulkGetCompletionListener(GlobalTracer.get(), method.getName()); future.addListener(listener); CallDepthThreadLocalMap.reset(MemcachedClient.class); diff --git a/dd-java-agent/instrumentation/spymemcached-2.12/src/test/groovy/datadog/trace/instrumentation/spymemcached/SpymemcachedTest.groovy b/dd-java-agent/instrumentation/spymemcached-2.12/src/test/groovy/datadog/trace/instrumentation/spymemcached/SpymemcachedTest.groovy index dfc50be1c5..e7e58f3ca1 100644 --- a/dd-java-agent/instrumentation/spymemcached-2.12/src/test/groovy/datadog/trace/instrumentation/spymemcached/SpymemcachedTest.groovy +++ b/dd-java-agent/instrumentation/spymemcached-2.12/src/test/groovy/datadog/trace/instrumentation/spymemcached/SpymemcachedTest.groovy @@ -22,11 +22,11 @@ import java.util.concurrent.BlockingQueue import java.util.concurrent.ExecutorService import java.util.concurrent.locks.ReentrantLock -import static datadog.trace.agent.test.ListWriterAssert.assertTraces import static CompletionListener.COMPONENT_NAME import static CompletionListener.OPERATION_NAME import static CompletionListener.SERVICE_NAME import static CompletionListener.SPAN_TYPE +import static datadog.trace.agent.test.ListWriterAssert.assertTraces import static datadog.trace.agent.test.TestUtils.runUnderTrace import static net.spy.memcached.ConnectionFactoryBuilder.Protocol.BINARY @@ -124,16 +124,16 @@ class SpymemcachedTest extends AgentTestRunner { // Add some keys to test on later: def valuesToSet = [ - "test-get": "get test", - "test-get-2": "get test 2", - "test-append": "append test", + "test-get" : "get test", + "test-get-2" : "get test 2", + "test-append" : "append test", "test-prepend": "prepend test", - "test-delete": "delete test", + "test-delete" : "delete test", "test-replace": "replace test", - "test-touch": "touch test", - "test-cas": "cas test", - "test-decr": "200", - "test-incr": "100" + "test-touch" : "touch test", + "test-cas" : "cas test", + "test-decr" : "200", + "test-incr" : "100" ] runUnderTrace("setup") { valuesToSet.each { k, v -> assert memcached.set(key(k), expiration, v).get() } @@ -152,7 +152,7 @@ class SpymemcachedTest extends AgentTestRunner { assertTraces(TEST_WRITER, 1) { trace(0, 2) { getParentSpan(it, 0) - getSpan(it, 1, "get", null,"hit") + getSpan(it, 1, "get", null, "hit") } } } @@ -167,7 +167,7 @@ class SpymemcachedTest extends AgentTestRunner { assertTraces(TEST_WRITER, 1) { trace(0, 2) { getParentSpan(it, 0) - getSpan(it, 1, "get", null,"miss") + getSpan(it, 1, "get", null, "miss") } } } @@ -223,7 +223,7 @@ class SpymemcachedTest extends AgentTestRunner { assertTraces(TEST_WRITER, 1) { trace(0, 2) { getParentSpan(it, 0) - getSpan(it, 1, "getBulk", null,null) + getSpan(it, 1, "getBulk", null, null) } } } @@ -271,7 +271,7 @@ class SpymemcachedTest extends AgentTestRunner { assertTraces(TEST_WRITER, 1) { trace(0, 3) { getParentSpan(it, 0) - getSpan(it, 1, "get", null,"hit") + getSpan(it, 1, "get", null, "hit") getSpan(it, 2, "add") } } @@ -305,7 +305,7 @@ class SpymemcachedTest extends AgentTestRunner { assertTraces(TEST_WRITER, 1) { trace(0, 3) { getParentSpan(it, 0) - getSpan(it, 1, "get", null,"miss") + getSpan(it, 1, "get", null, "miss") getSpan(it, 2, "delete") } } @@ -337,7 +337,7 @@ class SpymemcachedTest extends AgentTestRunner { assertTraces(TEST_WRITER, 1) { trace(0, 3) { getParentSpan(it, 0) - getSpan(it, 1, "get", null,"hit") + getSpan(it, 1, "get", null, "hit") getSpan(it, 2, "replace") } } @@ -370,7 +370,7 @@ class SpymemcachedTest extends AgentTestRunner { assertTraces(TEST_WRITER, 1) { trace(0, 4) { getParentSpan(it, 0) - getSpan(it, 1, "get", null,"hit") + getSpan(it, 1, "get", null, "hit") getSpan(it, 2, "append") getSpan(it, 3, "gets") } @@ -389,7 +389,7 @@ class SpymemcachedTest extends AgentTestRunner { assertTraces(TEST_WRITER, 1) { trace(0, 4) { getParentSpan(it, 0) - getSpan(it, 1, "get", null,"hit") + getSpan(it, 1, "get", null, "hit") getSpan(it, 2, "prepend") getSpan(it, 3, "gets") } @@ -503,7 +503,7 @@ class SpymemcachedTest extends AgentTestRunner { assertTraces(TEST_WRITER, 1) { trace(0, 3) { getParentSpan(it, 0) - getSpan(it, 1, "get", null,"hit") + getSpan(it, 1, "get", null, "hit") getSpan(it, 2, "decr") } } @@ -552,7 +552,7 @@ class SpymemcachedTest extends AgentTestRunner { assertTraces(TEST_WRITER, 1) { trace(0, 3) { getParentSpan(it, 0) - getSpan(it, 1, "get", null,"hit") + getSpan(it, 1, "get", null, "hit") getSpan(it, 2, "incr") } } @@ -590,7 +590,7 @@ class SpymemcachedTest extends AgentTestRunner { keyPrefix + k } - def longString(char c='s' as char) { + def longString(char c = 's' as char) { char[] chars = new char[250] Arrays.fill(chars, 's' as char) return new String(chars) @@ -622,7 +622,7 @@ class SpymemcachedTest extends AgentTestRunner { } } - def getSpan(TraceAssert trace, int index, String operation, String error=null, String result=null) { + def getSpan(TraceAssert trace, int index, String operation, String error = null, String result = null) { return trace.span(index) { if (index > 0) { childOf(trace.span(0)) @@ -632,7 +632,7 @@ class SpymemcachedTest extends AgentTestRunner { operationName OPERATION_NAME resourceName operation spanType SPAN_TYPE - errored (error != null && error != "canceled") + errored(error != null && error != "canceled") tags { defaultTags() diff --git a/dd-java-agent/src/main/java/datadog/trace/agent/TracingAgent.java b/dd-java-agent/src/main/java/datadog/trace/agent/TracingAgent.java index a309c2eea2..a7d938a4df 100644 --- a/dd-java-agent/src/main/java/datadog/trace/agent/TracingAgent.java +++ b/dd-java-agent/src/main/java/datadog/trace/agent/TracingAgent.java @@ -16,7 +16,12 @@ */ 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.reflect.Constructor; import java.lang.reflect.InvocationTargetException; @@ -91,8 +96,8 @@ public class TracingAgent { * @param toolingJar jar to use for the classpath of the datadog classloader * @return Datadog Classloader */ - private static ClassLoader createDatadogClassLoader(File bootstrapJar, File toolingJar) - throws Exception { + private static ClassLoader createDatadogClassLoader( + final File bootstrapJar, final File toolingJar) throws Exception { final ClassLoader agentParent; final String javaVersion = System.getProperty("java.version"); 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+ agentParent = getPlatformClassLoader(); } - Class loaderClass = + final Class loaderClass = ClassLoader.getSystemClassLoader().loadClass("datadog.trace.bootstrap.DatadogClassLoader"); - Constructor constructor = + final Constructor constructor = loaderClass.getDeclaredConstructor(URL.class, URL.class, ClassLoader.class); return (ClassLoader) constructor.newInstance( @@ -111,8 +116,8 @@ public class TracingAgent { } /** Extract sourcePath out of loader to a temporary file named destName. */ - private static File extractToTmpFile(ClassLoader loader, String sourcePath, String destName) - throws Exception { + private static File extractToTmpFile( + final ClassLoader loader, final String sourcePath, final String destName) throws Exception { final String destPrefix; final String destSuffix; { @@ -171,7 +176,7 @@ public class TracingAgent { public static void main(final String... args) { try { System.out.println(getAgentVersion()); - } catch (Exception e) { + } catch (final Exception e) { System.out.println("Failed to parse agent version"); e.printStackTrace(); } diff --git a/dd-java-agent/testing/src/test/groovy/AgentTestRunnerTest.groovy b/dd-java-agent/testing/src/test/groovy/AgentTestRunnerTest.groovy index ac059dfe48..7ff0c0922a 100644 --- a/dd-java-agent/testing/src/test/groovy/AgentTestRunnerTest.groovy +++ b/dd-java-agent/testing/src/test/groovy/AgentTestRunnerTest.groovy @@ -1,10 +1,9 @@ +import datadog.trace.agent.test.AgentTestRunner import datadog.trace.agent.test.TestUtils import io.opentracing.Tracer import java.lang.reflect.Field -import datadog.trace.agent.test.AgentTestRunner - class AgentTestRunnerTest extends AgentTestRunner { private static final ClassLoader BOOTSTRAP_CLASSLOADER = null private static final ClassLoader OT_LOADER diff --git a/dd-java-agent/testing/src/test/groovy/TraceCorrelationTest.groovy b/dd-java-agent/testing/src/test/groovy/TraceCorrelationTest.groovy index f47aa73f3b..b4b806e603 100644 --- a/dd-java-agent/testing/src/test/groovy/TraceCorrelationTest.groovy +++ b/dd-java-agent/testing/src/test/groovy/TraceCorrelationTest.groovy @@ -6,7 +6,7 @@ import io.opentracing.util.GlobalTracer class TraceCorrelationTest extends AgentTestRunner { - def "access trace correlation only under trace" () { + def "access trace correlation only under trace"() { when: Scope scope = GlobalTracer.get().buildSpan("myspan").startActive(true) DDSpan span = (DDSpan) scope.span() diff --git a/dd-java-agent/testing/src/test/groovy/muzzle/AdviceReferenceVisitorTest.groovy b/dd-java-agent/testing/src/test/groovy/muzzle/AdviceReferenceVisitorTest.groovy index e05ca43c07..7e6911a810 100644 --- a/dd-java-agent/testing/src/test/groovy/muzzle/AdviceReferenceVisitorTest.groovy +++ b/dd-java-agent/testing/src/test/groovy/muzzle/AdviceReferenceVisitorTest.groovy @@ -2,9 +2,9 @@ package muzzle import datadog.trace.agent.test.AgentTestRunner import datadog.trace.agent.test.TestUtils +import datadog.trace.agent.tooling.muzzle.Reference import datadog.trace.agent.tooling.muzzle.ReferenceCreator import datadog.trace.agent.tooling.muzzle.ReferenceMatcher -import datadog.trace.agent.tooling.muzzle.Reference class AdviceReferenceVisitorTest extends AgentTestRunner { @@ -25,12 +25,12 @@ class AdviceReferenceVisitorTest extends AgentTestRunner { Reference[] refs = ReferenceCreator.createReferencesFrom(AdviceClass.getName(), this.getClass().getClassLoader()).values().toArray(new Reference[0]) ReferenceMatcher refMatcher = new ReferenceMatcher(refs) ClassLoader safeClassloader = new URLClassLoader([TestUtils.createJarWithClasses(AdviceClass$A, - AdviceClass$SomeInterface, - AdviceClass$SomeImplementation)] as URL[], - (ClassLoader) null) + AdviceClass$SomeInterface, + AdviceClass$SomeImplementation)] as URL[], + (ClassLoader) null) ClassLoader unsafeClassloader = new URLClassLoader([TestUtils.createJarWithClasses(AdviceClass$SomeInterface, - AdviceClass$SomeImplementation)] as URL[], - (ClassLoader) null) + AdviceClass$SomeImplementation)] as URL[], + (ClassLoader) null) expect: refMatcher.getMismatchedReferenceSources(safeClassloader).size() == 0 diff --git a/dd-java-agent/testing/testing.gradle b/dd-java-agent/testing/testing.gradle index ed8cdd1c28..77a89f5458 100644 --- a/dd-java-agent/testing/testing.gradle +++ b/dd-java-agent/testing/testing.gradle @@ -24,7 +24,7 @@ dependencies { compile project(':dd-trace-ot') compile project(':dd-java-agent:agent-tooling') - + annotationProcessor deps.autoservice implementation deps.autoservice diff --git a/dd-trace-ot/dd-trace-ot.gradle b/dd-trace-ot/dd-trace-ot.gradle index 0a30dc7289..14b376137b 100644 --- a/dd-trace-ot/dd-trace-ot.gradle +++ b/dd-trace-ot/dd-trace-ot.gradle @@ -27,7 +27,7 @@ testSets { dependencies { annotationProcessor deps.autoservice implementation deps.autoservice - + compile project(':dd-trace-api') compile deps.opentracing compile group: 'io.opentracing.contrib', name: 'opentracing-tracerresolver', version: '0.1.0' diff --git a/dd-trace-ot/src/main/java/datadog/opentracing/DDSpanContext.java b/dd-trace-ot/src/main/java/datadog/opentracing/DDSpanContext.java index 45e5f4edbf..afca7c93db 100644 --- a/dd-trace-ot/src/main/java/datadog/opentracing/DDSpanContext.java +++ b/dd-trace-ot/src/main/java/datadog/opentracing/DDSpanContext.java @@ -4,7 +4,10 @@ import com.fasterxml.jackson.annotation.JsonIgnore; import datadog.opentracing.decorators.AbstractDecorator; import datadog.trace.api.DDTags; 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.atomic.AtomicReference; import lombok.extern.slf4j.Slf4j; @@ -115,15 +118,15 @@ public class DDSpanContext implements io.opentracing.SpanContext { } public String getTraceId() { - return this.traceId; + return traceId; } public String getParentId() { - return this.parentId; + return parentId; } public String getSpanId() { - return this.spanId; + return spanId; } public String getServiceName() { @@ -135,9 +138,7 @@ public class DDSpanContext implements io.opentracing.SpanContext { } public String getResourceName() { - return this.resourceName == null || this.resourceName.isEmpty() - ? this.operationName - : this.resourceName; + return resourceName == null || resourceName.isEmpty() ? operationName : resourceName; } public void setResourceName(final String resourceName) { @@ -170,7 +171,7 @@ public class DDSpanContext implements io.opentracing.SpanContext { public void setSamplingPriority(final int newPriority) { if (trace != null) { - DDSpan rootSpan = trace.getRootSpan(); + final DDSpan rootSpan = trace.getRootSpan(); if (null != rootSpan && rootSpan.context() != this) { rootSpan.context().setSamplingPriority(newPriority); 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 */ public int getSamplingPriority() { if (trace != null) { - DDSpan rootSpan = trace.getRootSpan(); + final DDSpan rootSpan = trace.getRootSpan(); if (null != rootSpan && rootSpan.context() != this) { return rootSpan.context().getSamplingPriority(); } @@ -217,7 +218,7 @@ public class DDSpanContext implements io.opentracing.SpanContext { */ public boolean lockSamplingPriority() { if (trace != null) { - DDSpan rootSpan = trace.getRootSpan(); + final DDSpan rootSpan = trace.getRootSpan(); if (null != rootSpan && rootSpan.context() != this) { return rootSpan.context().lockSamplingPriority(); } @@ -236,11 +237,11 @@ public class DDSpanContext implements io.opentracing.SpanContext { } public void setBaggageItem(final String key, final String value) { - this.baggageItems.put(key, value); + baggageItems.put(key, value); } public String getBaggageItem(final String key) { - return this.baggageItems.get(key); + return baggageItems.get(key); } public Map getBaggageItems() { @@ -252,17 +253,17 @@ public class DDSpanContext implements io.opentracing.SpanContext { */ @Override public Iterable> baggageItems() { - return this.baggageItems.entrySet(); + return baggageItems.entrySet(); } @JsonIgnore public PendingTrace getTrace() { - return this.trace; + return trace; } @JsonIgnore public DDTracer getTracer() { - return this.tracer; + return tracer; } public Map getMetrics() { @@ -270,7 +271,7 @@ public class DDSpanContext implements io.opentracing.SpanContext { 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) { metrics.compareAndSet(null, new ConcurrentHashMap()); } @@ -306,7 +307,7 @@ public class DDSpanContext implements io.opentracing.SpanContext { } if (addTag) { - this.tags.put(tag, value); + tags.put(tag, value); } } diff --git a/dd-trace-ot/src/test/groovy/datadog/opentracing/DDSpanBuilderTest.groovy b/dd-trace-ot/src/test/groovy/datadog/opentracing/DDSpanBuilderTest.groovy index e4c7005ca3..02445940d8 100644 --- a/dd-trace-ot/src/test/groovy/datadog/opentracing/DDSpanBuilderTest.groovy +++ b/dd-trace-ot/src/test/groovy/datadog/opentracing/DDSpanBuilderTest.groovy @@ -265,7 +265,7 @@ class DDSpanBuilderTest extends Specification { span.context().@tags == extractedContext.tags where: - extractedContext | _ + extractedContext | _ new ExtractedContext("1", "2", 0, [:], [:]) | _ new ExtractedContext("3", "4", 1, ["asdf": "qwer"], ["zxcv": "1234"]) | _ } diff --git a/dd-trace-ot/src/test/groovy/datadog/opentracing/decorators/SpanDecoratorTest.groovy b/dd-trace-ot/src/test/groovy/datadog/opentracing/decorators/SpanDecoratorTest.groovy index 9de66edf47..b471a01f78 100644 --- a/dd-trace-ot/src/test/groovy/datadog/opentracing/decorators/SpanDecoratorTest.groovy +++ b/dd-trace-ot/src/test/groovy/datadog/opentracing/decorators/SpanDecoratorTest.groovy @@ -59,7 +59,7 @@ class SpanDecoratorTest extends Specification { "service" | "other-service" | "other-service" Tags.PEER_SERVICE.key | "some-service" | "new-service" Tags.PEER_SERVICE.key | "other-service" | "other-service" - + mapping = ["some-service": "new-service"] } diff --git a/dd-trace-ot/src/test/groovy/datadog/trace/DDSpanContextTest.groovy b/dd-trace-ot/src/test/groovy/datadog/trace/DDSpanContextTest.groovy index c2a0afad8d..29bbdf673a 100644 --- a/dd-trace-ot/src/test/groovy/datadog/trace/DDSpanContextTest.groovy +++ b/dd-trace-ot/src/test/groovy/datadog/trace/DDSpanContextTest.groovy @@ -22,10 +22,10 @@ class DDSpanContextTest extends Specification { where: name | extra | tags - DDTags.SERVICE_NAME | "some.tag=asdf, " | ["some.tag": "asdf", (DDTags.SPAN_TYPE):"fakeType", (DDTags.THREAD_NAME): Thread.currentThread().name, (DDTags.THREAD_ID): Thread.currentThread().id] - DDTags.RESOURCE_NAME | "some.tag=asdf, " | ["some.tag": "asdf", (DDTags.SPAN_TYPE):"fakeType", (DDTags.THREAD_NAME): Thread.currentThread().name, (DDTags.THREAD_ID): Thread.currentThread().id] - DDTags.SPAN_TYPE | "some.tag=asdf, " | ["some.tag": "asdf", (DDTags.SPAN_TYPE):"fakeType", (DDTags.THREAD_NAME): Thread.currentThread().name, (DDTags.THREAD_ID): Thread.currentThread().id] - "some.tag" | "" | [ (DDTags.SPAN_TYPE):"fakeType", (DDTags.THREAD_NAME): Thread.currentThread().name, (DDTags.THREAD_ID): Thread.currentThread().id] + DDTags.SERVICE_NAME | "some.tag=asdf, " | ["some.tag": "asdf", (DDTags.SPAN_TYPE): "fakeType", (DDTags.THREAD_NAME): Thread.currentThread().name, (DDTags.THREAD_ID): Thread.currentThread().id] + DDTags.RESOURCE_NAME | "some.tag=asdf, " | ["some.tag": "asdf", (DDTags.SPAN_TYPE): "fakeType", (DDTags.THREAD_NAME): Thread.currentThread().name, (DDTags.THREAD_ID): Thread.currentThread().id] + DDTags.SPAN_TYPE | "some.tag=asdf, " | ["some.tag": "asdf", (DDTags.SPAN_TYPE): "fakeType", (DDTags.THREAD_NAME): Thread.currentThread().name, (DDTags.THREAD_ID): Thread.currentThread().id] + "some.tag" | "" | [(DDTags.SPAN_TYPE): "fakeType", (DDTags.THREAD_NAME): Thread.currentThread().name, (DDTags.THREAD_ID): Thread.currentThread().id] } def "special tags set certain values"() { diff --git a/gradle/test-with-scala.gradle b/gradle/test-with-scala.gradle index a036594a70..5ac675ebb6 100644 --- a/gradle/test-with-scala.gradle +++ b/gradle/test-with-scala.gradle @@ -3,6 +3,6 @@ apply plugin: 'scala' compileTestGroovy { - classpath = classpath.plus(files(compileTestScala.destinationDir)) - dependsOn compileTestScala + classpath = classpath.plus(files(compileTestScala.destinationDir)) + dependsOn compileTestScala }