JAMES-1950 Add time metrics on Remote Mail delivering
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/33b74fbc Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/33b74fbc Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/33b74fbc Branch: refs/heads/master Commit: 33b74fbca401d8aa78c8d931497fff5862b2240e Parents: ca04fd6 Author: benwa <btell...@linagora.com> Authored: Wed Mar 15 10:27:24 2017 +0700 Committer: benwa <btell...@linagora.com> Committed: Wed Mar 15 16:57:31 2017 +0700 ---------------------------------------------------------------------- .../james/transport/mailets/RemoteDelivery.java | 7 +++---- .../mailets/remoteDelivery/DeliveryRunnable.java | 17 +++++++++++++---- .../remoteDelivery/DeliveryRunnableTest.java | 8 +++++++- 3 files changed, 23 insertions(+), 9 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/james-project/blob/33b74fbc/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/RemoteDelivery.java ---------------------------------------------------------------------- diff --git a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/RemoteDelivery.java b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/RemoteDelivery.java index 006c6bc..1019e30 100644 --- a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/RemoteDelivery.java +++ b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/RemoteDelivery.java @@ -126,13 +126,12 @@ public class RemoteDelivery extends GenericMailet { DO_NOT_START_THREADS } - private static final String OUTGOING_MAILS = "outgoingMails"; public static final String NAME_JUNCTION = "-to-"; private final DNSService dnsServer; private final DomainList domainList; private final MailQueueFactory queueFactory; - private final Metric outgoingMailsMetric; + private final MetricFactory metricFactory; private final AtomicBoolean isDestroyed; private final THREAD_STATE startThreads; @@ -150,7 +149,7 @@ public class RemoteDelivery extends GenericMailet { this.dnsServer = dnsServer; this.domainList = domainList; this.queueFactory = queueFactory; - this.outgoingMailsMetric = metricFactory.generate(OUTGOING_MAILS); + this.metricFactory = metricFactory; this.isDestroyed = new AtomicBoolean(false); this.startThreads = startThreads; } @@ -177,7 +176,7 @@ public class RemoteDelivery extends GenericMailet { new DeliveryRunnable(queue, configuration, dnsServer, - outgoingMailsMetric, + metricFactory, logger, getMailetContext(), new Bouncer(configuration, getMailetContext(), logger), http://git-wip-us.apache.org/repos/asf/james-project/blob/33b74fbc/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/remoteDelivery/DeliveryRunnable.java ---------------------------------------------------------------------- diff --git a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/remoteDelivery/DeliveryRunnable.java b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/remoteDelivery/DeliveryRunnable.java index a7cf23b..b34f3af 100644 --- a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/remoteDelivery/DeliveryRunnable.java +++ b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/remoteDelivery/DeliveryRunnable.java @@ -26,6 +26,8 @@ import java.util.concurrent.atomic.AtomicBoolean; import org.apache.james.dnsservice.api.DNSService; import org.apache.james.lifecycle.api.LifecycleUtil; import org.apache.james.metrics.api.Metric; +import org.apache.james.metrics.api.MetricFactory; +import org.apache.james.metrics.api.TimeMetric; import org.apache.james.queue.api.MailPrioritySupport; import org.apache.james.queue.api.MailQueue; import org.apache.mailet.Mail; @@ -44,34 +46,38 @@ public class DeliveryRunnable implements Runnable { } }; public static final AtomicBoolean DEFAULT_NOT_STARTED = new AtomicBoolean(false); + private static final String OUTGOING_MAILS = "outgoingMails"; + public static final String REMOTE_DELIVERY_TRIAL = "RemoteDeliveryTrial"; private final MailQueue queue; private final RemoteDeliveryConfiguration configuration; private final Metric outgoingMailsMetric; + private final MetricFactory metricFactory; private final Logger logger; private final Bouncer bouncer; private final MailDelivrer mailDelivrer; private final AtomicBoolean isDestroyed; private final Supplier<Date> dateSupplier; - public DeliveryRunnable(MailQueue queue, RemoteDeliveryConfiguration configuration, DNSService dnsServer, Metric outgoingMailsMetric, + public DeliveryRunnable(MailQueue queue, RemoteDeliveryConfiguration configuration, DNSService dnsServer, MetricFactory metricFactory, Logger logger, MailetContext mailetContext, Bouncer bouncer, AtomicBoolean isDestroyed) { - this(queue, configuration, outgoingMailsMetric, logger, bouncer, + this(queue, configuration, metricFactory, logger, bouncer, new MailDelivrer(configuration, new MailDelivrerToHost(configuration, mailetContext, logger), dnsServer, bouncer, logger), isDestroyed, CURRENT_DATE_SUPPLIER); } @VisibleForTesting - DeliveryRunnable(MailQueue queue, RemoteDeliveryConfiguration configuration, Metric outgoingMailsMetric, Logger logger, Bouncer bouncer, + DeliveryRunnable(MailQueue queue, RemoteDeliveryConfiguration configuration, MetricFactory metricFactory, Logger logger, Bouncer bouncer, MailDelivrer mailDelivrer, AtomicBoolean isDestroyeds, Supplier<Date> dateSupplier) { this.queue = queue; this.configuration = configuration; - this.outgoingMailsMetric = outgoingMailsMetric; + this.outgoingMailsMetric = metricFactory.generate(OUTGOING_MAILS); this.logger = logger; this.bouncer = bouncer; this.mailDelivrer = mailDelivrer; this.isDestroyed = isDestroyeds; this.dateSupplier = dateSupplier; + this.metricFactory = metricFactory; } @Override @@ -87,6 +93,7 @@ public class DeliveryRunnable implements Runnable { } private void runStep() { + TimeMetric timeMetric = metricFactory.timer(REMOTE_DELIVERY_TRIAL); try { // Get the 'mail' object that is ready for deliverying. If no message is // ready, the 'accept' will block until message is ready. @@ -116,6 +123,8 @@ public class DeliveryRunnable implements Runnable { if (!isDestroyed.get()) { logger.error("Exception caught in RemoteDelivery.run()", e); } + } finally { + timeMetric.stopAndPublish(); } } http://git-wip-us.apache.org/repos/asf/james-project/blob/33b74fbc/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/remoteDelivery/DeliveryRunnableTest.java ---------------------------------------------------------------------- diff --git a/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/remoteDelivery/DeliveryRunnableTest.java b/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/remoteDelivery/DeliveryRunnableTest.java index f8dfd40..09554e1 100644 --- a/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/remoteDelivery/DeliveryRunnableTest.java +++ b/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/remoteDelivery/DeliveryRunnableTest.java @@ -20,6 +20,7 @@ package org.apache.james.transport.mailets.remoteDelivery; import static org.mockito.Matchers.any; +import static org.mockito.Matchers.anyString; import static org.mockito.Matchers.eq; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; @@ -31,6 +32,8 @@ import java.util.concurrent.TimeUnit; import org.apache.james.domainlist.api.DomainList; import org.apache.james.metrics.api.Metric; +import org.apache.james.metrics.api.MetricFactory; +import org.apache.james.metrics.api.NoopMetricFactory; import org.apache.james.queue.api.MailQueue; import org.apache.mailet.Mail; import org.apache.mailet.base.test.FakeMail; @@ -74,10 +77,13 @@ public class DeliveryRunnableTest { RemoteDeliveryConfiguration configuration = new RemoteDeliveryConfiguration(mailetConfig, mock(DomainList.class)); outgoingMailsMetric = mock(Metric.class); + MetricFactory mockMetricFactory = mock(MetricFactory.class); + when(mockMetricFactory.generate(anyString())).thenReturn(outgoingMailsMetric); + when(mockMetricFactory.timer(anyString())).thenReturn(new NoopMetricFactory.NoopTimeMetric()); bouncer = mock(Bouncer.class); mailDelivrer = mock(MailDelivrer.class); mailQueue = mock(MailQueue.class); - testee = new DeliveryRunnable(mailQueue, configuration, outgoingMailsMetric, LOGGER, bouncer, mailDelivrer, DeliveryRunnable.DEFAULT_NOT_STARTED, FIXED_DATE_SUPPLIER); + testee = new DeliveryRunnable(mailQueue, configuration, mockMetricFactory, LOGGER, bouncer, mailDelivrer, DeliveryRunnable.DEFAULT_NOT_STARTED, FIXED_DATE_SUPPLIER); } @Test --------------------------------------------------------------------- To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org For additional commands, e-mail: server-dev-h...@james.apache.org