JAMES-1868 Add metrics for 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/197cc76f Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/197cc76f Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/197cc76f Branch: refs/heads/master Commit: 197cc76f0ca84db592a03499a3fd5696b9cd3952 Parents: 8e52e76 Author: Benoit Tellier <btell...@linagora.com> Authored: Thu Nov 24 11:56:55 2016 +0700 Committer: Benoit Tellier <btell...@linagora.com> Committed: Wed Nov 30 16:29:36 2016 +0700 ---------------------------------------------------------------------- server/queue/queue-activemq/pom.xml | 4 ++++ .../apache/james/queue/activemq/ActiveMQMailQueue.java | 9 +++++---- .../james/queue/activemq/ActiveMQMailQueueFactory.java | 7 ++++--- .../james/queue/activemq/ActiveMQMailQueueTest.java | 13 +++++++++---- server/queue/queue-jms/pom.xml | 10 +++++++--- .../java/org/apache/james/queue/jms/JMSMailQueue.java | 6 +++++- .../apache/james/queue/jms/JMSMailQueueFactory.java | 12 ++++++++---- .../james/queue/jms/AbstractJMSMailQueueTest.java | 4 +++- 8 files changed, 45 insertions(+), 20 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/james-project/blob/197cc76f/server/queue/queue-activemq/pom.xml ---------------------------------------------------------------------- diff --git a/server/queue/queue-activemq/pom.xml b/server/queue/queue-activemq/pom.xml index b265406..9f8c0fe 100644 --- a/server/queue/queue-activemq/pom.xml +++ b/server/queue/queue-activemq/pom.xml @@ -122,6 +122,10 @@ <artifactId>slf4j-simple</artifactId> <scope>test</scope> </dependency> + <dependency> + <groupId>org.mockito</groupId> + <artifactId>mockito-core</artifactId> + </dependency> </dependencies> <build> http://git-wip-us.apache.org/repos/asf/james-project/blob/197cc76f/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 068a7bb..d45a89e 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,6 +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.queue.api.MailQueue; import org.apache.james.queue.api.MailQueueItemDecoratorFactory; import org.apache.james.queue.jms.JMSMailQueue; @@ -92,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, Logger logger) { - this(connectionFactory, mailQueueItemDecoratorFactory, queuename, true, logger); + public ActiveMQMailQueue(ConnectionFactory connectionFactory, MailQueueItemDecoratorFactory mailQueueItemDecoratorFactory, String queuename, Metric enqueuedMailsMetric, Logger logger) { + this(connectionFactory, mailQueueItemDecoratorFactory, queuename, true, enqueuedMailsMetric, logger); } /** @@ -104,8 +105,8 @@ public class ActiveMQMailQueue extends JMSMailQueue implements ActiveMQSupport { * @param useBlob * @param logger */ - public ActiveMQMailQueue(ConnectionFactory connectionFactory, MailQueueItemDecoratorFactory mailQueueItemDecoratorFactory, String queuename, boolean useBlob, Logger logger) { - super(connectionFactory, mailQueueItemDecoratorFactory, queuename, logger); + public ActiveMQMailQueue(ConnectionFactory connectionFactory, MailQueueItemDecoratorFactory mailQueueItemDecoratorFactory, String queuename, boolean useBlob, Metric enqueuedMailsMetric, Logger logger) { + super(connectionFactory, mailQueueItemDecoratorFactory, queuename, enqueuedMailsMetric, logger); this.useBlob = useBlob; } http://git-wip-us.apache.org/repos/asf/james-project/blob/197cc76f/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 6547be3..430222e 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 @@ -21,6 +21,7 @@ package org.apache.james.queue.activemq; import javax.inject.Inject; import javax.jms.ConnectionFactory; +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.api.MailQueueFactory; @@ -35,8 +36,8 @@ public class ActiveMQMailQueueFactory extends JMSMailQueueFactory { private boolean useBlob = true; @Inject - public ActiveMQMailQueueFactory(ConnectionFactory connectionFactory, MailQueueItemDecoratorFactory mailQueueItemDecoratorFactory) { - super(connectionFactory, mailQueueItemDecoratorFactory); + public ActiveMQMailQueueFactory(ConnectionFactory connectionFactory, MailQueueItemDecoratorFactory mailQueueItemDecoratorFactory, MetricFactory metricFactory) { + super(connectionFactory, mailQueueItemDecoratorFactory, metricFactory); } public void setUseBlobMessages(boolean useBlob) { @@ -45,6 +46,6 @@ public class ActiveMQMailQueueFactory extends JMSMailQueueFactory { @Override protected MailQueue createMailQueue(String name) { - return new ActiveMQMailQueue(connectionFactory, mailQueueItemDecoratorFactory, name, useBlob, log); + return new ActiveMQMailQueue(connectionFactory, mailQueueItemDecoratorFactory, name, useBlob, metricFactory.generate("enqueuedMails:" + name), log); } } http://git-wip-us.apache.org/repos/asf/james-project/blob/197cc76f/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 b490d5d..1203c74 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,11 +18,18 @@ ****************************************************************/ package org.apache.james.queue.activemq; +import static org.mockito.Mockito.mock; + +import java.util.Arrays; + +import javax.jms.ConnectionFactory; + import org.apache.activemq.broker.BrokerPlugin; 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.queue.api.MailQueueItemDecoratorFactory; import org.apache.james.queue.jms.AbstractJMSMailQueueTest; import org.apache.james.queue.jms.JMSMailQueue; @@ -31,9 +38,6 @@ import org.junit.BeforeClass; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import javax.jms.ConnectionFactory; -import java.util.Arrays; - public abstract class ActiveMQMailQueueTest extends AbstractJMSMailQueueTest { private static BrokerService brokerService; @@ -74,7 +78,8 @@ public abstract class ActiveMQMailQueueTest extends AbstractJMSMailQueueTest { @Override protected JMSMailQueue createQueue(ConnectionFactory factory, MailQueueItemDecoratorFactory mailQueueItemDecoratorFactory, String queueName) { Logger log = LoggerFactory.getLogger(ActiveMQMailQueueTest.class); - return new ActiveMQMailQueue(factory, mailQueueItemDecoratorFactory, queueName, useBlobMessages(), log); + + return new ActiveMQMailQueue(factory, mailQueueItemDecoratorFactory, queueName, useBlobMessages(), mock(Metric.class), log); } protected boolean useBlobMessages() { http://git-wip-us.apache.org/repos/asf/james-project/blob/197cc76f/server/queue/queue-jms/pom.xml ---------------------------------------------------------------------- diff --git a/server/queue/queue-jms/pom.xml b/server/queue/queue-jms/pom.xml index b1aea5c..8e1850c 100644 --- a/server/queue/queue-jms/pom.xml +++ b/server/queue/queue-jms/pom.xml @@ -35,7 +35,11 @@ <dependencies> <dependency> <groupId>org.apache.james</groupId> - <artifactId>james-server-queue-api</artifactId> + <artifactId>apache-mailet-api</artifactId> + </dependency> + <dependency> + <groupId>org.apache.james</groupId> + <artifactId>james-server-core</artifactId> </dependency> <dependency> <groupId>org.apache.james</groupId> @@ -43,11 +47,11 @@ </dependency> <dependency> <groupId>org.apache.james</groupId> - <artifactId>james-server-core</artifactId> + <artifactId>james-server-metrics-api</artifactId> </dependency> <dependency> <groupId>org.apache.james</groupId> - <artifactId>apache-mailet-api</artifactId> + <artifactId>james-server-queue-api</artifactId> </dependency> <dependency> <groupId>com.google.guava</groupId> http://git-wip-us.apache.org/repos/asf/james-project/blob/197cc76f/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 1634354..f3ce680 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 @@ -49,6 +49,7 @@ import javax.mail.internet.MimeMessage; import org.apache.james.core.MailImpl; import org.apache.james.core.MimeMessageCopyOnWriteProxy; +import org.apache.james.metrics.api.Metric; import org.apache.james.queue.api.MailPrioritySupport; import org.apache.james.queue.api.MailQueue; import org.apache.james.queue.api.MailQueueItemDecoratorFactory; @@ -73,13 +74,15 @@ public class JMSMailQueue implements ManageableMailQueue, JMSSupport, MailPriori protected final String queueName; protected final ConnectionFactory connectionFactory; protected final MailQueueItemDecoratorFactory mailQueueItemDecoratorFactory; + protected final Metric enqueuedMailsMetric; protected final Logger logger; public final static String FORCE_DELIVERY = "FORCE_DELIVERY"; - public JMSMailQueue(ConnectionFactory connectionFactory, MailQueueItemDecoratorFactory mailQueueItemDecoratorFactory, String queueName, Logger logger) { + public JMSMailQueue(ConnectionFactory connectionFactory, MailQueueItemDecoratorFactory mailQueueItemDecoratorFactory, String queueName, Metric enqueuedMailsMetric, Logger logger) { this.connectionFactory = connectionFactory; this.mailQueueItemDecoratorFactory = mailQueueItemDecoratorFactory; this.queueName = queueName; + this.enqueuedMailsMetric = enqueuedMailsMetric; this.logger = logger; } @@ -204,6 +207,7 @@ public class JMSMailQueue implements ManageableMailQueue, JMSSupport, MailPriori produceMail(session, props, msgPrio, mail); + enqueuedMailsMetric.increment(); } catch (Exception e) { if (session != null) { try { http://git-wip-us.apache.org/repos/asf/james-project/blob/197cc76f/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 897b80a..eea2319 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 @@ -21,6 +21,8 @@ package org.apache.james.queue.jms; import javax.inject.Inject; import javax.jms.ConnectionFactory; +import org.apache.james.metrics.api.Metric; +import org.apache.james.metrics.api.MetricFactory; import org.apache.james.queue.api.MailQueueItemDecoratorFactory; import org.apache.james.queue.api.MailQueue; import org.apache.james.queue.api.MailQueueFactory; @@ -31,18 +33,20 @@ import org.apache.james.queue.library.AbstractMailQueueFactory; */ public class JMSMailQueueFactory extends AbstractMailQueueFactory { - protected ConnectionFactory connectionFactory; - protected MailQueueItemDecoratorFactory mailQueueItemDecoratorFactory; + protected final ConnectionFactory connectionFactory; + protected final MailQueueItemDecoratorFactory mailQueueItemDecoratorFactory; + protected final MetricFactory metricFactory; @Inject - public JMSMailQueueFactory(ConnectionFactory connectionFactory, MailQueueItemDecoratorFactory mailQueueItemDecoratorFactory) { + public JMSMailQueueFactory(ConnectionFactory connectionFactory, MailQueueItemDecoratorFactory mailQueueItemDecoratorFactory, MetricFactory metricFactory) { this.connectionFactory = connectionFactory; this.mailQueueItemDecoratorFactory = mailQueueItemDecoratorFactory; + this.metricFactory = metricFactory; } @Override protected MailQueue createMailQueue(String name) { - return new JMSMailQueue(connectionFactory, mailQueueItemDecoratorFactory, name, log); + return new JMSMailQueue(connectionFactory, mailQueueItemDecoratorFactory, name, metricFactory.generate("enqueuedMail:" + name), log); } } http://git-wip-us.apache.org/repos/asf/james-project/blob/197cc76f/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 7d15da6..f4af982 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,6 +22,7 @@ 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; @@ -39,6 +40,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.protocols.smtp.MailAddressException; import org.apache.james.queue.api.MailQueue.MailQueueItem; import org.apache.james.queue.api.MailQueueItemDecoratorFactory; @@ -69,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, log); + return new JMSMailQueue(factory, mailQueueItemDecoratorFactory, queueName, mock(Metric.class), log); } @Before --------------------------------------------------------------------- To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org For additional commands, e-mail: server-dev-h...@james.apache.org