Plugin manager updated.
This commit is contained in:
parent
147c40166d
commit
33c09a2de6
|
@ -80,7 +80,7 @@ public class HomeController {
|
|||
scenario.getUserBehaviors()[2].getParameters()[0].setKey("time");
|
||||
scenario.getUserBehaviors()[2].getParameters()[0].setValue("1000");
|
||||
|
||||
this.getScenarioEngine().runScenario(scenario, 1000);
|
||||
this.getScenarioEngine().runScenario(scenario);
|
||||
return "It works!";
|
||||
}
|
||||
}
|
|
@ -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;
|
||||
|
@ -60,8 +60,79 @@ public class PluginManager {
|
|||
}
|
||||
}
|
||||
|
||||
public Class<?> getPlugin(String name) {
|
||||
return this.findPlugins("org.bench4q.agent.plugin").get(name);
|
||||
public Map<String, Class<?>> getPlugins() {
|
||||
return this.findPlugins("org.bench4q.agent.plugin");
|
||||
}
|
||||
|
||||
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,
|
||||
|
@ -82,24 +153,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);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -6,11 +6,11 @@ import org.bench4q.agent.plugin.Plugin;
|
|||
@Plugin("ConstantTimer")
|
||||
public class ConstantTimerPlugin {
|
||||
public ConstantTimerPlugin(int time) {
|
||||
|
||||
System.out.println("init timer plugin: " + time);
|
||||
}
|
||||
|
||||
@Behavior("Sleep")
|
||||
public void sleep(int time) {
|
||||
|
||||
System.out.println("sleep:" + time);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -49,8 +49,8 @@ public class ScenarioEngine {
|
|||
scenarioContext.setPlugins(new HashMap<String, Object>());
|
||||
for (UsePlugin usePlugin : scenario.getUsePlugins()) {
|
||||
String pluginId = usePlugin.getId();
|
||||
Class<?> pluginClass = this.getPluginManager().getPlugin(
|
||||
usePlugin.getName());
|
||||
Class<?> pluginClass = this.getPluginManager().getPlugins()
|
||||
.get(usePlugin.getName());
|
||||
Map<String, String> initParameters = new HashMap<String, String>();
|
||||
for (Parameter parameter : usePlugin.getParameters()) {
|
||||
initParameters.put(parameter.getKey(), parameter.getValue());
|
||||
|
|
Loading…
Reference in New Issue