package org.keycloak.testsuite.performance;
import org.keycloak.testsuite.performance.statistics.DataHoldingUpdatableStatistic;
import org.keycloak.testsuite.performance.statistics.MovingUpdatableStatistic;
import org.keycloak.testsuite.performance.statistics.SimpleStatistics;
import org.keycloak.testsuite.performance.statistics.UpdatableStatistic;
import org.keycloak.testsuite.performance.statistics.UpdatableStatistics;
import java.util.concurrent.ConcurrentHashMap;
/**
* PerformanceStatistics. Concurrent hash map of UpdatableStatistic objects,
* type of which can be selected by the "statistic.type" property.
*
* @author tkyjovsk
*/
public class PerformanceStatistics extends ConcurrentHashMap<String, UpdatableStatistic> implements UpdatableStatistics {
public static final String STATISTIC_TYPE = System.getProperty("statistic.type", MovingUpdatableStatistic.STATISTIC_TYPE_PROPERTY_VALUE);
@Override
public void reset() {
clear();
}
private UpdatableStatistic createIfNullAndGet(String statistic) {
UpdatableStatistic updatableStatistic = get(statistic);
if (updatableStatistic == null) {
switch (STATISTIC_TYPE) {
case DataHoldingUpdatableStatistic.STATISTIC_TYPE_PROPERTY_VALUE:
updatableStatistic = new DataHoldingUpdatableStatistic();
break;
case MovingUpdatableStatistic.STATISTIC_TYPE_PROPERTY_VALUE:
updatableStatistic = new DataHoldingUpdatableStatistic();
break;
default:
throw new IllegalStateException(String.format(
"Unknown statistic type: '%s'. Supported values: %s | %s",
STATISTIC_TYPE,
DataHoldingUpdatableStatistic.STATISTIC_TYPE_PROPERTY_VALUE,
MovingUpdatableStatistic.STATISTIC_TYPE_PROPERTY_VALUE));
}
put(statistic, updatableStatistic);
}
return updatableStatistic;
}
@Override
public void addValue(String statistic, long value) {
createIfNullAndGet(statistic).addValue(value);
}
public SimpleStatistics snapshot() {
return new SimpleStatistics(this);
}
}