package io.prometheus.client; import java.util.ArrayList; import java.util.Collections; import java.util.List; /** * Counter metric family, for custom collectors and exporters. * <p> * Most users want a normal {@link Counter} instead. * * Example usage: * <pre> * {@code * class YourCustomCollector extends Collector { * List<MetricFamilySamples> collect() { * List<MetricFamilySamples> mfs = new ArrayList<MetricFamilySamples>(); * // With no labels. * mfs.add(new CounterMetricFamily("my_counter_total", "help", 42)); * // With labels * CounterMetricFamily labeledCounter = new CounterMetricFamily("my_other_counter_total", "help", Arrays.asList("labelname")); * labeledCounter.addMetric(Arrays.asList("foo"), 4); * labeledCounter.addMetric(Arrays.asList("bar"), 5); * mfs.add(labeledCounter); * return mfs; * } * } * } * </pre> */ public class CounterMetricFamily extends Collector.MetricFamilySamples { private final List<String> labelNames; public CounterMetricFamily(String name, String help, double value) { super(name, Collector.Type.COUNTER, help, new ArrayList<Sample>()); labelNames = Collections.emptyList(); samples.add( new Sample( name, labelNames, Collections.<String>emptyList(), value)); } public CounterMetricFamily(String name, String help, List<String> labelNames) { super(name, Collector.Type.COUNTER, help, new ArrayList<Sample>()); this.labelNames = labelNames; } public CounterMetricFamily addMetric(List<String> labelValues, double value) { if (labelValues.size() != labelNames.size()) { throw new IllegalArgumentException("Incorrect number of labels."); } samples.add(new Sample(name, labelNames, labelValues, value)); return this; } }