TraceConfigInstrumentation implements Instrumenter directly

This commit is contained in:
Andrew Kent 2018-07-07 14:01:08 -04:00
parent 77717d305b
commit 836f49205b
2 changed files with 23 additions and 6 deletions

View File

@ -105,11 +105,11 @@ public interface Instrumenter {
return getConfigEnabled("dd.integrations.enabled", true);
}
protected static String getPropOrEnv(final String name) {
public static String getPropOrEnv(final String name) {
return System.getProperty(name, System.getenv(propToEnvName(name)));
}
private static String propToEnvName(final String name) {
public static String propToEnvName(final String name) {
return name.toUpperCase().replace(".", "_");
}
}

View File

@ -17,9 +17,18 @@ import net.bytebuddy.description.method.MethodDescription;
import net.bytebuddy.description.type.TypeDescription;
import net.bytebuddy.matcher.ElementMatcher;
/**
* TraceConfig Instrumentation does not extend Default.
*
* <p>Instead it directly implements Instrumenter#instrument() and adds one default Instrumenter for
* every configured class+method-list.
*
* <p>If this becomes a more common use case the building logic should be abstracted out into a
* super class.
*/
@Slf4j
@AutoService(Instrumenter.class)
public class TraceConfigInstrumentation extends Instrumenter.Default {
public class TraceConfigInstrumentation implements Instrumenter {
private static final String CONFIG_NAME = "dd.trace.methods";
static final String PACKAGE_CLASS_NAME_REGEX = "[\\w.\\$]+";
@ -38,9 +47,7 @@ public class TraceConfigInstrumentation extends Instrumenter.Default {
private final Map<String, Set<String>> classMethodsToTrace;
public TraceConfigInstrumentation() {
super("trace", "trace-config");
final String configString = getPropOrEnv(CONFIG_NAME);
final String configString = Default.getPropOrEnv(CONFIG_NAME);
if (configString == null || configString.trim().isEmpty()) {
classMethodsToTrace = Collections.emptyMap();
@ -130,6 +137,16 @@ public class TraceConfigInstrumentation extends Instrumenter.Default {
throw new RuntimeException("TracerConfigInstrumentation must not use TypeMatcher");
}
@Override
public ElementMatcher<? super ClassLoader> classLoaderMatcher() {
throw new RuntimeException("TracerConfigInstrumentation must not use classLoaderMatcher");
}
@Override
public String[] helperClassNames() {
throw new RuntimeException("TracerConfigInstrumentation must not use helperClassNames");
}
@Override
public Map<ElementMatcher, String> transformers() {
throw new RuntimeException("TracerConfigInstrumentation must not use transformers.");