package com.bizo.asperatus.tracker.impl;
import static org.junit.Assert.assertEquals;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import org.junit.Test;
import com.bizo.asperatus.model.CompoundDimension;
import com.bizo.asperatus.model.Dimension;
import com.bizo.asperatus.model.Unit;
import com.bizo.asperatus.tracker.impl.buffer.InMemoryTracker;
import com.google.common.collect.Lists;
public final class InMemoryTrackerTest {
private final InMemoryTracker tracker = new InMemoryTracker();
@Test
public void test() {
List<CompoundDimension> dims = Lists.newArrayList(new CompoundDimension(new Dimension("d1", "x"), new Dimension("d2", "z")));
tracker.track("a", 1, Unit.Count, dims);
tracker.track("a", 2, Unit.Count, dims);
dims.clear();
dims.add(new CompoundDimension(new Dimension("d1", "x"), new Dimension("d1", "v"), new Dimension("d3", "z")));
tracker.track("a", 1, Unit.Count, dims);
tracker.track("a", 2, Unit.Count, dims);
tracker.track("b", 1, Unit.Seconds, dims);
tracker.track("b", 7, Unit.Seconds, dims);
final Map<MetricKey, MetricStatistics> data = tracker.reset();
assertEquals(3, data.size());
// verify it's clear
assertEquals(0, tracker.reset().size());
// check records
assertStats(data, "a", "d1=x,d2=z", Unit.Count, 2, 3, 1, 2);
assertStats(data, "a", "d1=x,d1=v,d3=z", Unit.Count, 2, 3, 1, 2);
assertStats(data, "b", "d1=x,d1=v,d3=z", Unit.Seconds, 2, 8, 1, 7);
}
private void assertStats(
final Map<MetricKey, MetricStatistics> data,
final String name,
final String dims,
final Unit unit,
final long count,
final float sum,
final float min,
final float max) {
final MetricStatistics stats = data.get(new MetricKey(name, toDims(dims)));
assertEquals(count, stats.getSamples());
assertEquals(sum, stats.getSum(), 0.0000001f);
assertEquals(min, stats.getMin(), 0.0000001f);
assertEquals(max, stats.getMax(), 0.0000001f);
assertEquals(unit, stats.getUnit());
}
private CompoundDimension toDims(final String s) {
final List<Dimension> ret = new ArrayList<Dimension>();
final String[] dims = s.split(",");
for (final String d : dims) {
final String[] p = d.split("=");
ret.add(new Dimension(p[0], p[1]));
}
return new CompoundDimension(ret);
}
}