package com.griddynamics.jagger.engine.e1.collector; import com.griddynamics.jagger.util.statistics.StatisticsCalculator; /** Calculates percentile value on the interval. Percentile must be passed in constructor * @author Anton Antonenko * * @ingroup Main_Aggregators_group */ public class PercentileAggregatorProvider implements MetricAggregatorProvider { private Double percentile = 95D; public PercentileAggregatorProvider(Double percentile) { this.percentile = percentile; } public PercentileAggregatorProvider() {} @Override public MetricAggregator provide() { return new PercentileAggregator(); } private class PercentileAggregator implements MetricAggregator<Number> { private StatisticsCalculator statisticsCalculator = new StatisticsCalculator(); @Override public void append(Number calculated) { statisticsCalculator.addValue(calculated.doubleValue()); } @Override public Number getAggregated() { Double result = statisticsCalculator.getPercentile(percentile); return result.isNaN() ? null : result; } @Override public void reset() { statisticsCalculator.reset(); } @Override public String getName() { return percentile + "%"; } } }