/** * Copyright (C) 2013 - present by OpenGamma Inc. and the OpenGamma group of companies * * Please see distribution for license. */ package com.opengamma.util.metric; import java.util.concurrent.TimeUnit; import org.slf4j.LoggerFactory; import com.codahale.metrics.JmxReporter; import com.codahale.metrics.MetricRegistry; import com.codahale.metrics.Slf4jReporter; import com.opengamma.util.ArgumentChecker; /** * Contains the {@link MetricRegistry} that should be used by OpenGamma components at runtime. * The component system will configure this at startup. */ public final class OpenGammaMetricRegistry { private static MetricRegistry s_summaryInstance; private static MetricRegistry s_detailedInstance; /** * Creates an instance. */ private OpenGammaMetricRegistry() { } //------------------------------------------------------------------------- public static MetricRegistry getSummaryInstance() { initializeIfNecessary(); return s_summaryInstance; } public static MetricRegistry getDetailedInstance() { initializeIfNecessary(); return s_detailedInstance; } /** * Sets the summary registry. * This should only be set at startup. * * @param metricRegistry the registry, not null */ public static synchronized void setSummaryRegistry(MetricRegistry metricRegistry) { ArgumentChecker.notNull(metricRegistry, "metricRegistry"); s_summaryInstance = metricRegistry; } /** * Sets the detailed registry. * This should only be set at startup. * * @param metricRegistry the registry, not null */ public static synchronized void setDetailedRegistry(MetricRegistry metricRegistry) { ArgumentChecker.notNull(metricRegistry, "metricRegistry"); s_detailedInstance = metricRegistry; } /** * Creates a basic registry. */ public static synchronized void createBasicDebuggingRegistry() { s_summaryInstance = new MetricRegistry(); s_detailedInstance = s_summaryInstance; Slf4jReporter logReporter = Slf4jReporter.forRegistry(s_summaryInstance) .outputTo(LoggerFactory.getLogger(OpenGammaMetricRegistry.class)) .convertRatesTo(TimeUnit.SECONDS) .convertDurationsTo(TimeUnit.MILLISECONDS) .build(); logReporter.start(1, TimeUnit.MINUTES); JmxReporter jmxReporter = JmxReporter.forRegistry(s_summaryInstance).build(); jmxReporter.start(); } private static void initializeIfNecessary() { if (s_summaryInstance == null) { createBasicDebuggingRegistry(); } } }