Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 17 additions & 0 deletions src/main/java/de/appdynamics/isdk/lab/plugin/ArrayTool.java
Original file line number Diff line number Diff line change
@@ -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();
}
}
Original file line number Diff line number Diff line change
@@ -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<Rule> initializeRules() {
List<Rule> rules = new ArrayList<Rule>();
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;
}
}
61 changes: 61 additions & 0 deletions src/main/java/de/appdynamics/isdk/lab/plugin/GoogleExit.java
Original file line number Diff line number Diff line change
@@ -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<String, String> identifyBackend(Object invokedObject, String className, String methodName, Object[] paramValues, Throwable thrownException, Object returnValue, ISDKUserContext context) throws ReflectorException {
Map<String, String> idMap = new HashMap<String, String>();
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<Rule> initializeRules() {
List<Rule> rules = new ArrayList<Rule>();

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;
}
}
Original file line number Diff line number Diff line change
@@ -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<Rule> initializeRules() {
List<Rule> rules = new ArrayList<Rule>();
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;
}
}
Original file line number Diff line number Diff line change
@@ -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<String, String> identifyBackend(Object invokedObject, String className, String methodName, Object[] paramValues, Throwable thrownException, Object returnValue, ISDKUserContext context) throws ReflectorException {
Map<String, String> idMap = new HashMap<String, String>();
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<Rule> initializeRules() {
List<Rule> rules = new ArrayList<Rule>();

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;
}
}