Class DynamicMetricsRegistry

java.lang.Object
org.apache.hadoop.metrics2.lib.DynamicMetricsRegistry

@Private public class DynamicMetricsRegistry extends Object
An optional metrics registry class for creating and maintaining a collection of MetricsMutables, making writing metrics source easier. NOTE: this is a copy of org.apache.hadoop.metrics2.lib.MetricsRegistry with added one feature: metrics can be removed. When HADOOP-8313 is fixed, usages of this class should be substituted with org.apache.hadoop.metrics2.lib.MetricsRegistry. This implementation also provides handy methods for creating metrics dynamically. Another difference is that metricsMap implementation is substituted with thread-safe map, as we allow dynamic metrics additions/removals.
  • Field Details

  • Constructor Details

    • DynamicMetricsRegistry

      Construct the registry with a record name
      Parameters:
      name - of the record of the metrics
    • DynamicMetricsRegistry

      public DynamicMetricsRegistry(org.apache.hadoop.metrics2.MetricsInfo info)
      Construct the registry with a metadata object
      Parameters:
      info - the info object for the metrics record/group
  • Method Details

    • info

      public org.apache.hadoop.metrics2.MetricsInfo info()
      Returns the info object of the metrics registry
    • get

      public org.apache.hadoop.metrics2.lib.MutableMetric get(String name)
      Get a metric by name
      Parameters:
      name - of the metric
      Returns:
      the metric object
    • getTag

      public org.apache.hadoop.metrics2.MetricsTag getTag(String name)
      Get a tag by name
      Parameters:
      name - of the tag
      Returns:
      the tag object
    • newCounter

      public MutableFastCounter newCounter(String name, String desc, long iVal)
      Create a mutable long integer counter
      Parameters:
      name - of the metric
      desc - metric description
      iVal - initial value
      Returns:
      a new counter object
    • newCounter

      public MutableFastCounter newCounter(org.apache.hadoop.metrics2.MetricsInfo info, long iVal)
      Create a mutable long integer counter
      Parameters:
      info - metadata of the metric
      iVal - initial value
      Returns:
      a new counter object
    • newGauge

      public org.apache.hadoop.metrics2.lib.MutableGaugeLong newGauge(String name, String desc, long iVal)
      Create a mutable long integer gauge
      Parameters:
      name - of the metric
      desc - metric description
      iVal - initial value
      Returns:
      a new gauge object
    • newGauge

      public org.apache.hadoop.metrics2.lib.MutableGaugeLong newGauge(org.apache.hadoop.metrics2.MetricsInfo info, long iVal)
      Create a mutable long integer gauge
      Parameters:
      info - metadata of the metric
      iVal - initial value
      Returns:
      a new gauge object
    • newStat

      public org.apache.hadoop.metrics2.lib.MutableStat newStat(String name, String desc, String sampleName, String valueName, boolean extended)
      Create a mutable metric with stats
      Parameters:
      name - of the metric
      desc - metric description
      sampleName - of the metric (e.g., "Ops")
      valueName - of the metric (e.g., "Time" or "Latency")
      extended - produce extended stat (stdev, min/max etc.) if true.
      Returns:
      a new mutable stat metric object
    • newStat

      public org.apache.hadoop.metrics2.lib.MutableStat newStat(String name, String desc, String sampleName, String valueName)
      Create a mutable metric with stats
      Parameters:
      name - of the metric
      desc - metric description
      sampleName - of the metric (e.g., "Ops")
      valueName - of the metric (e.g., "Time" or "Latency")
      Returns:
      a new mutable metric object
    • newRate

      public org.apache.hadoop.metrics2.lib.MutableRate newRate(String name)
      Create a mutable rate metric
      Parameters:
      name - of the metric
      Returns:
      a new mutable metric object
    • newRate

      public org.apache.hadoop.metrics2.lib.MutableRate newRate(String name, String description)
      Create a mutable rate metric
      Parameters:
      name - of the metric
      description - of the metric
      Returns:
      a new mutable rate metric object
    • newRate

      public org.apache.hadoop.metrics2.lib.MutableRate newRate(String name, String desc, boolean extended)
      Create a mutable rate metric (for throughput measurement)
      Parameters:
      name - of the metric
      desc - description
      extended - produce extended stat (stdev/min/max etc.) if true
      Returns:
      a new mutable rate metric object
    • newRate

      @Private public org.apache.hadoop.metrics2.lib.MutableRate newRate(String name, String desc, boolean extended, boolean returnExisting)
    • newHistogram

      Create a new histogram.
      Parameters:
      name - Name of the histogram.
      Returns:
      A new MutableHistogram
    • newHistogram

      Create a new histogram.
      Parameters:
      name - The name of the histogram
      desc - The description of the data in the histogram.
      Returns:
      A new MutableHistogram
    • newTimeHistogram

      Create a new histogram with time range counts.
      Parameters:
      name - Name of the histogram.
      Returns:
      A new MutableTimeHistogram
    • newTimeHistogram

      Create a new histogram with time range counts.
      Parameters:
      name - The name of the histogram
      desc - The description of the data in the histogram.
      Returns:
      A new MutableTimeHistogram
    • newSizeHistogram

      Create a new histogram with size range counts.
      Parameters:
      name - Name of the histogram.
      Returns:
      A new MutableSizeHistogram
    • newSizeHistogram

      Create a new histogram with size range counts.
      Parameters:
      name - The name of the histogram
      desc - The description of the data in the histogram.
      Returns:
      A new MutableSizeHistogram
    • add

      void add(String name, org.apache.hadoop.metrics2.lib.MutableMetric metric)
    • add

      public void add(String name, long value)
      Add sample to a stat metric by name.
      Parameters:
      name - of the metric
      value - of the snapshot to add
    • setContext

      Set the metrics context tag
      Parameters:
      name - of the context
      Returns:
      the registry itself as a convenience
    • tag

      public DynamicMetricsRegistry tag(String name, String description, String value)
      Add a tag to the metrics
      Parameters:
      name - of the tag
      description - of the tag
      value - of the tag
      Returns:
      the registry (for keep adding tags)
    • tag

      public DynamicMetricsRegistry tag(String name, String description, String value, boolean override)
      Add a tag to the metrics
      Parameters:
      name - of the tag
      description - of the tag
      value - of the tag
      override - existing tag if true
      Returns:
      the registry (for keep adding tags)
    • tag

      public DynamicMetricsRegistry tag(org.apache.hadoop.metrics2.MetricsInfo info, String value, boolean override)
      Add a tag to the metrics
      Parameters:
      info - metadata of the tag
      value - of the tag
      override - existing tag if true
      Returns:
      the registry (for keep adding tags etc.)
    • tag

      public DynamicMetricsRegistry tag(org.apache.hadoop.metrics2.MetricsInfo info, String value)
    • tags

      Collection<org.apache.hadoop.metrics2.MetricsTag> tags()
    • metrics

      Collection<org.apache.hadoop.metrics2.lib.MutableMetric> metrics()
    • snapshot

      public void snapshot(org.apache.hadoop.metrics2.MetricsRecordBuilder builder, boolean all)
      Sample all the mutable metrics and put the snapshot in the builder
      Parameters:
      builder - to contain the metrics snapshot
      all - get all the metrics even if the values are not changed.
    • toString

      public String toString()
      Overrides:
      toString in class Object
    • removeMetric

      public void removeMetric(String name)
      Removes metric by name
      Parameters:
      name - name of the metric to remove
    • removeHistogramMetrics

      public void removeHistogramMetrics(String baseName)
    • getGauge

      public org.apache.hadoop.metrics2.lib.MutableGaugeLong getGauge(String gaugeName, long potentialStartingValue)
      Get a MetricMutableGaugeLong from the storage. If it is not there atomically put it.
      Parameters:
      gaugeName - name of the gauge to create or get.
      potentialStartingValue - value of the new gauge if we have to create it.
    • getGaugeInt

      public org.apache.hadoop.metrics2.lib.MutableGaugeInt getGaugeInt(String gaugeName, int potentialStartingValue)
      Get a MetricMutableGaugeInt from the storage. If it is not there atomically put it.
      Parameters:
      gaugeName - name of the gauge to create or get.
      potentialStartingValue - value of the new gauge if we have to create it.
    • getCounter

      public MutableFastCounter getCounter(String counterName, long potentialStartingValue)
      Get a MetricMutableCounterLong from the storage. If it is not there atomically put it.
      Parameters:
      counterName - Name of the counter to get
      potentialStartingValue - starting value if we have to create a new counter
    • getHistogram

      public MutableHistogram getHistogram(String histoName)
    • addNewMetricIfAbsent

      private <T extends org.apache.hadoop.metrics2.lib.MutableMetric> T addNewMetricIfAbsent(String name, T ret, Class<T> metricClass)
    • returnExistingWithCast

      private <T> T returnExistingWithCast(org.apache.hadoop.metrics2.lib.MutableMetric metric, Class<T> metricClass, String name)
    • clearMetrics

      public void clearMetrics()
    • getMetricsMap

      public ConcurrentMap<String,org.apache.hadoop.metrics2.lib.MutableMetric> getMetricsMap()