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

Reply via email to