package tr.gov.ulakbim.jDenetX.db;
import javarrd.net.stamfest.rrd.RRDCommandPool;
import javarrd.net.stamfest.rrd.RRDToolService;
import org.apache.commons.lang3.ArrayUtils;
import tr.gov.ulakbim.jDenetX.evaluation.SelfOzaBoostClassificationPerformanceEvaluator;
import java.util.Enumeration;
import java.util.HashMap;
/**
* Created by IntelliJ IDEA.
* User: caglar
* Date: 10/19/11
* Time: 9:12 PM
* To change this template use File | Settings | File Templates.
*/
public class RRDResultsSaver {
protected HashMap<String, Integer> ClassesCountPool;
protected Enumeration<String> classNames;
protected long startTime;
protected RRDCommandPool pool = null;
protected RRDToolService rrdToolService = null;
protected final int PoolSize = 20;
protected int StepSize;
protected boolean isRRDCreated = false;
private final int MaxDS = 100000;
public RRDResultsSaver(int stepSize, String baseDir) {
StepSize = stepSize;
pool = new RRDCommandPool(PoolSize, baseDir, null);
rrdToolService = new RRDToolService(pool);
this.ClassesCountPool = new HashMap<String, Integer>();
}
public void createRRD(String rrdFilename, int noOfClasses, Enumeration<String> classes) {
String argsBegin[] = {
"--step " + StepSize
};
classNames = classes;
String argsDS[] = new String[noOfClasses + 3];
int i = 0;
while (classes.hasMoreElements()) {
argsDS[i] = "DS:" + classes.nextElement() + ":GAUGE:" + 1 + ":" + 0 + ":" + MaxDS;
i++;
}
argsDS[noOfClasses] = "RRA:MIN:0.5:12:2400";
argsDS[noOfClasses + 1] = "RRA:MAX:0.5:12:2400";
argsDS[noOfClasses + 2] = "RRA:AVERAGE:0.5:12:2400";
String args[] = (String[]) ArrayUtils.addAll(argsBegin, argsDS);
System.out.println(rrdFilename);
for (String arg : args) {
System.out.println(arg);
}
try {
rrdToolService.create(rrdFilename, args);
} catch (Exception e) {
e.printStackTrace();
}
isRRDCreated = true;
}
public void updateRRDs(String rrdFilename, SelfOzaBoostClassificationPerformanceEvaluator sbcpe) {
if (startTime == 0) {
startTime = System.currentTimeMillis();
}
long endTime = System.currentTimeMillis();
String arg = "N:";
int[] instancesClassCounts = sbcpe.getInstancesClassesCount();
if (Math.abs(startTime - endTime) >= (StepSize * 999)) {
for (int i = 0; i < instancesClassCounts.length; i++) {
if (instancesClassCounts[i] == 0) {
arg += "U:";
} else {
arg += instancesClassCounts[i] + ":";
}
}
arg = arg.substring(0, arg.length() - 1);
System.out.println(arg);
try {
rrdToolService.update(rrdFilename, arg);
} catch (Exception e) {
e.printStackTrace();
}
sbcpe.reset();
startTime = System.currentTimeMillis();
}
}
public boolean isRRDCreated() {
return isRRDCreated;
}
}