X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=opendaylight%2Fmd-sal%2Fsal-clustering-commons%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fcluster%2Freporting%2FMetricsReporter.java;h=a488342abaa2b9efeacbd52c9eefb69ba0f82e71;hb=a60f577d66eb510232b0e2ccca73d9e7a81af0c9;hp=b400fcab7d93fac0aa67fa6a7a1bd1862b4a6888;hpb=014ab8770cfe40cf0ce1f2c88e0b0666429c760c;p=controller.git diff --git a/opendaylight/md-sal/sal-clustering-commons/src/main/java/org/opendaylight/controller/cluster/reporting/MetricsReporter.java b/opendaylight/md-sal/sal-clustering-commons/src/main/java/org/opendaylight/controller/cluster/reporting/MetricsReporter.java index b400fcab7d..a488342aba 100644 --- a/opendaylight/md-sal/sal-clustering-commons/src/main/java/org/opendaylight/controller/cluster/reporting/MetricsReporter.java +++ b/opendaylight/md-sal/sal-clustering-commons/src/main/java/org/opendaylight/controller/cluster/reporting/MetricsReporter.java @@ -7,39 +7,53 @@ */ package org.opendaylight.controller.cluster.reporting; -import com.codahale.metrics.JmxReporter; import com.codahale.metrics.MetricRegistry; +import com.codahale.metrics.jmx.JmxReporter; +import com.google.common.cache.CacheBuilder; +import com.google.common.cache.CacheLoader; +import com.google.common.cache.LoadingCache; /** * Maintains metrics registry that is provided to reporters. * At the moment only one reporter exists {@code JmxReporter}. * More reporters can be added. - *

+ * + *

* The consumers of this class will only be interested in {@code MetricsRegistry} * where metrics for that consumer gets stored. */ public class MetricsReporter implements AutoCloseable { - private static final MetricRegistry METRICS_REGISTRY = new MetricRegistry(); - private static final String DOMAIN = "org.opendaylight.controller.actor.metric"; - private static final MetricsReporter INSTANCE = new MetricsReporter(); - - private final JmxReporter jmxReporter = JmxReporter.forRegistry(METRICS_REGISTRY).inDomain(DOMAIN).build(); - - private MetricsReporter() { + private static final LoadingCache METRIC_REPORTERS = CacheBuilder.newBuilder().build( + new CacheLoader() { + @Override + public MetricsReporter load(final String domainName) { + return new MetricsReporter(domainName); + } + }); + + private final String domainName; + private final JmxReporter jmxReporter; + private final MetricRegistry metricRegistry = new MetricRegistry(); + + MetricsReporter(final String domainName) { + this.domainName = domainName; + jmxReporter = JmxReporter.forRegistry(metricRegistry).inDomain(domainName).build(); jmxReporter.start(); } - public static MetricsReporter getInstance() { - return INSTANCE; + public static MetricsReporter getInstance(final String domainName) { + return METRIC_REPORTERS.getUnchecked(domainName); } public MetricRegistry getMetricsRegistry() { - return METRICS_REGISTRY; + return metricRegistry; } @Override public void close() { jmxReporter.close(); + + METRIC_REPORTERS.invalidate(domainName); } }