diff --git a/src/main/java/de/appdynamics/isdk/lab/plugin/ArrayTool.java b/src/main/java/de/appdynamics/isdk/lab/plugin/ArrayTool.java new file mode 100644 index 0000000..4bf1cb0 --- /dev/null +++ b/src/main/java/de/appdynamics/isdk/lab/plugin/ArrayTool.java @@ -0,0 +1,17 @@ +package de.appdynamics.isdk.lab.plugin; + +/** + * Created by stefan.marx on 02.07.17. + */ +public class ArrayTool { + public static String logValues(Object[] paramValues) { + StringBuffer result = new StringBuffer(); + int i = 0; + for (Object o : paramValues) { + result.append(i).append(": ").append(""+o) + .append("\n"); + i++; + } + return result.toString(); + } +} diff --git a/src/main/java/de/appdynamics/isdk/lab/plugin/DataCollectorPlugin.java b/src/main/java/de/appdynamics/isdk/lab/plugin/DataCollectorPlugin.java new file mode 100644 index 0000000..c37ede6 --- /dev/null +++ b/src/main/java/de/appdynamics/isdk/lab/plugin/DataCollectorPlugin.java @@ -0,0 +1,64 @@ +package de.appdynamics.isdk.lab.plugin; + +import com.appdynamics.instrumentation.sdk.Rule; +import com.appdynamics.instrumentation.sdk.SDKClassMatchType; +import com.appdynamics.instrumentation.sdk.SDKStringMatchType; +import com.appdynamics.instrumentation.sdk.contexts.ISDKDataContext; +import com.appdynamics.instrumentation.sdk.template.ADataCollector; +import com.appdynamics.instrumentation.sdk.toolbox.reflection.IReflector; +import com.appdynamics.instrumentation.sdk.toolbox.reflection.ReflectorException; + +import java.util.ArrayList; +import java.util.List; + +/** + * Created by philipp on 04/08/17. + */ +public class DataCollectorPlugin extends ADataCollector { + + private IReflector reflector; + + public DataCollectorPlugin() { + reflector = getNewReflectionBuilder().invokeInstanceMethod("getAntrag", true).invokeInstanceMethod("getHaendlernummer", true).build(); + } + + @Override + public void storeData(Object invokedObject, String className, String methodName, Object[] paramValues, + Throwable thrownException, Object returnValue, ISDKDataContext isdkDataContext) throws ReflectorException { + getLogger().info("Logging agent plugin data collection for Haendlernummer"); + + Object payload = paramValues[0]; + + String toStore = null; + try { + int haendlernummer = (Integer) reflector.execute(payload.getClass().getClassLoader(), payload); + toStore = String.valueOf(haendlernummer); + } catch (ReflectorException e) { + getLogger().error("Caught exception in attempting to pull payload data", e); + } + + isdkDataContext.storeData("haendlernummerPlugin", toStore); + } + + @Override + public boolean addToSnapshot() { + return true; + } + + @Override + public boolean addToAnalytics() { + return false; + } + + @Override + public List initializeRules() { + List rules = new ArrayList(); + rules.add(new Rule.Builder("de.bank11.victor.services.antrag.AntragImpl") + .classMatchType(SDKClassMatchType.MATCHES_CLASS) + .classStringMatchType(SDKStringMatchType.EQUALS) + .methodMatchString("submitAntrag") + .methodStringMatchType(SDKStringMatchType.EQUALS) + .build()); + return rules; + } +} diff --git a/src/main/java/de/appdynamics/isdk/lab/plugin/GoogleExit.java b/src/main/java/de/appdynamics/isdk/lab/plugin/GoogleExit.java new file mode 100644 index 0000000..6114a8d --- /dev/null +++ b/src/main/java/de/appdynamics/isdk/lab/plugin/GoogleExit.java @@ -0,0 +1,61 @@ +package de.appdynamics.isdk.lab.plugin; + +import com.appdynamics.instrumentation.sdk.Rule; +import com.appdynamics.instrumentation.sdk.SDKClassMatchType; +import com.appdynamics.instrumentation.sdk.SDKStringMatchType; +import com.appdynamics.instrumentation.sdk.contexts.ISDKUserContext; +import com.appdynamics.instrumentation.sdk.template.AExit; +import com.appdynamics.instrumentation.sdk.toolbox.reflection.ReflectorException; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * Created by stefan.marx on 01.07.17. + */ +public class GoogleExit extends AExit { + @Override + public void marshalTransactionContext(String transactionContext, Object invokedObject, String className, String methodName, Object[] paramValues, Throwable thrownException, Object returnValue, ISDKUserContext context) throws ReflectorException { + // NOOP, external google call + } + + @Override + public Map identifyBackend(Object invokedObject, String className, String methodName, Object[] paramValues, Throwable thrownException, Object returnValue, ISDKUserContext context) throws ReflectorException { + Map idMap = new HashMap(); + idMap.put("URL",""+paramValues[0]); + getLogger().info("URL_Identified :"+paramValues[0]); + return idMap; + } + + @Override + public boolean isCorrelationEnabled() { + return false; + } + + @Override + public boolean isCorrelationEnabledForOnMethodBegin() { + return false; + } + + @Override + public List initializeRules() { + List rules = new ArrayList(); + + Rule r = new Rule.Builder("de.appdynamics.ace.isdk.lab.application.main.jobs.util.GoogleSearcher") + .classStringMatchType(SDKStringMatchType.EQUALS) + .classMatchType(SDKClassMatchType.MATCHES_CLASS) + .methodMatchString("searchGoogle") + .methodStringMatchType(SDKStringMatchType.EQUALS) + .build(); + rules.add(r) ; + + return rules; + } + + @Override + public boolean resolveToNode() { + return false; + } +} diff --git a/src/main/java/de/appdynamics/isdk/lab/plugin/TCPCorrelationEndPlugin.java b/src/main/java/de/appdynamics/isdk/lab/plugin/TCPCorrelationEndPlugin.java new file mode 100644 index 0000000..6ee16e7 --- /dev/null +++ b/src/main/java/de/appdynamics/isdk/lab/plugin/TCPCorrelationEndPlugin.java @@ -0,0 +1,65 @@ +package de.appdynamics.isdk.lab.plugin; + +import com.appdynamics.instrumentation.sdk.Rule; +import com.appdynamics.instrumentation.sdk.SDKClassMatchType; +import com.appdynamics.instrumentation.sdk.SDKStringMatchType; +import com.appdynamics.instrumentation.sdk.contexts.ISDKUserContext; +import com.appdynamics.instrumentation.sdk.template.AEntry; +import com.appdynamics.instrumentation.sdk.toolbox.reflection.IReflector; +import com.appdynamics.instrumentation.sdk.toolbox.reflection.ReflectorException; + +import java.util.ArrayList; +import java.util.List; + +/** + * Created by stefan.marx on 02.07.17. + */ +public class TCPCorrelationEndPlugin extends AEntry { + + private final IReflector _getHeader; + + public TCPCorrelationEndPlugin() { + _getHeader = getNewReflectionBuilder().invokeInstanceMethod("getCorrelation",false).build(); + + } + + + @Override + public String unmarshalTransactionContext(Object invokedObject, String className, String methodName, Object[] paramValues, ISDKUserContext context) throws ReflectorException { + + getLogger().info("Start Correlation : " + ArrayTool.logValues(paramValues)); + String header = ""+_getHeader.execute(paramValues[0].getClass().getClassLoader(),paramValues[0]); + + getLogger().info("Found HEader "+header); + + + return header; + } + + @Override + public String getBusinessTransactionName(Object invokedObject, String className, String methodName, Object[] paramValues, ISDKUserContext context) throws ReflectorException { + return "TCP-SERVER"; + } + + @Override + public boolean isCorrelationEnabled() { + return true; + } + + @Override + public boolean isCorrelationEnabledForOnMethodBegin() { + return true; + } + + @Override + public List initializeRules() { + List rules = new ArrayList(); + rules.add(new Rule.Builder("de.appdynamics.ace.isdk.lab.application.tcpBackend.server.ComandExecutor") + .classMatchType(SDKClassMatchType.MATCHES_CLASS) + .classStringMatchType(SDKStringMatchType.EQUALS) + .methodMatchString("executeCommand") + .methodStringMatchType(SDKStringMatchType.EQUALS) + .build()); + return rules; + } +} diff --git a/src/main/java/de/appdynamics/isdk/lab/plugin/TCPCorrelationStartPlugin.java b/src/main/java/de/appdynamics/isdk/lab/plugin/TCPCorrelationStartPlugin.java new file mode 100644 index 0000000..0c9a22d --- /dev/null +++ b/src/main/java/de/appdynamics/isdk/lab/plugin/TCPCorrelationStartPlugin.java @@ -0,0 +1,70 @@ +package de.appdynamics.isdk.lab.plugin; + +import com.appdynamics.instrumentation.sdk.Rule; +import com.appdynamics.instrumentation.sdk.SDKClassMatchType; +import com.appdynamics.instrumentation.sdk.SDKStringMatchType; +import com.appdynamics.instrumentation.sdk.contexts.ISDKUserContext; +import com.appdynamics.instrumentation.sdk.template.AExit; +import com.appdynamics.instrumentation.sdk.toolbox.reflection.IReflectionBuilder; +import com.appdynamics.instrumentation.sdk.toolbox.reflection.IReflector; +import com.appdynamics.instrumentation.sdk.toolbox.reflection.ReflectorException; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * Created by stefan.marx on 02.07.17. + */ +public class TCPCorrelationStartPlugin extends AExit { + + private final IReflector _getHost; + private final IReflector _getPort; + private final IReflector _addHeader; + + public TCPCorrelationStartPlugin() { + _getHost = getNewReflectionBuilder().accessFieldValue("_hostname",false).build(); + _getPort = getNewReflectionBuilder().accessFieldValue("_port",false).build(); + _addHeader = getNewReflectionBuilder().invokeInstanceMethod("setCorrelation",false,"java.lang.String").build(); + + } + @Override + public void marshalTransactionContext(String transactionContext, Object invokedObject, String className, String methodName, Object[] paramValues, Throwable thrownException, Object returnValue, ISDKUserContext context) throws ReflectorException { + _addHeader.execute(invokedObject.getClass().getClassLoader(),paramValues[0],new Object []{transactionContext}); + } + + @Override + public Map identifyBackend(Object invokedObject, String className, String methodName, Object[] paramValues, Throwable thrownException, Object returnValue, ISDKUserContext context) throws ReflectorException { + Map idMap = new HashMap(); + ClassLoader cl = invokedObject.getClass().getClassLoader(); + idMap.put("host",""+_getHost.execute(cl,invokedObject)); + idMap.put("port",""+_getHost.execute(cl,invokedObject)); + return idMap; + } + + @Override + public boolean isCorrelationEnabled() { + return true; + } + + @Override + public boolean isCorrelationEnabledForOnMethodBegin() { + return true; + } + + @Override + public List initializeRules() { + List rules = new ArrayList(); + + Rule r = new Rule.Builder("de.appdynamics.ace.isdk.lab.application.main.jobs.TCPClientSimple") + .classStringMatchType(SDKStringMatchType.EQUALS) + .classMatchType(SDKClassMatchType.MATCHES_CLASS) + .methodMatchString("communicate") + .methodStringMatchType(SDKStringMatchType.EQUALS) + .build(); + rules.add(r) ; + + return rules; + } +}