MetricDatum datum = data.get(key);
if (datum == null) {
data.put(key,
new MetricDatum().withMetricName(name)
.withUnit(unit)
.withStatisticValues(new StatisticSet().withMaximum(value)
.withMinimum(value)
.withSampleCount(1.0)
.withSum(value)));
} else {
if (!datum.getUnit().equals(unit.name())) {
throw new IllegalArgumentException("Cannot add to existing metric with different unit");
}
StatisticSet statistics = datum.getStatisticValues();
statistics.setMaximum(Math.max(value, statistics.getMaximum()));
statistics.setMinimum(Math.min(value, statistics.getMinimum()));
statistics.setSampleCount(statistics.getSampleCount() + 1);
statistics.setSum(statistics.getSum() + value);
}
}