All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.nimbusds.common.servlet.MonitorLauncher Maven / Gradle / Ivy

package com.nimbusds.common.servlet;


import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Properties;
import java.util.concurrent.TimeUnit;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;

import com.codahale.metrics.JmxReporter;
import com.codahale.metrics.Metric;
import com.codahale.metrics.graphite.Graphite;
import com.codahale.metrics.graphite.GraphiteReporter;
import com.codahale.metrics.graphite.GraphiteSender;
import com.codahale.metrics.graphite.PickledGraphite;
import com.nimbusds.common.config.ConfigurationException;
import com.nimbusds.common.config.MonitorConfiguration;
import com.nimbusds.common.monitor.MonitorRegistries;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;


/**
 * Monitor launcher.
 *
 * 
    *
  • Exports the shared {@link com.nimbusds.common.monitor.MonitorRegistries} * into the servlet context.
  • *
  • Starts JMX reporting is configured.
  • *
  • Starts Graphite reporting is configured.
  • *
*/ public class MonitorLauncher implements ServletContextListener { /** * The name of the servlet context parameter that specifies the * configuration file location. */ public static final String CONFIG_CTX_PARAMETER_NAME = "monitor.configurationFile"; /** * The JMX reporter. */ protected JmxReporter jmxReporter; /** * The Graphite reporter. */ protected GraphiteReporter graphiteReporter; @Override public void contextInitialized(final ServletContextEvent sce) { Logger log = LogManager.getLogger("MAIN"); sce.getServletContext().setAttribute( "com.codahale.metrics.servlets.MetricsServlet.registry", MonitorRegistries.getMetricRegistry()); sce.getServletContext().setAttribute("com.codahale.metrics.servlets.HealthCheckServlet.registry", MonitorRegistries.getHealthCheckRegistry()); Properties props; try { props = ResourceRetriever.getProperties( sce.getServletContext(), CONFIG_CTX_PARAMETER_NAME, log); } catch (Exception e) { log.error(e.getMessage(), e); throw new RuntimeException(e.getMessage(), e); } // Override with system properties props.putAll(System.getProperties()); final MonitorConfiguration config; try { config = new MonitorConfiguration(props); } catch (ConfigurationException e) { log.error(e.getMessage(), e); throw e; } // Log configuration params config.log(); // Start JMX reporting if configured if (config.enableJMX) { jmxReporter = JmxReporter.forRegistry(MonitorRegistries.getMetricRegistry()).build(); jmxReporter.start(); log.info("[CM7100] Started JMX reporting with {} metrics", MonitorRegistries.getMetricRegistry().getNames().size()); } else { log.info("[CM7101] JMX metrics reporting disabled"); } // Start Graphite reporting if configured if (config.graphite.enable) { final GraphiteSender graphite; if (config.graphite.batchSize > 0) { // With batching (recommended) graphite = new PickledGraphite(config.graphite.host, config.graphite.port, config.graphite.batchSize); } else { // No batching graphite = new Graphite(config.graphite.host, config.graphite.port); } GraphiteReporter.Builder builder = GraphiteReporter.forRegistry(MonitorRegistries.getMetricRegistry()); if (config.graphite.prefix != null && ! config.graphite.prefix.isEmpty()) { builder = builder.prefixedWith(config.graphite.prefix); } graphiteReporter = builder.convertRatesTo(config.graphite.ratesTimeUnit) .convertDurationsTo(config.graphite.durationsTimeUnit) .filter(config.graphite.filter) .build(graphite); graphiteReporter.start(config.graphite.reportInterval, TimeUnit.SECONDS); List filteredNames = new LinkedList<>(); for (Map.Entry entry: MonitorRegistries.getMetricRegistry().getMetrics().entrySet()) { if (config.graphite.filter.matches(entry.getKey(), entry.getValue())) { filteredNames.add(entry.getKey()); } } if (filteredNames.size() > 0) { log.info("[CM7102] Started Graphite reporting with {} metrics: {}", filteredNames.size(), filteredNames); } else { log.warn("[CM7102] Started Graphite reporting, but filter matches zero metrics"); } } else { log.info("[CM7103] Graphite metrics reporting disabled"); } } @Override public void contextDestroyed(final ServletContextEvent sce) { Logger log = LogManager.getLogger("MAIN"); if (jmxReporter != null) { jmxReporter.stop(); String msg = "[CM7104] Stopped JMX metrics reporting"; System.out.println(msg); log.info(msg); } if (graphiteReporter != null) { graphiteReporter.stop(); String msg = "[CM7105] Stopped Graphite metrics reporting"; System.out.println(msg); log.info(msg); } } }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy