package com.bizo.asperatus.tracker.impl; import java.util.ArrayList; import java.util.Collection; import java.util.List; import com.amazonaws.services.cloudwatch.model.Dimension; import com.amazonaws.services.cloudwatch.model.MetricDatum; import com.amazonaws.services.cloudwatch.model.StatisticSet; import com.bizo.asperatus.model.Unit; /** * Convert to/from Amazon data structures. */ public final class AggregationUtils { private AggregationUtils() { } public static List<MetricDatum> toMetricDatum(final List<Aggregation> agg) { final List<MetricDatum> out = new ArrayList<MetricDatum>(agg.size()); for (final Aggregation a : agg) { out.add(toMetricDatum(a)); } return out; } public static MetricDatum toMetricDatum(final Aggregation agg) { final MetricDatum datum = new MetricDatum(); for (final com.bizo.asperatus.model.Dimension _d : agg.getDimensions()) { final Dimension d = new Dimension(); d.setName(_d.getName()); d.setValue(_d.getValue()); datum.withDimensions(d); } datum.setUnit(agg.getUnit().getValue()); datum.setMetricName(agg.getName()); final StatisticSet stats = new StatisticSet(); stats.setSum(agg.getSum()); stats.setSampleCount(agg.getCount()); stats.setMaximum(agg.getMax()); stats.setMinimum(agg.getMin()); datum.setStatisticValues(stats); return datum; } public static Aggregation toAggregation(final MetricDatum datum) { final List<com.bizo.asperatus.model.Dimension> dimensions = new ArrayList<com.bizo.asperatus.model.Dimension>(datum.getDimensions().size()); for (final Dimension d : datum.getDimensions()) { dimensions.add(new com.bizo.asperatus.model.Dimension(d.getName(), d.getValue())); } final StatisticSet stats = datum.getStatisticValues(); final Unit unit = Unit.fromValue(datum.getUnit()); return new Aggregation(datum.getMetricName(), stats.getSampleCount(), stats.getSum(), stats.getMinimum(), stats.getMaximum(), unit, dimensions); } public static List<Aggregation> toAggregation(final Collection<MetricDatum> datum) { final List<Aggregation> out = new ArrayList<Aggregation>(datum.size()); for (final MetricDatum d : datum) { out.add(toAggregation(d)); } return out; } }