X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=blobdiff_plain;f=opendaylight%2Fmd-sal%2Fsal-clustering-commons%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fcluster%2Freporting%2FMetricsReporter.java;h=9b93744368f486de2611306e2540df913219f6c9;hp=b400fcab7d93fac0aa67fa6a7a1bd1862b4a6888;hb=08dd5c2c443ff53f56af88a0e8dc8f34e36d2245;hpb=75be58eb52cbb3846814d536f16d7829e26b95d8 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..9b93744368 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 @@ -9,6 +9,9 @@ package org.opendaylight.controller.cluster.reporting; import com.codahale.metrics.JmxReporter; import com.codahale.metrics.MetricRegistry; +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. @@ -20,26 +23,36 @@ import com.codahale.metrics.MetricRegistry; */ 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 LoadingCache METRIC_REPORTERS = CacheBuilder.newBuilder().build( + new CacheLoader() { + @Override + public MetricsReporter load(String domainName) { + return new MetricsReporter(domainName); + } + }); + + private final String domainName; + private final JmxReporter jmxReporter; + private final MetricRegistry metricRegistry = new MetricRegistry(); + + private MetricsReporter(String domainName) { + this.domainName = domainName; + jmxReporter = JmxReporter.forRegistry(metricRegistry).inDomain(domainName).build(); jmxReporter.start(); } - public static MetricsReporter getInstance() { - return INSTANCE; + public static MetricsReporter getInstance(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); } }