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

Reply via email to