package org.stagemonitor.core.metrics; import com.codahale.metrics.Gauge; import static org.stagemonitor.core.metrics.MetricsAggregationReporter.computeMovingAverage; /** * Computes the average of multiple snapshots of a {@link Gauge}<? extends {@link Number}> */ public class AggregatedGauge implements Gauge<Double> { private double aggregatedNumberValue; private int count; public AggregatedGauge(Gauge<? extends Number> gauge) { add(gauge); } @Override public Double getValue() { return aggregatedNumberValue; } public void add(Gauge<? extends Number> gauge) { aggregatedNumberValue = computeMovingAverage(aggregatedNumberValue, count, gauge.getValue().doubleValue()); count++; } }