private StringBuilder appendHistogram(StringBuilder sb, MetricsHistogram histogram) { sb = Strings.appendKeyValue(sb, histogram.getName() + "Mean", StringUtils.limitDecimalTo2(histogram.getMean())); sb = Strings.appendKeyValue(sb, histogram.getName() + "Count", StringUtils.limitDecimalTo2(histogram.getCount())); final Snapshot s = histogram.getSnapshot(); sb = Strings.appendKeyValue(sb, histogram.getName() + "Median", StringUtils.limitDecimalTo2(s.getMedian())); sb = Strings.appendKeyValue(sb, histogram.getName() + "75th", StringUtils.limitDecimalTo2(s.get75thPercentile())); sb = Strings.appendKeyValue(sb, histogram.getName() + "95th", StringUtils.limitDecimalTo2(s.get95thPercentile())); sb = Strings.appendKeyValue(sb, histogram.getName() + "99th", StringUtils.limitDecimalTo2(s.get99thPercentile())); sb = Strings.appendKeyValue(sb, histogram.getName() + "999th", StringUtils.limitDecimalTo2(s.get999thPercentile())); return sb; }
@Test public void testPushMetric() { final MetricsHistogram h = new MetricsHistogram("testHistogram", null); genRandomData(h); MetricsRecord mr = mock(MetricsRecord.class); h.pushMetric(mr); verify(mr).setMetric("testHistogram_num_ops", 10000L); verify(mr).setMetric(eq("testHistogram_min"), anyLong()); verify(mr).setMetric(eq("testHistogram_max"), anyLong()); verify(mr).setMetric(eq("testHistogram_mean"), anyFloat()); verify(mr).setMetric(eq("testHistogram_std_dev"), anyFloat()); verify(mr).setMetric(eq("testHistogram_median"), anyFloat()); verify(mr).setMetric(eq("testHistogram_75th_percentile"), anyFloat()); verify(mr).setMetric(eq("testHistogram_95th_percentile"), anyFloat()); verify(mr).setMetric(eq("testHistogram_99th_percentile"), anyFloat()); }
private static MetricsRegistry copyMinusHBaseMetrics(final MetricsRegistry mr) { MetricsRegistry copy = new MetricsRegistry(); for (MetricsBase metric : mr.getMetricsList()) { if (metric instanceof MetricsRate || metric instanceof MetricsString || metric instanceof MetricsHistogram || metric instanceof ExactCounterMetric) { continue; } copy.add(metric.getName(), metric); } return copy; }
@Test public void testBasicUniform() { MetricsHistogram h = new MetricsHistogram("testHistogram", null); for (int i = 0; i < 100; i++) { h.update(i); } Assert.assertEquals(100, h.getCount()); Assert.assertEquals(0, h.getMin()); Assert.assertEquals(99, h.getMax()); Assert.assertEquals(49.5d, h.getMean(), 0.01); }
@Test public void testSnapshotPercentiles() { final MetricsHistogram h = new MetricsHistogram("testHistogram", null); final long[] data = genRandomData(h); final Snapshot s = h.getSnapshot(); assertPercentile(data, 50, s.getMedian()); assertPercentile(data, 75, s.get75thPercentile()); assertPercentile(data, 95, s.get95thPercentile()); assertPercentile(data, 98, s.get98thPercentile()); assertPercentile(data, 99, s.get99thPercentile()); assertPercentile(data, 99.9, s.get999thPercentile()); }
private long[] genRandomData(final MetricsHistogram h) { final Random r = new Random(); final long[] data = new long[10000]; for (int i = 0; i < data.length; i++) { data[i] = (long) (r.nextGaussian() * 10000); h.update(data[i]); } return data; }
@Test public void testBasicUniform() { MetricsHistogram h = new MetricsHistogram("testHistogram", null); for (int i = 0; i < 100; i++) { h.update(i); } Assert.assertEquals(100, h.getCount()); Assert.assertEquals(0, h.getMin()); Assert.assertEquals(99, h.getMax()); }