All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.github.kristofa.flume.MetricReporter Maven / Gradle / Ivy

Go to download

Flume Sink that will get application submitted annotations with duration from Zipkin spans and submit them to Metrics. Metrics can be configured to send metrics to several back-ends. Today this sink supports Graphite as back-end.

There is a newer version: 2.4.2
Show newest version
package com.github.kristofa.flume;

import java.io.Closeable;

import org.apache.commons.lang.Validate;

import com.codahale.metrics.Histogram;
import com.codahale.metrics.MetricRegistry;
import com.codahale.metrics.ScheduledReporter;

/**
 * Used to update metrics and report on them.
 * 
 * @author kristof
 */
class MetricReporter implements Closeable {

    private final MetricRegistry metricRegistry;
    private final ScheduledReporter reporter;
    private final HistogramBuilder histogramBuilder;

    /**
     * Creates a new instance.
     * 
     * @param metricRegistry Contains our metrics.
     * @param reporter Will report our metrics.
     * @param histogramBuilder Responsible for building new histograms.
     */
    public MetricReporter(final MetricRegistry metricRegistry, final ScheduledReporter reporter,
        final HistogramBuilder histogramBuilder) {
        Validate.notNull(metricRegistry);
        Validate.notNull(reporter);
        this.metricRegistry = metricRegistry;
        this.reporter = reporter;
        this.histogramBuilder = histogramBuilder;
    }

    /**
     * Updates metric with given name with given value.
     * 
     * @param name Metric name.
     * @param value Metric value.
     */
    public void update(final String name, final long value) {
        final Histogram histogram = getHistogram(name);
        histogram.update(value);
    }

    /**
     * {@inheritDoc}
     */
    @Override
    public void close() {
        reporter.close();
    }

    /**
     * Gets a Histogram.
     * 
     * @param name Name for metric.
     * @return Histogram.
     */
    private Histogram getHistogram(final String name) {
        Histogram histogram = metricRegistry.getHistograms().get(name);
        if (histogram == null) {
            histogram = histogramBuilder.buildHistogram();
            metricRegistry.register(name, histogram);
        }
        return histogram;
    }

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy