From 857c4b94564bfa9c0546c88463a770015d654aa9 Mon Sep 17 00:00:00 2001 From: Stefan Marx Date: Sun, 2 Jul 2017 00:07:14 +0200 Subject: [PATCH 1/5] Added Google Exit Call --- .../isdk/lab/plugin/GoogleExit.java | 61 +++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 src/main/java/de/appdynamics/isdk/lab/plugin/GoogleExit.java 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; + } +} From e634cfde15e438b940bb5109378baeadfade7462 Mon Sep 17 00:00:00 2001 From: Stefan Marx Date: Sun, 2 Jul 2017 11:36:17 +0200 Subject: [PATCH 2/5] initial --- .../lab/plugin/TCPCorrelationEndPlugin.java | 63 +++++++++++++++++ .../lab/plugin/TCPCorrelationStartPlugin.java | 70 +++++++++++++++++++ 2 files changed, 133 insertions(+) create mode 100644 src/main/java/de/appdynamics/isdk/lab/plugin/TCPCorrelationEndPlugin.java create mode 100644 src/main/java/de/appdynamics/isdk/lab/plugin/TCPCorrelationStartPlugin.java 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..d4586c3 --- /dev/null +++ b/src/main/java/de/appdynamics/isdk/lab/plugin/TCPCorrelationEndPlugin.java @@ -0,0 +1,63 @@ +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 { + + + public TCPCorrelationEndPlugin + private final IReflector _getHeader; + + { + _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 : "); + + return null; + } + + @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; + } +} From abdc46c69c50f481387449fc072fe18aaa9c5468 Mon Sep 17 00:00:00 2001 From: Stefan Marx Date: Sun, 2 Jul 2017 11:38:10 +0200 Subject: [PATCH 3/5] poart Array Tool --- .../appdynamics/isdk/lab/plugin/ArrayTool.java | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 src/main/java/de/appdynamics/isdk/lab/plugin/ArrayTool.java 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(); + } +} From 3a8288332875596df71e4936f402de40aed0aa86 Mon Sep 17 00:00:00 2001 From: Stefan Marx Date: Sun, 2 Jul 2017 16:42:25 +0200 Subject: [PATCH 4/5] bugfix --- .../isdk/lab/plugin/TCPCorrelationEndPlugin.java | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/main/java/de/appdynamics/isdk/lab/plugin/TCPCorrelationEndPlugin.java b/src/main/java/de/appdynamics/isdk/lab/plugin/TCPCorrelationEndPlugin.java index d4586c3..6ee16e7 100644 --- a/src/main/java/de/appdynamics/isdk/lab/plugin/TCPCorrelationEndPlugin.java +++ b/src/main/java/de/appdynamics/isdk/lab/plugin/TCPCorrelationEndPlugin.java @@ -16,11 +16,9 @@ */ public class TCPCorrelationEndPlugin extends AEntry { - - public TCPCorrelationEndPlugin private final IReflector _getHeader; - { + public TCPCorrelationEndPlugin() { _getHeader = getNewReflectionBuilder().invokeInstanceMethod("getCorrelation",false).build(); } @@ -29,9 +27,13 @@ public class TCPCorrelationEndPlugin extends AEntry { @Override public String unmarshalTransactionContext(Object invokedObject, String className, String methodName, Object[] paramValues, ISDKUserContext context) throws ReflectorException { - getLogger().info("Start Correlation : "); + getLogger().info("Start Correlation : " + ArrayTool.logValues(paramValues)); + String header = ""+_getHeader.execute(paramValues[0].getClass().getClassLoader(),paramValues[0]); + + getLogger().info("Found HEader "+header); + - return null; + return header; } @Override From dfa918c72c84d6ca9e7fe3a4bfcb92862ce998d4 Mon Sep 17 00:00:00 2001 From: Philipp von dem Bussche Date: Fri, 15 Sep 2017 20:06:53 +0200 Subject: [PATCH 5/5] Example of a data collector plugin. --- .../isdk/lab/plugin/DataCollectorPlugin.java | 64 +++++++++++++++++++ 1 file changed, 64 insertions(+) create mode 100644 src/main/java/de/appdynamics/isdk/lab/plugin/DataCollectorPlugin.java 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; + } +}