package org.keycloak.testsuite.performance.statistics;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
/**
*
* @author tkyjovsk
*/
public class DataHoldingUpdatableStatistic implements UpdatableStatistic {
public static final String STATISTIC_TYPE_PROPERTY_VALUE = "data";
private final List<Long> data = Collections.synchronizedList(new ArrayList<Long>());
@Override
public synchronized void reset() {
data.clear();
}
@Override
public synchronized void addValue(long value) {
data.add(value);
}
@Override
public synchronized long getCount() {
return data.size();
}
@Override
public synchronized long getMin() {
return Collections.min(data);
}
@Override
public synchronized long getMax() {
return Collections.max(data);
}
@Override
public synchronized double getAverage() {
long sum = 0;
for (long l : data) {
sum += l;
}
return data.isEmpty() ? 0 : sum / data.size();
}
@Override
public synchronized double getStandardDeviation() {
double average = getAverage();
long sumSquare = 0;
for (long l : data) {
sumSquare += l * l;
}
return data.isEmpty() ? 0
: Math.sqrt(sumSquare / data.size() - (average * average));
}
}