This is an automated email from the ASF dual-hosted git repository.

matthieu pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/james-project.git

commit 9a87a64c8ee044655ee0ccc0cd7d836889aec0b2
Author: Matthieu Baechler <matth...@apache.org>
AuthorDate: Fri Apr 10 10:36:58 2020 +0200

    JAMES-3145 logging org.apache.james.metrics at DEBUG level now logs metrics 
with a 10 seconds interval
    
        It allows to have some insights on how the service is performing without
        the requirement of having a full metrics infrastructure
---
 .../modules/server/DropWizardMetricsModule.java    |  1 +
 ...etricsModule.java => LoggingMetricsModule.java} | 69 +++++++++++++++-------
 2 files changed, 50 insertions(+), 20 deletions(-)

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 fa542ea..612dd97 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
@@ -36,6 +36,7 @@ public class DropWizardMetricsModule extends AbstractModule {
 
     @Override
     protected void configure() {
+        install(new LoggingMetricsModule());
         bind(MetricRegistry.class).in(Scopes.SINGLETON);
         bind(DropWizardMetricFactory.class).in(Scopes.SINGLETON);
         bind(DropWizardGaugeRegistry.class).in(Scopes.SINGLETON);
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/LoggingMetricsModule.java
similarity index 50%
copy from 
server/container/guice/guice-common/src/main/java/org/apache/james/modules/server/DropWizardMetricsModule.java
copy to 
server/container/guice/guice-common/src/main/java/org/apache/james/modules/server/LoggingMetricsModule.java
index fa542ea..9e72d89 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/LoggingMetricsModule.java
@@ -19,43 +19,72 @@
 
 package org.apache.james.modules.server;
 
-import org.apache.james.metrics.api.GaugeRegistry;
-import org.apache.james.metrics.api.MetricFactory;
-import org.apache.james.metrics.dropwizard.DropWizardGaugeRegistry;
-import org.apache.james.metrics.dropwizard.DropWizardJVMMetrics;
-import org.apache.james.metrics.dropwizard.DropWizardMetricFactory;
+import java.util.concurrent.TimeUnit;
+
+import javax.annotation.PreDestroy;
+import javax.inject.Inject;
+import javax.inject.Singleton;
+
+import org.apache.james.lifecycle.api.Startable;
 import org.apache.james.utils.InitializationOperation;
 import org.apache.james.utils.InitilizationOperationBuilder;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import com.codahale.metrics.MetricRegistry;
+import com.codahale.metrics.Slf4jReporter;
 import com.google.inject.AbstractModule;
 import com.google.inject.Scopes;
 import com.google.inject.multibindings.ProvidesIntoSet;
 
-public class DropWizardMetricsModule extends AbstractModule {
+/**
+ * This module is intended for logging metrics in stress-test context, it's 
not meant to be a general purpose
+ * metrics module
+ */
+public class LoggingMetricsModule extends AbstractModule {
+
+    public static final Logger LOGGER = 
LoggerFactory.getLogger("org.apache.james.metrics");
 
     @Override
     protected void configure() {
-        bind(MetricRegistry.class).in(Scopes.SINGLETON);
-        bind(DropWizardMetricFactory.class).in(Scopes.SINGLETON);
-        bind(DropWizardGaugeRegistry.class).in(Scopes.SINGLETON);
-        bind(DropWizardJVMMetrics.class).in(Scopes.SINGLETON);
-        bind(MetricFactory.class).to(DropWizardMetricFactory.class);
-
-        bind(GaugeRegistry.class).to(DropWizardGaugeRegistry.class);
+        bind(StartableSlf4jReporter.class).in(Scopes.SINGLETON);
     }
 
     @ProvidesIntoSet
-    InitializationOperation startMetricFactory(DropWizardMetricFactory 
instance) {
+    InitializationOperation startReporter(StartableSlf4jReporter instance) {
         return InitilizationOperationBuilder
-            .forClass(DropWizardMetricFactory.class)
+            .forClass(StartableSlf4jReporter.class)
             .init(instance::start);
     }
 
-    @ProvidesIntoSet
-    InitializationOperation startJVMMetrics(DropWizardJVMMetrics instance) {
-        return InitilizationOperationBuilder
-            .forClass(DropWizardJVMMetrics.class)
-            .init(instance::start);
+    @Singleton
+    private static class StartableSlf4jReporter implements Startable {
+        private final Slf4jReporter reporter;
+        private boolean enableLogMetrics;
+
+        @Inject
+        StartableSlf4jReporter(MetricRegistry registry) {
+            this.reporter = Slf4jReporter.forRegistry(registry)
+                .outputTo(LOGGER)
+                .convertRatesTo(TimeUnit.SECONDS)
+                .convertDurationsTo(TimeUnit.MILLISECONDS)
+                .build();
+        }
+
+        private void start() {
+            enableLogMetrics = LOGGER.isDebugEnabled();
+            if (enableLogMetrics) {
+                int reportingPeriod = 10;
+                reporter.start(reportingPeriod, TimeUnit.SECONDS);
+            }
+        }
+
+        @PreDestroy
+        public void close() {
+            if (enableLogMetrics) {
+                reporter.close();
+            }
+        }
+
     }
 }


---------------------------------------------------------------------
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