String v = xp.evaluate("fa:scale", runConfigNode);
if (v != null && v.length() > 0) {
try {
runInfo.scale = Integer.parseInt(v);
} catch (NumberFormatException e) {
throw new ConfigurationException(
"<scale> must be an integer.");
}
}
v = xp.evaluate("fa:runControl/fa:rampUp", runConfigNode);
if (v == null || v.length() == 0) {
throw new ConfigurationException(
"Element <rampUp> not found.");
}
try {
runInfo.rampUp = Integer.parseInt(v);
} catch (NumberFormatException e) {
throw new ConfigurationException(
"<rampUp> must be an integer.");
}
v = xp.evaluate("fa:runControl/fa:steadyState", runConfigNode);
if (v == null || v.length() == 0) {
throw new ConfigurationException(
"Element <steadyState> not found.");
}
try {
runInfo.stdyState = Integer.parseInt(v);
} catch (NumberFormatException e) {
throw new ConfigurationException(
"<steadyState> must be an integer.");
}
v = xp.evaluate("fa:runControl/fa:rampDown", runConfigNode);
if (v == null || v.length() == 0) {
throw new ConfigurationException(
"Element <rampDown> not found.");
}
try {
runInfo.rampDown = Integer.parseInt(v);
} catch (NumberFormatException e) {
throw new ConfigurationException(
"<rampDown> must be an integer.");
}
v = xp.evaluate("fa:runControl/fa:variableLoad", runConfigNode);
if (v != null && v.length() > 0) {
try {
runInfo.variableLoad = relaxedParseBoolean(v);
} catch (NumberFormatException e) {
throw new ConfigurationException(
"<variableLoad> must be true or false.");
}
}
if (runInfo.variableLoad) {
runInfo.variableLoadFile = xp.evaluate(
"fa:runControl/fa:variableLoadFile", runConfigNode);
}
runInfo.resultsDir = xp.evaluate("fd:outputDir", runConfigNode);
if (runInfo.resultsDir == null || runInfo.resultsDir.length() == 0) {
throw new ConfigurationException(
"Element <outputDir> not found.");
}
v = xp.evaluate("fd:audit", runConfigNode);
if (v != null && v.length() > 0) {
try {
runInfo.audit = relaxedParseBoolean(v);
} catch (NumberFormatException e) {
throw new ConfigurationException(
"<audit> must be true or false.");
}
}
v = xp.evaluate("fd:threadStart/fd:delay", runConfigNode);
if (v != null && v.length() > 0) {
try {
runInfo.msBetweenThreadStart = Integer.parseInt(v);
} catch (NumberFormatException e) {
throw new ConfigurationException(
"<delay> must be an integer.");
}
}
v = xp.evaluate("fd:threadStart/fd:simultaneous", runConfigNode);
if (v != null && v.length() > 0) {
try {
runInfo.simultaneousStart = relaxedParseBoolean(v);
} catch (NumberFormatException e) {
throw new ConfigurationException(
"<simultaneous> must be true or false.");
}
}
v = xp.evaluate("fd:threadStart/fd:parallel", runConfigNode);
if (v != null && v.length() > 0) {
try {
runInfo.parallelAgentThreadStart = relaxedParseBoolean(v);
} catch (NumberFormatException e) {
throw new ConfigurationException(
"<parallel> must be true or false.");
}
}
v = xp.evaluate("fd:stats/fd:maxRunTime", runConfigNode);
if (v!= null && v.length() > 0) {
try {
runInfo.maxRunTime = Integer.parseInt(v);
} catch (NumberFormatException e) {
throw new ConfigurationException(
"<maxRunTime> must be an integer.");
}
}
v = xp.evaluate("fd:stats/fd:interval", runConfigNode);
if (v!= null && v.length() > 0) {
try {
runInfo.graphInterval = Integer.parseInt(v);
} catch (NumberFormatException e) {
throw new ConfigurationException(
"<interval> must be an integer.");
}
}
v = xp.evaluate("fd:runtimeStats/@enabled", runConfigNode);
if (v != null && v.length() > 0) {
try {
runInfo.runtimeStatsEnabled = relaxedParseBoolean(v);
} catch (Exception e) {
throw new ConfigurationException(
"<runtimeStats enabled=[true|false]>");
}
}
v = xp.evaluate("fd:runtimeStats/fd:interval", runConfigNode);
if (v != null && v.length() > 0) {
try {
runInfo.runtimeStatsInterval = Integer.parseInt(v);
} catch (NumberFormatException e) {
throw new ConfigurationException(
"<interval> must be an integer.");
}
}
runInfo.driverConfigs = new DriverConfig[benchDef.drivers.length];
for (int i = 0; i < benchDef.drivers.length; i++) {
DriverConfig driverConfig =
new DriverConfig(benchDef.drivers[i]);
Element driverConfigNode = (Element) xp.evaluate(
"fd:driverConfig[@name=\"" + driverConfig.name + "\"][1]",
runConfigNode, XPathConstants.NODE);
driverConfig.runControl = benchDef.runControl;
if (driverConfigNode == null) {
throw new ConfigurationException("Element " +
"<driverConfig name=\"" + driverConfig.name +
"\"> not found.");
}
v = xp.evaluate("fd:agents", driverConfigNode);
// Note that the agents field has two valid formats:
// 1. A single integer
// 2. One or more host:count fields
// The harness is interested in the host/count. What we need
// is a simple count. Just add'em up.
if (v != null && v.length() > 0) {
StringTokenizer t = new StringTokenizer(v, " ,");
driverConfig.numAgents = 0;
while (t.hasMoreTokens()) {
v = t.nextToken().trim();
if (v.length() == 0) {
continue;
}
int idx = v.indexOf(':');
if (++idx > 0) {
v = v.substring(idx);
}
if (v.length() == 0) {
continue;
}
try {
driverConfig.numAgents += Integer.parseInt(v);
} catch (NumberFormatException e) {
throw new ConfigurationException("<agents> " +
"must be an integer or in the format " +
"host:agents where agents is an integer. " +
"Found: " + v);
}
}
}
v = xp.evaluate("fd:threads", driverConfigNode);
if (v != null && v.length() > 0) {
try {
driverConfig.numThreads = Integer.parseInt(v);
} catch (NumberFormatException e) {
throw new ConfigurationException(
"<threads> must be an integer.");
}
}
v = xp.evaluate("fd:stats/fd:interval", driverConfigNode);
if (v!= null && v.length() > 0) {
try {
driverConfig.graphInterval = Integer.parseInt(v);
} catch (NumberFormatException e) {
throw new ConfigurationException(
"<interval> must be an integer.");
}
} else {
driverConfig.graphInterval = runInfo.graphInterval;
}
if (runInfo.runtimeStatsEnabled) {
driverConfig.runtimeStatsTarget = xp.evaluate(
"fd:runtimeStats/@target", driverConfigNode);
if (driverConfig.runtimeStatsTarget != null) {
driverConfig.runtimeStatsTarget =
driverConfig.runtimeStatsTarget.trim();
if (driverConfig.runtimeStatsTarget.length() == 0)
driverConfig.runtimeStatsTarget = null;
}
}
if (runInfo.variableLoad) {
driverConfig.variableLoadFile = xp.evaluate(
"fd:variableLoadFile", driverConfigNode);
if (driverConfig.variableLoadFile == null ||
driverConfig.variableLoadFile.length() == 0) {
driverConfig.variableLoadFile = runInfo.variableLoadFile;
}
if (driverConfig.variableLoadFile == null ||
driverConfig.variableLoadFile.length() == 0) {
throw new ConfigurationException(
"Element <variableLoadFile> not found.");
}
}
driverConfig.rootElement = rootElement;
driverConfig.properties = (Element) xp.evaluate("fd:properties",
driverConfigNode, XPathConstants.NODE);
driverConfig.mix[0].configure(driverConfigNode);
driverConfig.mix[0].configureCycles(driverConfigNode);
driverConfig.mix[0].normalize();
runInfo.driverConfigs[i] = driverConfig;
//need to store the class bytes for a remote agent
//if the driver is an http driver
InputStream is = null;
String defClassName = getDefiningClassName();
try{
//check whether this class is defined in this class loader
ClassLoader cl = this.getClass().getClassLoader();
cl.loadClass(defClassName);
}catch(ClassNotFoundException cnfe){
String tempDir = System.getProperty("faban.tmpdir");
if(tempDir==null){
tempDir = System.getProperty("java.io.tmpdir");
}
File classFile = new File(tempDir);
URL url[]= new URL[1];
try {
url[0] = classFile.toURI().toURL();
} catch (MalformedURLException ex) {
throw new ConfigurationException(ex);
}
URLClassLoader loader = new URLClassLoader(url, BenchmarkDefinition.class.getClassLoader());
try{
loader.loadClass(defClassName);
is = loader.getResourceAsStream(defClassName+".class");
runInfo.defBytes = new byte[is.available()];
is.read(runInfo.defBytes);
is.close();
System.out.println("Bytes Read from class :"+runInfo.defBytes.length);
}catch(ClassNotFoundException cnfex){
throw new ConfigurationException(cnfex);
}catch(IOException ioex){
throw new ConfigurationException(ioex);
}
}
}
return runInfo;
}