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=0f227779ddf01c3e8205ad0c605ae4660a920c79;hpb=25b805c6685467f561506dbb5187a744fc12096b;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 0f227779dd..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. @@ -18,29 +21,38 @@ import com.codahale.metrics.MetricRegistry; * 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 final MetricRegistry METRICS_REGISTRY = new MetricRegistry(); - private final String DOMAIN = "org.opendaylight.controller.actor.metric"; - - public final JmxReporter jmxReporter = JmxReporter.forRegistry(METRICS_REGISTRY).inDomain(DOMAIN).build(); - - private static MetricsReporter inst = new MetricsReporter(); - - private MetricsReporter(){ +public class MetricsReporter implements AutoCloseable { + + 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 inst; + public static MetricsReporter getInstance(String domainName) { + return METRIC_REPORTERS.getUnchecked(domainName); } - public MetricRegistry getMetricsRegistry(){ - return METRICS_REGISTRY; + public MetricRegistry getMetricsRegistry() { + return metricRegistry; } @Override - public void close() throws Exception { + public void close() { jmxReporter.close(); + + METRIC_REPORTERS.invalidate(domainName); } }