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