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