Enable instrumenting old java bytecode
This commit is contained in:
parent
0714139b31
commit
123c5beab3
|
@ -0,0 +1,26 @@
|
|||
package datadog.trace.agent.tooling;
|
||||
|
||||
import net.bytebuddy.agent.builder.AgentBuilder;
|
||||
import net.bytebuddy.asm.TypeConstantAdjustment;
|
||||
import net.bytebuddy.description.type.TypeDescription;
|
||||
import net.bytebuddy.dynamic.DynamicType;
|
||||
import net.bytebuddy.utility.JavaModule;
|
||||
|
||||
public class DDTransformers {
|
||||
|
||||
private static final AgentBuilder.Transformer CONSTANT_ADJUSTER =
|
||||
new AgentBuilder.Transformer() {
|
||||
@Override
|
||||
public DynamicType.Builder<?> transform(
|
||||
DynamicType.Builder<?> builder,
|
||||
TypeDescription typeDescription,
|
||||
ClassLoader classLoader,
|
||||
JavaModule javaModule) {
|
||||
return builder.visit(TypeConstantAdjustment.INSTANCE);
|
||||
}
|
||||
};
|
||||
|
||||
public static AgentBuilder.Transformer defaultTransformers() {
|
||||
return CONSTANT_ADJUSTER;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,9 @@
|
|||
import com.ibm.as400.resource.ResourceLevel
|
||||
import datadog.trace.agent.test.AgentTestRunner
|
||||
|
||||
class InstrumentOldBytecode extends AgentTestRunner {
|
||||
def "can instrument old bytecode"() {
|
||||
expect:
|
||||
new ResourceLevel().toString() == "instrumented"
|
||||
}
|
||||
}
|
|
@ -0,0 +1,31 @@
|
|||
import static net.bytebuddy.matcher.ElementMatchers.named;
|
||||
|
||||
import com.google.auto.service.AutoService;
|
||||
import datadog.trace.agent.tooling.DDAdvice;
|
||||
import datadog.trace.agent.tooling.DDTransformers;
|
||||
import datadog.trace.agent.tooling.Instrumenter;
|
||||
import net.bytebuddy.agent.builder.AgentBuilder;
|
||||
import net.bytebuddy.asm.Advice;
|
||||
|
||||
@AutoService(Instrumenter.class)
|
||||
public class IBMResourceLevelInstrumentation extends Instrumenter.Configurable {
|
||||
public IBMResourceLevelInstrumentation() {
|
||||
super(IBMResourceLevelInstrumentation.class.getName());
|
||||
}
|
||||
|
||||
@Override
|
||||
protected AgentBuilder apply(AgentBuilder agentBuilder) {
|
||||
return agentBuilder
|
||||
.type(named("com.ibm.as400.resource.ResourceLevel"))
|
||||
.transform(DDTransformers.defaultTransformers())
|
||||
.transform(DDAdvice.create().advice(named("toString"), ToStringAdvice.class.getName()))
|
||||
.asDecorator();
|
||||
}
|
||||
|
||||
public static class ToStringAdvice {
|
||||
@Advice.OnMethodExit(suppress = Throwable.class)
|
||||
static void toStringReplace(@Advice.Return(readOnly = false) String ret) {
|
||||
ret = "instrumented";
|
||||
}
|
||||
}
|
||||
}
|
|
@ -10,4 +10,7 @@ dependencies {
|
|||
|
||||
compile project(':dd-trace-ot')
|
||||
compile project(':dd-java-agent:agent-tooling')
|
||||
|
||||
// test instrumenting java 1.1 bytecode
|
||||
testCompile group: 'net.sf.jt400', name: 'jt400', version: '6.1'
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue