JAMES-1868 Enable JMX monitoring for metrics via Guice
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/ff1f8e99 Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/ff1f8e99 Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/ff1f8e99 Branch: refs/heads/master Commit: ff1f8e9969d9323dc07b52bdb9cf483af2bf7605 Parents: 61a319f Author: Benoit Tellier <btell...@linagora.com> Authored: Thu Nov 24 15:51:48 2016 +0700 Committer: Benoit Tellier <btell...@linagora.com> Committed: Wed Nov 30 16:32:17 2016 +0700 ---------------------------------------------------------------------- .../modules/server/DropWizardMetricsModule.java | 39 ++++++++++++++++++++ .../metrics/metrics-dropwizard/pom.xml | 4 ++ .../dropwizard/DropWizardMetricFactory.java | 22 +++++++++-- 3 files changed, 62 insertions(+), 3 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/james-project/blob/ff1f8e99/server/container/guice/guice-common/src/main/java/org/apache/james/modules/server/DropWizardMetricsModule.java ---------------------------------------------------------------------- diff --git a/server/container/guice/guice-common/src/main/java/org/apache/james/modules/server/DropWizardMetricsModule.java b/server/container/guice/guice-common/src/main/java/org/apache/james/modules/server/DropWizardMetricsModule.java index 31f66fa..8e77370 100644 --- a/server/container/guice/guice-common/src/main/java/org/apache/james/modules/server/DropWizardMetricsModule.java +++ b/server/container/guice/guice-common/src/main/java/org/apache/james/modules/server/DropWizardMetricsModule.java @@ -19,11 +19,22 @@ package org.apache.james.modules.server; +import java.util.List; + +import org.apache.commons.configuration.ConfigurationException; +import org.apache.commons.configuration.HierarchicalConfiguration; +import org.apache.james.lifecycle.api.Configurable; import org.apache.james.metrics.api.MetricFactory; import org.apache.james.metrics.dropwizard.DropWizardMetricFactory; +import org.apache.james.utils.ConfigurationPerformer; +import com.google.common.base.Throwables; +import com.google.common.collect.ImmutableList; import com.google.inject.AbstractModule; +import com.google.inject.Inject; import com.google.inject.Scopes; +import com.google.inject.Singleton; +import com.google.inject.multibindings.Multibinder; public class DropWizardMetricsModule extends AbstractModule { @@ -31,6 +42,34 @@ public class DropWizardMetricsModule extends AbstractModule { protected void configure() { bind(DropWizardMetricFactory.class).in(Scopes.SINGLETON); bind(MetricFactory.class).to(DropWizardMetricFactory.class); + + Multibinder.newSetBinder(binder(), ConfigurationPerformer.class).addBinding().to(DropWizardConfigurationPerformer.class); + } + + @Singleton + public static class DropWizardConfigurationPerformer implements ConfigurationPerformer { + public static final HierarchicalConfiguration NO_CONFIGURATION = null; + + private final DropWizardMetricFactory metricFactory; + + @Inject + public DropWizardConfigurationPerformer(DropWizardMetricFactory metricFactory) { + this.metricFactory = metricFactory; + } + + @Override + public void initModule() { + try { + metricFactory.configure(NO_CONFIGURATION); + } catch (ConfigurationException e) { + throw Throwables.propagate(e); + } + } + + @Override + public List<Class<? extends Configurable>> forClasses() { + return ImmutableList.of(DropWizardMetricFactory.class); + } } } http://git-wip-us.apache.org/repos/asf/james-project/blob/ff1f8e99/server/container/metrics/metrics-dropwizard/pom.xml ---------------------------------------------------------------------- diff --git a/server/container/metrics/metrics-dropwizard/pom.xml b/server/container/metrics/metrics-dropwizard/pom.xml index 083224e..3d40daf 100644 --- a/server/container/metrics/metrics-dropwizard/pom.xml +++ b/server/container/metrics/metrics-dropwizard/pom.xml @@ -39,6 +39,10 @@ </dependency> <dependency> <groupId>org.apache.james</groupId> + <artifactId>james-server-lifecycle-api</artifactId> + </dependency> + <dependency> + <groupId>org.apache.james</groupId> <artifactId>james-server-metrics-api</artifactId> </dependency> <dependency> http://git-wip-us.apache.org/repos/asf/james-project/blob/ff1f8e99/server/container/metrics/metrics-dropwizard/src/main/java/org/apache/james/metrics/dropwizard/DropWizardMetricFactory.java ---------------------------------------------------------------------- diff --git a/server/container/metrics/metrics-dropwizard/src/main/java/org/apache/james/metrics/dropwizard/DropWizardMetricFactory.java b/server/container/metrics/metrics-dropwizard/src/main/java/org/apache/james/metrics/dropwizard/DropWizardMetricFactory.java index 2e89060..786045f 100644 --- a/server/container/metrics/metrics-dropwizard/src/main/java/org/apache/james/metrics/dropwizard/DropWizardMetricFactory.java +++ b/server/container/metrics/metrics-dropwizard/src/main/java/org/apache/james/metrics/dropwizard/DropWizardMetricFactory.java @@ -19,20 +19,26 @@ package org.apache.james.metrics.dropwizard; -import javax.inject.Inject; +import javax.annotation.PreDestroy; +import org.apache.commons.configuration.ConfigurationException; +import org.apache.commons.configuration.HierarchicalConfiguration; +import org.apache.james.lifecycle.api.Configurable; import org.apache.james.metrics.api.Metric; import org.apache.james.metrics.api.MetricFactory; +import com.codahale.metrics.JmxReporter; import com.codahale.metrics.MetricRegistry; -public class DropWizardMetricFactory implements MetricFactory { +public class DropWizardMetricFactory implements MetricFactory, Configurable { private final MetricRegistry metricRegistry; + private final JmxReporter jmxReporter; - @Inject public DropWizardMetricFactory() { this.metricRegistry = new MetricRegistry(); + this.jmxReporter = JmxReporter.forRegistry(metricRegistry) + .build(); } @Override @@ -40,4 +46,14 @@ public class DropWizardMetricFactory implements MetricFactory { return new DropWizardMetric(metricRegistry.counter(name)); } + @Override + public void configure(HierarchicalConfiguration config) throws ConfigurationException { + jmxReporter.start(); + } + + @PreDestroy + public void stop() { + jmxReporter.stop(); + } + } --------------------------------------------------------------------- To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org For additional commands, e-mail: server-dev-h...@james.apache.org