package org.radargun.stats;
import java.util.concurrent.TimeUnit;
import org.radargun.config.DefinitionElement;
import org.radargun.config.Init;
import org.radargun.config.Property;
import org.radargun.utils.NanoTimeConverter;
import org.radargun.utils.TimeConverter;
/**
* @author Radim Vansa <rvansa@redhat.com>
*/
@DefinitionElement(name = "common", doc = "Sampled basic statistics with histogram for the whole duration.")
public class CommonStatistics extends MultiStatistics {
@Property(doc = "Duration of one sample in stats. Defaults to 1 second.", converter = TimeConverter.class)
private long period = 1000;
@Property(doc = "Maximum value that could be recorded in histogram. Default is one hour.", converter = NanoTimeConverter.class)
private long maxValue = TimeUnit.HOURS.toNanos(1);
@Property(doc = "Number of significant digits in histogram. Default is 2.")
private int digits = 2;
public CommonStatistics() {
super(new Statistics[] {new BasicStatistics(), new PeriodicStatistics(), new BasicStatistics(new HistogramOperationStats())});
}
private CommonStatistics(Statistics[] internal) {
super(internal);
}
@Init
public void init() {
((PeriodicStatistics) internal[1]).setPeriod(period);
((HistogramOperationStats) ((BasicStatistics) internal[2]).prototype).init(maxValue, digits);
}
@Override
protected MultiStatistics newInstance(Statistics[] internal) {
return new CommonStatistics(internal);
}
@Override
protected MultiStatistics copy(Statistics[] internalCopy) {
return new CommonStatistics(internalCopy);
}
}