package io.lumify.core.metrics; import com.codahale.metrics.Counter; import com.codahale.metrics.JmxReporter; import com.codahale.metrics.MetricRegistry; import com.codahale.metrics.Timer; import java.util.concurrent.atomic.AtomicInteger; public class JmxMetricsManager implements MetricsManager { private static final MetricRegistry REGISTRY; private static final JmxReporter JMX_REPORTER; private static final AtomicInteger ID = new AtomicInteger(0); static { REGISTRY = new MetricRegistry(); JMX_REPORTER = JmxReporter.forRegistry(REGISTRY).build(); JMX_REPORTER.start(); } /** * Get the next ID. * * @return the next ID */ private static int nextId() { return ID.getAndIncrement(); } @Override public MetricRegistry getRegistry() { return REGISTRY; } @Override public String getNamePrefix(final Object obj) { return String.format("%s.%d.", obj.getClass().getName(), JmxMetricsManager.nextId()); } @Override public String getNamePrefix(final Object obj, final String qualifier) { return String.format("%s.%s-%d.", obj.getClass().getName(), qualifier, JmxMetricsManager.nextId()); } @Override public Counter counter(final String name) { return getRegistry().counter(name); } @Override public Timer timer(final String name) { return getRegistry().timer(name); } }