Merge code
This commit is contained in:
commit
b2b754c429
|
@ -0,0 +1,23 @@
|
|||
package org.bench4q.agent.plugin;
|
||||
|
||||
public class BehaviorInfo {
|
||||
private String name;
|
||||
private String[] parameters;
|
||||
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
public void setName(String name) {
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
public String[] getParameters() {
|
||||
return parameters;
|
||||
}
|
||||
|
||||
public void setParameters(String[] parameters) {
|
||||
this.parameters = parameters;
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,32 @@
|
|||
package org.bench4q.agent.plugin;
|
||||
|
||||
public class PluginInfo {
|
||||
private String name;
|
||||
private String parameters[];
|
||||
private BehaviorInfo[] behaviors;
|
||||
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
public void setName(String name) {
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
public String[] getParameters() {
|
||||
return parameters;
|
||||
}
|
||||
|
||||
public void setParameters(String[] parameters) {
|
||||
this.parameters = parameters;
|
||||
}
|
||||
|
||||
public BehaviorInfo[] getBehaviors() {
|
||||
return behaviors;
|
||||
}
|
||||
|
||||
public void setBehaviors(BehaviorInfo[] behaviors) {
|
||||
this.behaviors = behaviors;
|
||||
}
|
||||
|
||||
}
|
|
@ -1,6 +1,7 @@
|
|||
package org.bench4q.agent.plugin;
|
||||
|
||||
import java.lang.reflect.Method;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
@ -11,7 +12,6 @@ import javassist.CtClass;
|
|||
import javassist.CtConstructor;
|
||||
import javassist.CtMethod;
|
||||
import javassist.Modifier;
|
||||
import javassist.NotFoundException;
|
||||
import javassist.bytecode.CodeAttribute;
|
||||
import javassist.bytecode.LocalVariableAttribute;
|
||||
import javassist.bytecode.MethodInfo;
|
||||
|
@ -74,6 +74,77 @@ public class PluginManager {
|
|||
}
|
||||
}
|
||||
|
||||
public List<PluginInfo> getPluginInfo() {
|
||||
try {
|
||||
Map<String, Class<?>> plugins = this.getPlugins();
|
||||
List<PluginInfo> ret = new ArrayList<PluginInfo>();
|
||||
for (Class<?> plugin : plugins.values()) {
|
||||
PluginInfo pluginInfo = new PluginInfo();
|
||||
ClassPool classPool = ClassPool.getDefault();
|
||||
CtClass ctClass = classPool.get(plugin.getCanonicalName());
|
||||
pluginInfo.setName(((Plugin) ctClass
|
||||
.getAnnotation(Plugin.class)).value());
|
||||
pluginInfo.setParameters(this.getParameterNames(ctClass
|
||||
.getConstructors()[0]));
|
||||
CtMethod[] behaviors = this.getBehaviors(ctClass);
|
||||
pluginInfo.setBehaviors(new BehaviorInfo[behaviors.length]);
|
||||
int i = 0;
|
||||
for (i = 0; i < behaviors.length; i++) {
|
||||
BehaviorInfo behaviorInfo = new BehaviorInfo();
|
||||
CtMethod behaviorMethod = behaviors[i];
|
||||
behaviorInfo.setName(((Behavior) behaviorMethod
|
||||
.getAnnotation(Behavior.class)).value());
|
||||
behaviorInfo.setParameters(this
|
||||
.getParameterNames(behaviorMethod));
|
||||
pluginInfo.getBehaviors()[i] = behaviorInfo;
|
||||
}
|
||||
ret.add(pluginInfo);
|
||||
}
|
||||
return ret;
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
private String[] getParameterNames(CtBehavior behavior) {
|
||||
try {
|
||||
MethodInfo methodInfo = behavior.getMethodInfo();
|
||||
CodeAttribute codeAttribute = methodInfo.getCodeAttribute();
|
||||
LocalVariableAttribute localVariableAttribute = (LocalVariableAttribute) codeAttribute
|
||||
.getAttribute(LocalVariableAttribute.tag);
|
||||
int parameterCount = behavior.getParameterTypes().length;
|
||||
String parameterNames[] = new String[parameterCount];
|
||||
int i;
|
||||
int pos = Modifier.isStatic(behavior.getModifiers()) ? 0 : 1;
|
||||
for (i = 0; i < parameterCount; i++) {
|
||||
parameterNames[i] = localVariableAttribute
|
||||
.variableName(i + pos);
|
||||
}
|
||||
return parameterNames;
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
private CtMethod[] getBehaviors(CtClass plugin) {
|
||||
try {
|
||||
CtMethod[] ctMethods = plugin.getMethods();
|
||||
List<CtMethod> ret = new ArrayList<CtMethod>();
|
||||
int i = 0;
|
||||
for (i = 0; i < ctMethods.length; i++) {
|
||||
if (ctMethods[i].hasAnnotation(Behavior.class)) {
|
||||
ret.add(ctMethods[i]);
|
||||
}
|
||||
}
|
||||
return ret.toArray(new CtMethod[0]);
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
public Object initializePlugin(Class<?> plugin,
|
||||
Map<String, String> parameters) {
|
||||
try {
|
||||
|
@ -92,24 +163,22 @@ public class PluginManager {
|
|||
}
|
||||
}
|
||||
|
||||
private Object[] prepareParameters(CtBehavior constructor,
|
||||
Map<String, String> parameters) throws NotFoundException {
|
||||
MethodInfo methodInfo = constructor.getMethodInfo();
|
||||
CodeAttribute codeAttribute = methodInfo.getCodeAttribute();
|
||||
LocalVariableAttribute localVariableAttribute = (LocalVariableAttribute) codeAttribute
|
||||
.getAttribute(LocalVariableAttribute.tag);
|
||||
int parameterCount = constructor.getParameterTypes().length;
|
||||
String parameterNames[] = new String[parameterCount];
|
||||
Object values[] = new Object[parameterCount];
|
||||
int i;
|
||||
int pos = Modifier.isStatic(constructor.getModifiers()) ? 0 : 1;
|
||||
for (i = 0; i < parameterCount; i++) {
|
||||
parameterNames[i] = localVariableAttribute.variableName(i + pos);
|
||||
values[i] = this.getTypeConverter().convert(
|
||||
parameters.get(parameterNames[i]),
|
||||
constructor.getParameterTypes()[i].getName());
|
||||
private Object[] prepareParameters(CtBehavior behavior,
|
||||
Map<String, String> parameters) {
|
||||
try {
|
||||
String[] parameterNames = this.getParameterNames(behavior);
|
||||
Object values[] = new Object[parameterNames.length];
|
||||
int i = 0;
|
||||
for (i = 0; i < parameterNames.length; i++) {
|
||||
values[i] = this.getTypeConverter().convert(
|
||||
parameters.get(parameterNames[i]),
|
||||
behavior.getParameterTypes()[i].getName());
|
||||
}
|
||||
return values;
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
return null;
|
||||
}
|
||||
return values;
|
||||
}
|
||||
|
||||
public Object doBehavior(Object plugin, String behaviorName,
|
||||
|
|
|
@ -6,16 +6,21 @@ import org.bench4q.agent.plugin.Plugin;
|
|||
@Plugin("Http")
|
||||
public class HttpPlugin {
|
||||
public HttpPlugin() {
|
||||
|
||||
System.out.println("init http plugin");
|
||||
}
|
||||
|
||||
@Behavior("Get")
|
||||
public void get(String url, String content) {
|
||||
|
||||
System.out.println("get");
|
||||
System.out.println("url:" + url);
|
||||
System.out.println("content:" + content);
|
||||
}
|
||||
|
||||
@Behavior("Post")
|
||||
public void post(String url, String content, int code) {
|
||||
|
||||
System.out.println("get");
|
||||
System.out.println("url:" + url);
|
||||
System.out.println("content:" + content);
|
||||
System.out.println("code:" + code);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -11,6 +11,6 @@ public class ConstantTimerPlugin {
|
|||
|
||||
@Behavior("Sleep")
|
||||
public void sleep(int time) {
|
||||
|
||||
System.out.println("sleep:" + time);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue