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=9b93744368f486de2611306e2540df913219f6c9;hb=dea515c8870769408b9bea29f555d6b71ff43211;hp=b400fcab7d93fac0aa67fa6a7a1bd1862b4a6888;hpb=96e2a4b777f756f3e77c3de833bfa2cd9a7f7400;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..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); } }