diff --git a/hbase-hadoop2-compat/src/main/java/org/apache/hadoop/metrics2/lib/MutableHistogram.java b/hbase-hadoop2-compat/src/main/java/org/apache/hadoop/metrics2/lib/MutableHistogram.java index 1251d9f..def0b43 100644 --- a/hbase-hadoop2-compat/src/main/java/org/apache/hadoop/metrics2/lib/MutableHistogram.java +++ b/hbase-hadoop2-compat/src/main/java/org/apache/hadoop/metrics2/lib/MutableHistogram.java @@ -19,6 +19,7 @@ package org.apache.hadoop.metrics2.lib; import java.util.concurrent.atomic.AtomicLong; +import java.util.concurrent.atomic.AtomicLongArray; import org.apache.commons.lang.StringUtils; import org.apache.hadoop.hbase.classification.InterfaceAudience; @@ -48,6 +49,8 @@ public class MutableHistogram extends MutableMetric implements MetricHistogram { private final AtomicLong max; private final AtomicLong sum; private final AtomicLong count; + private final long[] bandValues = {1,3,10,30,100,300,1000,3000,10000,30000,60000,120000,300000,600000}; + private final AtomicLongArray bands = new AtomicLongArray(bandValues.length+1); public MutableHistogram(MetricsInfo info) { this(info.name(), info.description()); @@ -70,6 +73,13 @@ public class MutableHistogram extends MutableMetric implements MetricHistogram { setMax(val); setMin(val); sum.getAndAdd(val); + updateBand(val); + } + + private void updateBand(final long val) { + int i; + for (i=0; i bandValues[i]; i++); + bands.incrementAndGet(i); } private void setMax(final long potentialMax) { @@ -132,6 +142,16 @@ public class MutableHistogram extends MutableMetric implements MetricHistogram { s.get95thPercentile()); metricsRecordBuilder.addGauge(Interns.info(name + NINETY_NINETH_PERCENTILE_METRIC_NAME, desc), s.get99thPercentile()); + + long prior = 0; + for (int i = 0; i < bandValues.length; i++) { + metricsRecordBuilder + .addCounter(Interns.info(name + "_" + prior + "-" + bandValues[i], desc), bands.get(i)); + prior = i; + } + metricsRecordBuilder.addCounter( + Interns.info(name + "_>" + bandValues[bandValues.length - 1], desc), + bands.get(bandValues.length)); } } }