package org.rhq.server.metrics;
import java.util.List;
import com.datastax.driver.core.ResultSet;
import com.google.common.base.Function;
import org.rhq.server.metrics.domain.AggregateNumericMetric;
import org.rhq.server.metrics.domain.Bucket;
import org.rhq.server.metrics.domain.RawNumericMetric;
import org.rhq.server.metrics.domain.RawNumericMetricMapper;
/**
* @author John Sanda
*/
public class ComputeRawAggregate implements Function<ResultSet, AggregateNumericMetric> {
private RawNumericMetricMapper mapper;
private long timestamp;
public ComputeRawAggregate(long timestamp) {
this.timestamp = timestamp;
mapper = new RawNumericMetricMapper();
}
@Override
public AggregateNumericMetric apply(ResultSet resultSet) {
List<RawNumericMetric> rawMetrics = mapper.mapAll(resultSet);
double min = Double.NaN;
double max = min;
int count = 0;
ArithmeticMeanCalculator mean = new ArithmeticMeanCalculator();
double value;
for (RawNumericMetric metric : rawMetrics) {
value = metric.getValue();
if (count == 0) {
min = value;
max = min;
}
if (value < min) {
min = value;
} else if (value > max) {
max = value;
}
mean.add(value);
++count;
}
// We let the caller handle setting the schedule id because in some cases we do
// not care about it.
return new AggregateNumericMetric(0, Bucket.ONE_HOUR, mean.getArithmeticMean(), min, max, timestamp);
}
}