package com.mycompany.myapp.config; import com.codahale.metrics.JmxReporter; import com.codahale.metrics.MetricRegistry; import com.codahale.metrics.graphite.Graphite; import com.codahale.metrics.graphite.GraphiteReporter; import com.codahale.metrics.health.HealthCheckRegistry; import com.codahale.metrics.jvm.*; import com.ryantenney.metrics.spring.config.annotation.EnableMetrics; import com.ryantenney.metrics.spring.config.annotation.MetricsConfigurerAdapter; import fr.ippon.spark.metrics.SparkReporter; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Profile; import javax.annotation.PostConstruct; import javax.inject.Inject; import java.lang.management.ManagementFactory; import java.net.InetSocketAddress; import java.util.concurrent.TimeUnit; @Configuration @EnableMetrics(proxyTargetClass = true) @Profile("!" + Constants.SPRING_PROFILE_FAST) public class MetricsConfiguration extends MetricsConfigurerAdapter { private static final String PROP_METRIC_REG_JVM_MEMORY = "jvm.memory"; private static final String PROP_METRIC_REG_JVM_GARBAGE = "jvm.garbage"; private static final String PROP_METRIC_REG_JVM_THREADS = "jvm.threads"; private static final String PROP_METRIC_REG_JVM_FILES = "jvm.files"; private static final String PROP_METRIC_REG_JVM_BUFFERS = "jvm.buffers"; private final Logger log = LoggerFactory.getLogger(MetricsConfiguration.class); private MetricRegistry metricRegistry = new MetricRegistry(); private HealthCheckRegistry healthCheckRegistry = new HealthCheckRegistry(); @Inject private JHipsterProperties jHipsterProperties; @Override @Bean public MetricRegistry getMetricRegistry() { return metricRegistry; } @Override @Bean public HealthCheckRegistry getHealthCheckRegistry() { return healthCheckRegistry; } @PostConstruct public void init() { log.debug("Registering JVM gauges"); metricRegistry.register(PROP_METRIC_REG_JVM_MEMORY, new MemoryUsageGaugeSet()); metricRegistry.register(PROP_METRIC_REG_JVM_GARBAGE, new GarbageCollectorMetricSet()); metricRegistry.register(PROP_METRIC_REG_JVM_THREADS, new ThreadStatesGaugeSet()); metricRegistry.register(PROP_METRIC_REG_JVM_FILES, new FileDescriptorRatioGauge()); metricRegistry.register(PROP_METRIC_REG_JVM_BUFFERS, new BufferPoolMetricSet(ManagementFactory.getPlatformMBeanServer())); if (jHipsterProperties.getMetrics().getJmx().isEnabled()) { log.info("Initializing Metrics JMX reporting"); JmxReporter jmxReporter = JmxReporter.forRegistry(metricRegistry).build(); jmxReporter.start(); } } @Configuration @ConditionalOnClass(Graphite.class) @Profile("!" + Constants.SPRING_PROFILE_FAST) public static class GraphiteRegistry { private final Logger log = LoggerFactory.getLogger(GraphiteRegistry.class); @Inject private MetricRegistry metricRegistry; @Inject private JHipsterProperties jHipsterProperties; @PostConstruct private void init() { if (jHipsterProperties.getMetrics().getGraphite().isEnabled()) { log.info("Initializing Metrics Graphite reporting"); String graphiteHost = jHipsterProperties.getMetrics().getGraphite().getHost(); Integer graphitePort = jHipsterProperties.getMetrics().getGraphite().getPort(); String graphitePrefix = jHipsterProperties.getMetrics().getGraphite().getPrefix(); Graphite graphite = new Graphite(new InetSocketAddress(graphiteHost, graphitePort)); GraphiteReporter graphiteReporter = GraphiteReporter.forRegistry(metricRegistry) .convertRatesTo(TimeUnit.SECONDS) .convertDurationsTo(TimeUnit.MILLISECONDS) .prefixedWith(graphitePrefix) .build(graphite); graphiteReporter.start(1, TimeUnit.MINUTES); } } } @Configuration @ConditionalOnClass(SparkReporter.class) @Profile("!" + Constants.SPRING_PROFILE_FAST) public static class SparkRegistry { private final Logger log = LoggerFactory.getLogger(SparkRegistry.class); @Inject private MetricRegistry metricRegistry; @Inject private JHipsterProperties jHipsterProperties; @PostConstruct private void init() { if (jHipsterProperties.getMetrics().getSpark().isEnabled()) { log.info("Initializing Metrics Spark reporting"); String sparkHost = jHipsterProperties.getMetrics().getSpark().getHost(); Integer sparkPort = jHipsterProperties.getMetrics().getSpark().getPort(); SparkReporter sparkReporter = SparkReporter.forRegistry(metricRegistry) .convertRatesTo(TimeUnit.SECONDS) .convertDurationsTo(TimeUnit.MILLISECONDS) .build(sparkHost, sparkPort); sparkReporter.start(1, TimeUnit.MINUTES); } } } }