package hu.sztaki.ilab.longneck.process.task;
import java.util.List;
/**
*
* @author Peter Molnar <molnar.peter@sztaki.mta.hu>
*/
public class TaskStatistics {
/** Task type. */
private final TaskType type;
/** Records read from input. */
long in = 0;
/** Records created by cloning. */
long cloned = 0;
/** Records written to output. */
long out = 0;
/** Records filtered. */
long filtered = 0;
/** Records failed. */
long failed = 0;
/** Total processing time. */
long totalTimeMillis = 0;
/** Wait time. */
long blockedTimeMillis = 0;
/** Measuring time. */
static boolean measureTimeEnabled = false;
public TaskStatistics(TaskType type) {
this.type = type;
}
public long getCloned() {
return cloned;
}
public long getIn() {
return in;
}
public long getOut() {
return out;
}
public long getFiltered() {
return filtered;
}
public long getFailed() {
return failed;
}
public long getTotalTimeMillis() {
return totalTimeMillis;
}
public long getBlockedTimeMillis() {
return blockedTimeMillis;
}
public double getRecordsPerSec() {
return totalTimeMillis > 0 ? (new Double(out) / totalTimeMillis * 1000) : 0;
}
public void setMeasureTimeEnabled(boolean measureTimeEnabled) {
this.measureTimeEnabled = measureTimeEnabled;
}
@Override
public String toString() {
String ret = "in: %1$d; cloned: %2$d; filtered: %3$d; out: %4$d; failed: %5$d; ";
if (measureTimeEnabled) {
ret += " total time: %6$d ms; blocked time: %7$d ms; throughput: %8$f records/s;";
}
return String.format(ret, in, cloned, filtered, out, failed, totalTimeMillis, blockedTimeMillis,
getRecordsPerSec());
}
public static TaskStatistics avg(List<TaskStatistics> statList) {
TaskStatistics sum = new TaskStatistics(TaskType.Worker);
long summarizedTotalTime = 0;
long summarizedBlockedTime = 0;
for (final TaskStatistics current : statList) {
sum.in += current.in;
sum.cloned += current.out;
sum.failed += current.failed;
sum.filtered += current.filtered;
sum.out += current.out;
summarizedTotalTime += current.totalTimeMillis;
summarizedBlockedTime += current.blockedTimeMillis;
}
// Calculate average values
sum.totalTimeMillis = summarizedTotalTime / statList.size();
sum.blockedTimeMillis = summarizedBlockedTime / statList.size();
return sum;
}
}