package com.ldbc.driver.runtime.metrics; import com.ldbc.driver.util.Bucket; import com.ldbc.driver.util.Bucket.DiscreteBucket; import com.ldbc.driver.util.Histogram; import java.util.HashMap; import java.util.Map; import java.util.Map.Entry; public class DiscreteMetricManager { private final Histogram<Long, Integer> measurements; private final String name; private final String unit; private long measurementMin = Long.MAX_VALUE; private long measurementMax = Long.MIN_VALUE; public DiscreteMetricManager(String name, String unit) { this.measurements = new Histogram<>(0); this.name = name; this.unit = unit; } public void addMeasurement(long value) { measurements.incOrCreateBucket(DiscreteBucket.create(value), 1); measurementMin = (value < measurementMin) ? value : measurementMin; measurementMax = (value > measurementMax) ? value : measurementMax; } public DiscreteMetricSnapshot snapshot() { return new DiscreteMetricSnapshot(name, unit, count(), allValues()); } private long count() { return measurements.sumOfAllBucketValues(); } private Map<Long, Long> allValues() { Map<Long, Long> allValuesMap = new HashMap<Long, Long>(); for (Entry<Bucket<Long>, Integer> entry : measurements.getAllBuckets()) { long resultCode = ((DiscreteBucket<Long>) entry.getKey()).getId(); long resultCodeCount = entry.getValue(); allValuesMap.put(resultCode, resultCodeCount); } return allValuesMap; } }