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

Reply via email to