JAMES-1950 Add time measurement for JMS queues

Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/e8b94d17
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/e8b94d17
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/e8b94d17

Branch: refs/heads/master
Commit: e8b94d178a0e23be25b7681900972b1bac48f543
Parents: a00d5e4
Author: benwa <btell...@linagora.com>
Authored: Wed Mar 15 10:44:50 2017 +0700
Committer: benwa <btell...@linagora.com>
Committed: Wed Mar 15 16:57:31 2017 +0700

----------------------------------------------------------------------
 .../james/queue/activemq/ActiveMQMailQueue.java       | 10 +++++-----
 .../queue/activemq/ActiveMQMailQueueFactory.java      |  2 +-
 .../james/queue/activemq/ActiveMQMailQueueTest.java   |  6 ++----
 .../java/org/apache/james/queue/jms/JMSMailQueue.java | 14 +++++++++++---
 .../apache/james/queue/jms/JMSMailQueueFactory.java   |  2 +-
 .../james/queue/jms/AbstractJMSMailQueueTest.java     |  5 ++---
 6 files changed, 22 insertions(+), 17 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/e8b94d17/server/queue/queue-activemq/src/main/java/org/apache/james/queue/activemq/ActiveMQMailQueue.java
----------------------------------------------------------------------
diff --git 
a/server/queue/queue-activemq/src/main/java/org/apache/james/queue/activemq/ActiveMQMailQueue.java
 
b/server/queue/queue-activemq/src/main/java/org/apache/james/queue/activemq/ActiveMQMailQueue.java
index 8a80ad3..56c25c1 100644
--- 
a/server/queue/queue-activemq/src/main/java/org/apache/james/queue/activemq/ActiveMQMailQueue.java
+++ 
b/server/queue/queue-activemq/src/main/java/org/apache/james/queue/activemq/ActiveMQMailQueue.java
@@ -43,7 +43,7 @@ import org.apache.activemq.util.JMSExceptionSupport;
 import org.apache.james.core.MimeMessageCopyOnWriteProxy;
 import org.apache.james.core.MimeMessageInputStream;
 import org.apache.james.core.MimeMessageSource;
-import org.apache.james.metrics.api.Metric;
+import org.apache.james.metrics.api.MetricFactory;
 import org.apache.james.queue.api.MailQueue;
 import org.apache.james.queue.api.MailQueueItemDecoratorFactory;
 import org.apache.james.queue.jms.JMSMailQueue;
@@ -93,8 +93,8 @@ public class ActiveMQMailQueue extends JMSMailQueue 
implements ActiveMQSupport {
      * Construct a {@link ActiveMQMailQueue} which only use {@link BlobMessage}
      * 
      */
-    public ActiveMQMailQueue(ConnectionFactory connectionFactory, 
MailQueueItemDecoratorFactory mailQueueItemDecoratorFactory, String queuename, 
Metric enqueuedMailsMetric, Logger logger) {
-        this(connectionFactory, mailQueueItemDecoratorFactory, queuename, 
true, enqueuedMailsMetric, logger);
+    public ActiveMQMailQueue(ConnectionFactory connectionFactory, 
MailQueueItemDecoratorFactory mailQueueItemDecoratorFactory, String queuename, 
MetricFactory metricFactory, Logger logger) {
+        this(connectionFactory, mailQueueItemDecoratorFactory, queuename, 
true, metricFactory, logger);
     }
 
     /**
@@ -105,8 +105,8 @@ public class ActiveMQMailQueue extends JMSMailQueue 
implements ActiveMQSupport {
      * @param useBlob
      * @param logger
      */
-    public ActiveMQMailQueue(ConnectionFactory connectionFactory, 
MailQueueItemDecoratorFactory mailQueueItemDecoratorFactory, String queuename, 
boolean useBlob, Metric enqueuedMailsMetric, Logger logger) {
-        super(connectionFactory, mailQueueItemDecoratorFactory, queuename, 
enqueuedMailsMetric, logger);
+    public ActiveMQMailQueue(ConnectionFactory connectionFactory, 
MailQueueItemDecoratorFactory mailQueueItemDecoratorFactory, String queuename, 
boolean useBlob, MetricFactory metricFactory, Logger logger) {
+        super(connectionFactory, mailQueueItemDecoratorFactory, queuename, 
metricFactory, logger);
         this.useBlob = useBlob;
     }
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/e8b94d17/server/queue/queue-activemq/src/main/java/org/apache/james/queue/activemq/ActiveMQMailQueueFactory.java
----------------------------------------------------------------------
diff --git 
a/server/queue/queue-activemq/src/main/java/org/apache/james/queue/activemq/ActiveMQMailQueueFactory.java
 
b/server/queue/queue-activemq/src/main/java/org/apache/james/queue/activemq/ActiveMQMailQueueFactory.java
index 9646a29..5653066 100644
--- 
a/server/queue/queue-activemq/src/main/java/org/apache/james/queue/activemq/ActiveMQMailQueueFactory.java
+++ 
b/server/queue/queue-activemq/src/main/java/org/apache/james/queue/activemq/ActiveMQMailQueueFactory.java
@@ -50,6 +50,6 @@ public class ActiveMQMailQueueFactory extends 
JMSMailQueueFactory {
 
     @Override
     protected MailQueue createMailQueue(String name) {
-        return new ActiveMQMailQueue(connectionFactory, 
mailQueueItemDecoratorFactory, name, useBlob, 
metricFactory.generate("enqueuedMails:" + name), log);
+        return new ActiveMQMailQueue(connectionFactory, 
mailQueueItemDecoratorFactory, name, useBlob, metricFactory, log);
     }
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/e8b94d17/server/queue/queue-activemq/src/test/java/org/apache/james/queue/activemq/ActiveMQMailQueueTest.java
----------------------------------------------------------------------
diff --git 
a/server/queue/queue-activemq/src/test/java/org/apache/james/queue/activemq/ActiveMQMailQueueTest.java
 
b/server/queue/queue-activemq/src/test/java/org/apache/james/queue/activemq/ActiveMQMailQueueTest.java
index 1203c74..3cd6d5d 100644
--- 
a/server/queue/queue-activemq/src/test/java/org/apache/james/queue/activemq/ActiveMQMailQueueTest.java
+++ 
b/server/queue/queue-activemq/src/test/java/org/apache/james/queue/activemq/ActiveMQMailQueueTest.java
@@ -18,8 +18,6 @@
  ****************************************************************/
 package org.apache.james.queue.activemq;
 
-import static org.mockito.Mockito.mock;
-
 import java.util.Arrays;
 
 import javax.jms.ConnectionFactory;
@@ -29,7 +27,7 @@ import org.apache.activemq.broker.BrokerService;
 import org.apache.activemq.broker.region.policy.PolicyEntry;
 import org.apache.activemq.broker.region.policy.PolicyMap;
 import org.apache.activemq.plugin.StatisticsBrokerPlugin;
-import org.apache.james.metrics.api.Metric;
+import org.apache.james.metrics.api.NoopMetricFactory;
 import org.apache.james.queue.api.MailQueueItemDecoratorFactory;
 import org.apache.james.queue.jms.AbstractJMSMailQueueTest;
 import org.apache.james.queue.jms.JMSMailQueue;
@@ -79,7 +77,7 @@ public abstract class ActiveMQMailQueueTest extends 
AbstractJMSMailQueueTest {
     protected JMSMailQueue createQueue(ConnectionFactory factory, 
MailQueueItemDecoratorFactory mailQueueItemDecoratorFactory, String queueName) {
         Logger log = LoggerFactory.getLogger(ActiveMQMailQueueTest.class);
 
-        return new ActiveMQMailQueue(factory, mailQueueItemDecoratorFactory, 
queueName, useBlobMessages(), mock(Metric.class), log);
+        return new ActiveMQMailQueue(factory, mailQueueItemDecoratorFactory, 
queueName, useBlobMessages(), new NoopMetricFactory(), log);
     }
 
     protected boolean useBlobMessages() {

http://git-wip-us.apache.org/repos/asf/james-project/blob/e8b94d17/server/queue/queue-jms/src/main/java/org/apache/james/queue/jms/JMSMailQueue.java
----------------------------------------------------------------------
diff --git 
a/server/queue/queue-jms/src/main/java/org/apache/james/queue/jms/JMSMailQueue.java
 
b/server/queue/queue-jms/src/main/java/org/apache/james/queue/jms/JMSMailQueue.java
index a14b362..2ebff7b 100644
--- 
a/server/queue/queue-jms/src/main/java/org/apache/james/queue/jms/JMSMailQueue.java
+++ 
b/server/queue/queue-jms/src/main/java/org/apache/james/queue/jms/JMSMailQueue.java
@@ -51,6 +51,8 @@ import org.apache.james.core.MailImpl;
 import org.apache.james.core.MimeMessageCopyOnWriteProxy;
 import org.apache.james.lifecycle.api.Disposable;
 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.james.queue.api.MailQueueItemDecoratorFactory;
@@ -78,10 +80,11 @@ public class JMSMailQueue implements ManageableMailQueue, 
JMSSupport, MailPriori
     protected final Connection connection;
     protected final MailQueueItemDecoratorFactory 
mailQueueItemDecoratorFactory;
     protected final Metric enqueuedMailsMetric;
+    protected final MetricFactory metricFactory;
     protected final Logger logger;
     public final static String FORCE_DELIVERY = "FORCE_DELIVERY";
 
-    public JMSMailQueue(ConnectionFactory connectionFactory, 
MailQueueItemDecoratorFactory mailQueueItemDecoratorFactory, String queueName, 
Metric enqueuedMailsMetric, Logger logger) {
+    public JMSMailQueue(ConnectionFactory connectionFactory, 
MailQueueItemDecoratorFactory mailQueueItemDecoratorFactory, String queueName, 
MetricFactory metricFactory, Logger logger) {
         try {
             connection = connectionFactory.createConnection();
             connection.start();
@@ -90,7 +93,8 @@ public class JMSMailQueue implements ManageableMailQueue, 
JMSSupport, MailPriori
         }
         this.mailQueueItemDecoratorFactory = mailQueueItemDecoratorFactory;
         this.queueName = queueName;
-        this.enqueuedMailsMetric = enqueuedMailsMetric;
+        this.metricFactory = metricFactory;
+        this.enqueuedMailsMetric = metricFactory.generate("enqueuedMail:" + 
queueName);
         this.logger = logger;
     }
 
@@ -113,6 +117,7 @@ public class JMSMailQueue implements ManageableMailQueue, 
JMSSupport, MailPriori
         MessageConsumer consumer = null;
 
         while (true) {
+            TimeMetric timeMetric = metricFactory.timer("dequeueTime:" + 
queueName);
             try {
                 session = connection.createSession(true, 
Session.SESSION_TRANSACTED);
                 Queue queue = session.createQueue(queueName);
@@ -166,6 +171,8 @@ public class JMSMailQueue implements ManageableMailQueue, 
JMSSupport, MailPriori
                 }
 
                 throw new MailQueueException("Unable to dequeue next message", 
e);
+            } finally {
+                timeMetric.stopAndPublish();
             }
         }
 
@@ -173,6 +180,7 @@ public class JMSMailQueue implements ManageableMailQueue, 
JMSSupport, MailPriori
 
     @Override
     public void enQueue(Mail mail, long delay, TimeUnit unit) throws 
MailQueueException {
+        TimeMetric timeMetric = metricFactory.timer("enqueueMailTime:" + 
queueName);
         Session session = null;
 
         long mydelay = 0;
@@ -207,13 +215,13 @@ public class JMSMailQueue implements ManageableMailQueue, 
JMSSupport, MailPriori
             throw new MailQueueException("Unable to enqueue mail " + mail, e);
 
         } finally {
+            timeMetric.stopAndPublish();
             try {
                 if (session != null)
                     session.close();
             } catch (JMSException e) {
                 // ignore here
             }
-
         }
     }
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/e8b94d17/server/queue/queue-jms/src/main/java/org/apache/james/queue/jms/JMSMailQueueFactory.java
----------------------------------------------------------------------
diff --git 
a/server/queue/queue-jms/src/main/java/org/apache/james/queue/jms/JMSMailQueueFactory.java
 
b/server/queue/queue-jms/src/main/java/org/apache/james/queue/jms/JMSMailQueueFactory.java
index 36770d6..e023de9 100644
--- 
a/server/queue/queue-jms/src/main/java/org/apache/james/queue/jms/JMSMailQueueFactory.java
+++ 
b/server/queue/queue-jms/src/main/java/org/apache/james/queue/jms/JMSMailQueueFactory.java
@@ -45,7 +45,7 @@ public class JMSMailQueueFactory extends 
AbstractMailQueueFactory {
 
     @Override
     protected MailQueue createMailQueue(String name) {
-        return new JMSMailQueue(connectionFactory, 
mailQueueItemDecoratorFactory, name, metricFactory.generate("enqueuedMail:" + 
name), log);
+        return new JMSMailQueue(connectionFactory, 
mailQueueItemDecoratorFactory, name, metricFactory, log);
     }
     
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/e8b94d17/server/queue/queue-jms/src/test/java/org/apache/james/queue/jms/AbstractJMSMailQueueTest.java
----------------------------------------------------------------------
diff --git 
a/server/queue/queue-jms/src/test/java/org/apache/james/queue/jms/AbstractJMSMailQueueTest.java
 
b/server/queue/queue-jms/src/test/java/org/apache/james/queue/jms/AbstractJMSMailQueueTest.java
index 76bb6c4..3947a58 100644
--- 
a/server/queue/queue-jms/src/test/java/org/apache/james/queue/jms/AbstractJMSMailQueueTest.java
+++ 
b/server/queue/queue-jms/src/test/java/org/apache/james/queue/jms/AbstractJMSMailQueueTest.java
@@ -22,7 +22,6 @@ import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertTrue;
-import static org.mockito.Mockito.mock;
 
 import java.io.IOException;
 import java.util.Arrays;
@@ -40,7 +39,7 @@ import javax.mail.internet.MimeMessage;
 
 import org.apache.activemq.ActiveMQConnectionFactory;
 import org.apache.james.core.MailImpl;
-import org.apache.james.metrics.api.Metric;
+import org.apache.james.metrics.api.NoopMetricFactory;
 import org.apache.james.protocols.smtp.MailAddressException;
 import org.apache.james.queue.api.MailQueue.MailQueueItem;
 import org.apache.james.queue.api.MailQueueItemDecoratorFactory;
@@ -72,7 +71,7 @@ public abstract class AbstractJMSMailQueueTest {
     
     protected JMSMailQueue createQueue(ConnectionFactory factory, 
MailQueueItemDecoratorFactory mailQueueItemDecoratorFactory, String queueName) {
         Logger log = LoggerFactory.getLogger(AbstractJMSMailQueueTest.class);
-        return new JMSMailQueue(factory, mailQueueItemDecoratorFactory, 
queueName, mock(Metric.class), log);
+        return new JMSMailQueue(factory, mailQueueItemDecoratorFactory, 
queueName, new NoopMetricFactory(), log);
     }
 
     @Before


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