The following example shows how to use curam.util.jmx. NumericalCounterStatisticsAggregator and curam.util.jmx.NumericalCounterStatistics to calculate and make available various arithmetic values for a numerical counter (average, minimum, maximum and standard deviation).
import curam.util.jmx.NumericCounterStatisticsAggregator;
...
/** Elapsed time statistics. */
private NumericCounterStatisticsAggregator
elapsedTimeStats;
/** Error counter. */
private AtomicLong errors;
/** Constructor. */
MyClass() {
super();
errors = new AtomicLong(0);
elapsedTimeStats =
new NumericCounterStatisticsAggregator();
}
/**
* Get the number of invocations.
*
* @return the number of invocations.
*/
long getInvocations() {
return this.elapsedTimeStats
.getNumberOfSamples();
}
/**
* Get elapsed time statistics.
*
* @return elapsed time statistics.
*/
NumericCounterStatistics getElapsedTimeStats() {
return elapsedTimeStats.getAll();
}
/**
* Get error counter.
*
* @return error counter.
*/
long getErrors() {
return errors.get();
}
/**
* Add a statistics sample.
*
* @param elapsedTime the elapsed time.
* @param error true if invocation ended in error.
*/
void addStats(long elapsedTime, boolean error) {
boolean reset = this.elapsedTimeStats
.add(elapsedTime);
if(reset) {
// Long.MAX_VALUE overflow
errors.set(0);
} else if(error){
if(errors.incrementAndGet() < 0) {
// Long.MAX_VALUE overflow
this.elapsedTimeStats.reset();
}
}
}
...