From 3939d35ecbb01d1ee0ec6aed82bc215bb14a5583 Mon Sep 17 00:00:00 2001 From: EddeCCC Date: Tue, 17 Sep 2024 15:26:33 +0200 Subject: [PATCH] add listener --- .../transformation/InspectitListener.java | 49 +++++++++++++++++++ .../transformation/TransformationManager.java | 4 +- 2 files changed, 52 insertions(+), 1 deletion(-) create mode 100644 src/main/java/rocks/inspectit/gepard/agent/transformation/InspectitListener.java diff --git a/src/main/java/rocks/inspectit/gepard/agent/transformation/InspectitListener.java b/src/main/java/rocks/inspectit/gepard/agent/transformation/InspectitListener.java new file mode 100644 index 0000000..f26a20a --- /dev/null +++ b/src/main/java/rocks/inspectit/gepard/agent/transformation/InspectitListener.java @@ -0,0 +1,49 @@ +package rocks.inspectit.gepard.agent.transformation; + +import net.bytebuddy.agent.builder.AgentBuilder; +import net.bytebuddy.description.type.TypeDescription; +import net.bytebuddy.dynamic.DynamicType; +import net.bytebuddy.utility.JavaModule; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * Callbacks, which are executed before or after {@link DynamicTransformer#transform}. Currently, + * just used to log errors after transformation. + */ +public class InspectitListener implements AgentBuilder.Listener { + private static final Logger log = LoggerFactory.getLogger(InspectitListener.class); + + @Override + public void onError( + String typeName, + ClassLoader classLoader, + JavaModule module, + boolean loaded, + Throwable throwable) { + log.error("Dynamic transformation failed for type {} : {}", typeName, throwable.getMessage()); + } + + @Override + public void onDiscovery( + String typeName, ClassLoader classLoader, JavaModule module, boolean loaded) {} + + @Override + public void onTransformation( + TypeDescription typeDescription, + ClassLoader classLoader, + JavaModule module, + boolean loaded, + DynamicType dynamicType) {} + + @Override + public void onIgnored( + TypeDescription typeDescription, + ClassLoader classLoader, + JavaModule module, + boolean loaded) {} + + @Override + public void onComplete( + String typeName, ClassLoader classLoader, JavaModule module, boolean loaded) {} +} diff --git a/src/main/java/rocks/inspectit/gepard/agent/transformation/TransformationManager.java b/src/main/java/rocks/inspectit/gepard/agent/transformation/TransformationManager.java index 62e4a9c..0f7f71f 100644 --- a/src/main/java/rocks/inspectit/gepard/agent/transformation/TransformationManager.java +++ b/src/main/java/rocks/inspectit/gepard/agent/transformation/TransformationManager.java @@ -31,7 +31,9 @@ public static TransformationManager create(InstrumentationState instrumentationS */ public AgentBuilder modify(AgentBuilder agentBuilder) { DynamicTransformer transformer = new DynamicTransformer(instrumentationState); + InspectitListener listener = new InspectitListener(); + // In the future, we might add a white- or black-list for types - return agentBuilder.type(any()).transform(transformer); + return agentBuilder.type(any()).transform(transformer).with(listener); } }