diff options
Diffstat (limited to 'simplemetrics/src/main/java/com/yahoo/metrics/simple/jdisc/JdiscMetricsFactory.java')
-rw-r--r-- | simplemetrics/src/main/java/com/yahoo/metrics/simple/jdisc/JdiscMetricsFactory.java | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/simplemetrics/src/main/java/com/yahoo/metrics/simple/jdisc/JdiscMetricsFactory.java b/simplemetrics/src/main/java/com/yahoo/metrics/simple/jdisc/JdiscMetricsFactory.java new file mode 100644 index 00000000000..f5208b2226c --- /dev/null +++ b/simplemetrics/src/main/java/com/yahoo/metrics/simple/jdisc/JdiscMetricsFactory.java @@ -0,0 +1,61 @@ +// Copyright 2016 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +package com.yahoo.metrics.simple.jdisc; + +import java.io.PrintStream; +import java.util.logging.Logger; + +import com.yahoo.container.jdisc.MetricConsumerFactory; +import com.yahoo.container.jdisc.state.MetricSnapshot; +import com.yahoo.container.jdisc.state.SnapshotProvider; +import com.yahoo.jdisc.application.MetricConsumer; +import com.yahoo.metrics.simple.Bucket; +import com.yahoo.metrics.simple.MetricReceiver; + +/** + * A factory for all the JDisc API classes. + * + * @author <a href="mailto:steinar@yahoo-inc.com">Steinar Knutsen</a> + */ +public class JdiscMetricsFactory implements MetricConsumerFactory, SnapshotProvider { + private static final Logger log = Logger.getLogger(JdiscMetricsFactory.class.getName()); + private final SimpleMetricConsumer metricInstance; + private final MetricReceiver metricReceiver; + + public JdiscMetricsFactory(MetricReceiver receiver) { + this.metricReceiver = receiver; + this.metricInstance = new SimpleMetricConsumer(receiver); + } + + @Override + public MetricConsumer newInstance() { + // the underlying implementation is thread safe anyway to allow for stand-alone use + return metricInstance; + } + + + @Override + public MetricSnapshot latestSnapshot() { + Bucket curr = metricReceiver.getSnapshot(); + if (curr == null) { + log.warning("no snapshot from instance of " + metricInstance.getClass()); + return null; + } else { + SnapshotConverter converter = new SnapshotConverter(curr); + return converter.convert(); + } + } + + @Override + public void histogram(PrintStream output) { + Bucket curr = metricReceiver.getSnapshot(); + if (curr == null) { + log.warning("no snapshot from instance of " + metricInstance.getClass()); + return; + } else { + SnapshotConverter converter = new SnapshotConverter(curr); + converter.outputHistograms(output); + return; + } + } + +} |