You are viewing a plain text version of this content. The canonical link for it is here.
Posted to server-dev@james.apache.org by ro...@apache.org on 2016/11/30 14:01:30 UTC

[11/16] james-project git commit: JAMES-1868 Adding a metrics to SMTP and LMTP

JAMES-1868 Adding a metrics to SMTP and LMTP


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

Branch: refs/heads/master
Commit: 78f7dbb38b1d753f0b211b69e2c651bb2de8aaf7
Parents: 9d40cb2
Author: Benoit Tellier <bt...@linagora.com>
Authored: Tue Nov 29 09:31:05 2016 +0700
Committer: Benoit Tellier <bt...@linagora.com>
Committed: Wed Nov 30 16:32:21 2016 +0700

----------------------------------------------------------------------
 .../james/lmtpserver/netty/LMTPMetricsImpl.java | 45 +++++++++++++++++++
 .../james/lmtpserver/netty/LMTPServer.java      |  6 ++-
 .../lmtpserver/netty/LMTPServerFactory.java     | 17 ++++----
 .../james/lmtpserver/netty/OioLMTPServer.java   |  5 +++
 .../lmtpserver/netty/OioLMTPServerFactory.java  | 10 ++++-
 .../META-INF/spring/lmtpserver-context.xml      |  5 ++-
 server/protocols/protocols-smtp/pom.xml         |  9 ++++
 .../james/smtpserver/netty/OioSMTPServer.java   |  4 ++
 .../smtpserver/netty/OioSMTPServerFactory.java  | 11 ++++-
 .../netty/SMTPChannelUpstreamHandler.java       | 27 +++++++++++-
 .../james/smtpserver/netty/SMTPServer.java      |  7 ++-
 .../smtpserver/netty/SMTPServerFactory.java     | 25 +++++------
 .../james/smtpserver/netty/SmtpMetrics.java     | 28 ++++++++++++
 .../james/smtpserver/netty/SmtpMetricsImpl.java | 46 ++++++++++++++++++++
 .../META-INF/spring/smtpserver-context.xml      |  7 +--
 .../james/smtpserver/OioSMTPServerTest.java     |  5 ++-
 .../apache/james/smtpserver/SMTPServerTest.java | 14 ++++--
 17 files changed, 230 insertions(+), 41 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/78f7dbb3/server/protocols/protocols-lmtp/src/main/java/org/apache/james/lmtpserver/netty/LMTPMetricsImpl.java
----------------------------------------------------------------------
diff --git a/server/protocols/protocols-lmtp/src/main/java/org/apache/james/lmtpserver/netty/LMTPMetricsImpl.java b/server/protocols/protocols-lmtp/src/main/java/org/apache/james/lmtpserver/netty/LMTPMetricsImpl.java
new file mode 100644
index 0000000..92738cf
--- /dev/null
+++ b/server/protocols/protocols-lmtp/src/main/java/org/apache/james/lmtpserver/netty/LMTPMetricsImpl.java
@@ -0,0 +1,45 @@
+/****************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one   *
+ * or more contributor license agreements.  See the NOTICE file *
+ * distributed with this work for additional information        *
+ * regarding copyright ownership.  The ASF licenses this file   *
+ * to you under the Apache License, Version 2.0 (the            *
+ * "License"); you may not use this file except in compliance   *
+ * with the License.  You may obtain a copy of the License at   *
+ *                                                              *
+ *   http://www.apache.org/licenses/LICENSE-2.0                 *
+ *                                                              *
+ * Unless required by applicable law or agreed to in writing,   *
+ * software distributed under the License is distributed on an  *
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
+ * KIND, either express or implied.  See the License for the    *
+ * specific language governing permissions and limitations      *
+ * under the License.                                           *
+ ****************************************************************/
+
+package org.apache.james.lmtpserver.netty;
+
+import org.apache.james.metrics.api.Metric;
+import org.apache.james.metrics.api.MetricFactory;
+import org.apache.james.smtpserver.netty.SmtpMetrics;
+
+public class LMTPMetricsImpl implements SmtpMetrics {
+    private static final String LMTP_CONNECTIONS = "lmtpConnections";
+    private static final String LMTP_COMMANDS = "lmtpCommands";
+
+    private final MetricFactory metricFactory;
+
+    public LMTPMetricsImpl(MetricFactory metricFactory) {
+        this.metricFactory = metricFactory;
+    }
+
+    @Override
+    public Metric getConnectionMetric() {
+        return metricFactory.generate(LMTP_CONNECTIONS);
+    }
+
+    @Override
+    public Metric getCommandsMetric() {
+        return metricFactory.generate(LMTP_COMMANDS);
+    }
+}

http://git-wip-us.apache.org/repos/asf/james-project/blob/78f7dbb3/server/protocols/protocols-lmtp/src/main/java/org/apache/james/lmtpserver/netty/LMTPServer.java
----------------------------------------------------------------------
diff --git a/server/protocols/protocols-lmtp/src/main/java/org/apache/james/lmtpserver/netty/LMTPServer.java b/server/protocols/protocols-lmtp/src/main/java/org/apache/james/lmtpserver/netty/LMTPServer.java
index 2a8367c..860a05f 100644
--- a/server/protocols/protocols-lmtp/src/main/java/org/apache/james/lmtpserver/netty/LMTPServer.java
+++ b/server/protocols/protocols-lmtp/src/main/java/org/apache/james/lmtpserver/netty/LMTPServer.java
@@ -39,8 +39,12 @@ public class LMTPServer extends AbstractProtocolAsyncServer implements LMTPServe
      */
     private long maxMessageSize = 0;
     private final LMTPConfigurationImpl lmtpConfig = new LMTPConfigurationImpl();
+    private final LMTPMetricsImpl lmtpMetrics;
     private String lmtpGreeting;
 
+    public LMTPServer(LMTPMetricsImpl lmtpMetrics) {
+        this.lmtpMetrics = lmtpMetrics;
+    }
 
     /**
      * @see
@@ -138,7 +142,7 @@ public class LMTPServer extends AbstractProtocolAsyncServer implements LMTPServe
     @Override
     protected ChannelUpstreamHandler createCoreHandler() {
         SMTPProtocol protocol = new SMTPProtocol(getProtocolHandlerChain(), lmtpConfig, new ProtocolLoggerAdapter(getLogger()));
-        return new SMTPChannelUpstreamHandler(protocol, getLogger());
+        return new SMTPChannelUpstreamHandler(protocol, getLogger(), lmtpMetrics);
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/james-project/blob/78f7dbb3/server/protocols/protocols-lmtp/src/main/java/org/apache/james/lmtpserver/netty/LMTPServerFactory.java
----------------------------------------------------------------------
diff --git a/server/protocols/protocols-lmtp/src/main/java/org/apache/james/lmtpserver/netty/LMTPServerFactory.java b/server/protocols/protocols-lmtp/src/main/java/org/apache/james/lmtpserver/netty/LMTPServerFactory.java
index 5306364..88160d0 100644
--- a/server/protocols/protocols-lmtp/src/main/java/org/apache/james/lmtpserver/netty/LMTPServerFactory.java
+++ b/server/protocols/protocols-lmtp/src/main/java/org/apache/james/lmtpserver/netty/LMTPServerFactory.java
@@ -25,6 +25,7 @@ import javax.inject.Inject;
 
 import org.apache.commons.configuration.HierarchicalConfiguration;
 import org.apache.james.filesystem.api.FileSystem;
+import org.apache.james.metrics.api.MetricFactory;
 import org.apache.james.protocols.lib.handler.ProtocolHandlerLoader;
 import org.apache.james.protocols.lib.netty.AbstractConfigurableAsyncServer;
 import org.apache.james.protocols.lib.netty.AbstractServerFactory;
@@ -32,21 +33,19 @@ import org.slf4j.Logger;
 
 public class LMTPServerFactory extends AbstractServerFactory{
 
-    private ProtocolHandlerLoader loader;
-    private FileSystem fileSystem;
+    private final ProtocolHandlerLoader loader;
+    private final FileSystem fileSystem;
+    protected final LMTPMetricsImpl lmtpMetrics;
 
     @Inject
-    public void setProtocolHandlerLoader(ProtocolHandlerLoader loader) {
+    public LMTPServerFactory(ProtocolHandlerLoader loader, FileSystem fileSystem, MetricFactory metricFactory) {
         this.loader = loader;
-    }
-    
-    @Inject
-    public final void setFileSystem(FileSystem filesystem) {
-        this.fileSystem = filesystem;
+        this.fileSystem = fileSystem;
+        this.lmtpMetrics = new LMTPMetricsImpl(metricFactory);
     }
 
     protected LMTPServer createServer() {
-       return new LMTPServer();
+       return new LMTPServer(lmtpMetrics);
     }
     
     @Override

http://git-wip-us.apache.org/repos/asf/james-project/blob/78f7dbb3/server/protocols/protocols-lmtp/src/main/java/org/apache/james/lmtpserver/netty/OioLMTPServer.java
----------------------------------------------------------------------
diff --git a/server/protocols/protocols-lmtp/src/main/java/org/apache/james/lmtpserver/netty/OioLMTPServer.java b/server/protocols/protocols-lmtp/src/main/java/org/apache/james/lmtpserver/netty/OioLMTPServer.java
index 73e2a17..0653b24 100644
--- a/server/protocols/protocols-lmtp/src/main/java/org/apache/james/lmtpserver/netty/OioLMTPServer.java
+++ b/server/protocols/protocols-lmtp/src/main/java/org/apache/james/lmtpserver/netty/OioLMTPServer.java
@@ -28,6 +28,11 @@ import org.jboss.netty.handler.execution.ExecutionHandler;
  */
 public class OioLMTPServer extends LMTPServer {
 
+
+    public OioLMTPServer(LMTPMetricsImpl lmtpMetrics) {
+        super(lmtpMetrics);
+    }
+
     @Override
     protected ServerSocketChannelFactory createSocketChannelFactory() {
         return new OioServerSocketChannelFactory(createBossExecutor(), createWorkerExecutor());

http://git-wip-us.apache.org/repos/asf/james-project/blob/78f7dbb3/server/protocols/protocols-lmtp/src/main/java/org/apache/james/lmtpserver/netty/OioLMTPServerFactory.java
----------------------------------------------------------------------
diff --git a/server/protocols/protocols-lmtp/src/main/java/org/apache/james/lmtpserver/netty/OioLMTPServerFactory.java b/server/protocols/protocols-lmtp/src/main/java/org/apache/james/lmtpserver/netty/OioLMTPServerFactory.java
index a69fb23..53f8918 100644
--- a/server/protocols/protocols-lmtp/src/main/java/org/apache/james/lmtpserver/netty/OioLMTPServerFactory.java
+++ b/server/protocols/protocols-lmtp/src/main/java/org/apache/james/lmtpserver/netty/OioLMTPServerFactory.java
@@ -18,11 +18,19 @@
  ****************************************************************/
 package org.apache.james.lmtpserver.netty;
 
+import org.apache.james.filesystem.api.FileSystem;
+import org.apache.james.metrics.api.MetricFactory;
+import org.apache.james.protocols.lib.handler.ProtocolHandlerLoader;
+
 public class OioLMTPServerFactory extends LMTPServerFactory{
 
+    public OioLMTPServerFactory(ProtocolHandlerLoader loader, FileSystem fileSystem, MetricFactory metricFactory) {
+        super(loader, fileSystem, metricFactory);
+    }
+
     @Override
     protected LMTPServer createServer() {
-        return new OioLMTPServer();
+        return new OioLMTPServer(lmtpMetrics);
     }
 
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/78f7dbb3/server/protocols/protocols-lmtp/src/main/resources/META-INF/spring/lmtpserver-context.xml
----------------------------------------------------------------------
diff --git a/server/protocols/protocols-lmtp/src/main/resources/META-INF/spring/lmtpserver-context.xml b/server/protocols/protocols-lmtp/src/main/resources/META-INF/spring/lmtpserver-context.xml
index 8d4a98c..85a7943 100644
--- a/server/protocols/protocols-lmtp/src/main/resources/META-INF/spring/lmtpserver-context.xml
+++ b/server/protocols/protocols-lmtp/src/main/resources/META-INF/spring/lmtpserver-context.xml
@@ -18,8 +18,9 @@
        xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
 
     <bean id="lmtpserver" class="org.apache.james.lmtpserver.netty.LMTPServerFactory">
-        <property name="protocolHandlerLoader" ref="protocolhandlerloader"/>
-        <property name="fileSystem" ref="filesystem"/>
+        <constructor-arg index="0" ref="protocolhandlerloader"/>
+        <constructor-arg index="1" ref="filesystem"/>
+        <constructor-arg index="2" ref="metricFactory"/>
     </bean>
     
 </beans>

http://git-wip-us.apache.org/repos/asf/james-project/blob/78f7dbb3/server/protocols/protocols-smtp/pom.xml
----------------------------------------------------------------------
diff --git a/server/protocols/protocols-smtp/pom.xml b/server/protocols/protocols-smtp/pom.xml
index e437da6..a4e4a3c 100644
--- a/server/protocols/protocols-smtp/pom.xml
+++ b/server/protocols/protocols-smtp/pom.xml
@@ -67,6 +67,10 @@
         </dependency>
         <dependency>
             <groupId>org.apache.james</groupId>
+            <artifactId>james-server-metrics-api</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.james</groupId>
             <artifactId>james-server-protocols-library</artifactId>
         </dependency>
         <dependency>
@@ -196,6 +200,11 @@
             <scope>test</scope>
         </dependency>
         <dependency>
+            <groupId>org.mockito</groupId>
+            <artifactId>mockito-core</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
             <groupId>commons-codec</groupId>
             <artifactId>commons-codec</artifactId>
             <scope>test</scope>

http://git-wip-us.apache.org/repos/asf/james-project/blob/78f7dbb3/server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/netty/OioSMTPServer.java
----------------------------------------------------------------------
diff --git a/server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/netty/OioSMTPServer.java b/server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/netty/OioSMTPServer.java
index 7dacf59..03eb423 100644
--- a/server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/netty/OioSMTPServer.java
+++ b/server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/netty/OioSMTPServer.java
@@ -28,6 +28,10 @@ import org.jboss.netty.handler.execution.ExecutionHandler;
  */
 public class OioSMTPServer extends SMTPServer {
 
+    public OioSMTPServer(SmtpMetricsImpl smtpMetrics) {
+        super(smtpMetrics);
+    }
+
     @Override
     protected ServerSocketChannelFactory createSocketChannelFactory() {
         return new OioServerSocketChannelFactory(createBossExecutor(), createWorkerExecutor());

http://git-wip-us.apache.org/repos/asf/james-project/blob/78f7dbb3/server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/netty/OioSMTPServerFactory.java
----------------------------------------------------------------------
diff --git a/server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/netty/OioSMTPServerFactory.java b/server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/netty/OioSMTPServerFactory.java
index 0158076..ea0e112 100644
--- a/server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/netty/OioSMTPServerFactory.java
+++ b/server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/netty/OioSMTPServerFactory.java
@@ -19,11 +19,20 @@
 
 package org.apache.james.smtpserver.netty;
 
+import org.apache.james.dnsservice.api.DNSService;
+import org.apache.james.filesystem.api.FileSystem;
+import org.apache.james.metrics.api.MetricFactory;
+import org.apache.james.protocols.lib.handler.ProtocolHandlerLoader;
+
 public class OioSMTPServerFactory extends SMTPServerFactory{
 
+    public OioSMTPServerFactory(DNSService dns, ProtocolHandlerLoader loader, FileSystem fileSystem, MetricFactory metricFactory) {
+        super(dns, loader, fileSystem, metricFactory);
+    }
+
     @Override
     protected SMTPServer createServer() {
-        return new OioSMTPServer();
+        return new OioSMTPServer(smtpMetrics);
     }
 
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/78f7dbb3/server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/netty/SMTPChannelUpstreamHandler.java
----------------------------------------------------------------------
diff --git a/server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/netty/SMTPChannelUpstreamHandler.java b/server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/netty/SMTPChannelUpstreamHandler.java
index 74b6b64..64ae9b6 100644
--- a/server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/netty/SMTPChannelUpstreamHandler.java
+++ b/server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/netty/SMTPChannelUpstreamHandler.java
@@ -27,7 +27,9 @@ import org.apache.james.protocols.smtp.SMTPSession;
 import org.apache.james.smtpserver.SMTPConstants;
 import org.jboss.netty.channel.ChannelHandler.Sharable;
 import org.jboss.netty.channel.ChannelHandlerContext;
+import org.jboss.netty.channel.ChannelStateEvent;
 import org.jboss.netty.channel.ChannelUpstreamHandler;
+import org.jboss.netty.channel.MessageEvent;
 import org.slf4j.Logger;
 
 /**
@@ -36,13 +38,34 @@ import org.slf4j.Logger;
 @Sharable
 public class SMTPChannelUpstreamHandler extends BasicChannelUpstreamHandler {
 
+    private final SmtpMetrics smtpMetrics;
 
-    public SMTPChannelUpstreamHandler(Protocol protocol, Logger logger, Encryption encryption) {
+    public SMTPChannelUpstreamHandler(Protocol protocol, Logger logger, Encryption encryption, SmtpMetrics smtpMetrics) {
         super(protocol, encryption);
+        this.smtpMetrics = smtpMetrics;
     }
 
-    public SMTPChannelUpstreamHandler(Protocol protocol, Logger logger) {
+    public SMTPChannelUpstreamHandler(Protocol protocol, Logger logger, SmtpMetrics smtpMetrics) {
         super(protocol);
+        this.smtpMetrics = smtpMetrics;
+    }
+
+    @Override
+    public void channelConnected(ChannelHandlerContext ctx, ChannelStateEvent e) throws Exception {
+        super.channelConnected(ctx, e);
+        smtpMetrics.getConnectionMetric().increment();
+    }
+
+    @Override
+    public void messageReceived(ChannelHandlerContext ctx, MessageEvent e) throws Exception {
+        super.messageReceived(ctx, e);
+        smtpMetrics.getCommandsMetric().increment();
+    }
+
+    @Override
+    public void channelDisconnected(ChannelHandlerContext ctx, ChannelStateEvent e) throws Exception {
+        super.channelClosed(ctx, e);
+        smtpMetrics.getConnectionMetric().decrement();
     }
 
     /**

http://git-wip-us.apache.org/repos/asf/james-project/blob/78f7dbb3/server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/netty/SMTPServer.java
----------------------------------------------------------------------
diff --git a/server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/netty/SMTPServer.java b/server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/netty/SMTPServer.java
index 611fdbc..bacc31a 100644
--- a/server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/netty/SMTPServer.java
+++ b/server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/netty/SMTPServer.java
@@ -75,6 +75,7 @@ public class SMTPServer extends AbstractProtocolAsyncServer implements SMTPServe
      * The configuration data to be passed to the handler
      */
     private final SMTPConfiguration theConfigData = new SMTPHandlerConfigurationDataImpl();
+    private final SmtpMetrics smtpMetrics;
 
     private boolean addressBracketsEnforcement = true;
 
@@ -85,6 +86,10 @@ public class SMTPServer extends AbstractProtocolAsyncServer implements SMTPServe
     
     private SMTPChannelUpstreamHandler coreHandler;
 
+    public SMTPServer(SmtpMetrics smtpMetrics) {
+        this.smtpMetrics = smtpMetrics;
+    }
+
     @Inject
     public void setDnsService(DNSService dns) {
         this.dns = dns;
@@ -110,7 +115,7 @@ public class SMTPServer extends AbstractProtocolAsyncServer implements SMTPServe
             }
             
         };
-        coreHandler = new SMTPChannelUpstreamHandler(transport, getLogger(), getEncryption());        
+        coreHandler = new SMTPChannelUpstreamHandler(transport, getLogger(), getEncryption(), smtpMetrics);
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/james-project/blob/78f7dbb3/server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/netty/SMTPServerFactory.java
----------------------------------------------------------------------
diff --git a/server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/netty/SMTPServerFactory.java b/server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/netty/SMTPServerFactory.java
index f7e7938..d85d81f 100644
--- a/server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/netty/SMTPServerFactory.java
+++ b/server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/netty/SMTPServerFactory.java
@@ -27,6 +27,7 @@ import javax.inject.Inject;
 import org.apache.commons.configuration.HierarchicalConfiguration;
 import org.apache.james.dnsservice.api.DNSService;
 import org.apache.james.filesystem.api.FileSystem;
+import org.apache.james.metrics.api.MetricFactory;
 import org.apache.james.protocols.lib.handler.ProtocolHandlerLoader;
 import org.apache.james.protocols.lib.netty.AbstractConfigurableAsyncServer;
 import org.apache.james.protocols.lib.netty.AbstractServerFactory;
@@ -34,27 +35,21 @@ import org.slf4j.Logger;
 
 public class SMTPServerFactory extends AbstractServerFactory {
 
-    private DNSService dns;
-    private ProtocolHandlerLoader loader;
-    private FileSystem fileSystem;
+    protected final DNSService dns;
+    protected final ProtocolHandlerLoader loader;
+    protected final FileSystem fileSystem;
+    protected final SmtpMetricsImpl smtpMetrics;
 
-    @Inject
-    public void setDnsService(DNSService dns) {
-        this.dns = dns;
-    }
-    
     @Inject
-    public void setProtocolHandlerLoader(ProtocolHandlerLoader loader) {
+    public SMTPServerFactory(DNSService dns, ProtocolHandlerLoader loader, FileSystem fileSystem, MetricFactory metricFactory) {
+        this.dns = dns;
         this.loader = loader;
-    }
-
-    @Inject
-    public final void setFileSystem(FileSystem filesystem) {
-        this.fileSystem = filesystem;
+        this.fileSystem = fileSystem;
+        this.smtpMetrics = new SmtpMetricsImpl(metricFactory);
     }
 
     protected SMTPServer createServer() {
-       return new SMTPServer();
+       return new SMTPServer(smtpMetrics);
     }
     
     @Override

http://git-wip-us.apache.org/repos/asf/james-project/blob/78f7dbb3/server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/netty/SmtpMetrics.java
----------------------------------------------------------------------
diff --git a/server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/netty/SmtpMetrics.java b/server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/netty/SmtpMetrics.java
new file mode 100644
index 0000000..b2b7f40
--- /dev/null
+++ b/server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/netty/SmtpMetrics.java
@@ -0,0 +1,28 @@
+/****************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one   *
+ * or more contributor license agreements.  See the NOTICE file *
+ * distributed with this work for additional information        *
+ * regarding copyright ownership.  The ASF licenses this file   *
+ * to you under the Apache License, Version 2.0 (the            *
+ * "License"); you may not use this file except in compliance   *
+ * with the License.  You may obtain a copy of the License at   *
+ *                                                              *
+ *   http://www.apache.org/licenses/LICENSE-2.0                 *
+ *                                                              *
+ * Unless required by applicable law or agreed to in writing,   *
+ * software distributed under the License is distributed on an  *
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
+ * KIND, either express or implied.  See the License for the    *
+ * specific language governing permissions and limitations      *
+ * under the License.                                           *
+ ****************************************************************/
+
+package org.apache.james.smtpserver.netty;
+
+import org.apache.james.metrics.api.Metric;
+
+public interface SmtpMetrics {
+    Metric getConnectionMetric();
+
+    Metric getCommandsMetric();
+}

http://git-wip-us.apache.org/repos/asf/james-project/blob/78f7dbb3/server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/netty/SmtpMetricsImpl.java
----------------------------------------------------------------------
diff --git a/server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/netty/SmtpMetricsImpl.java b/server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/netty/SmtpMetricsImpl.java
new file mode 100644
index 0000000..a89f5d0
--- /dev/null
+++ b/server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/netty/SmtpMetricsImpl.java
@@ -0,0 +1,46 @@
+/****************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one   *
+ * or more contributor license agreements.  See the NOTICE file *
+ * distributed with this work for additional information        *
+ * regarding copyright ownership.  The ASF licenses this file   *
+ * to you under the Apache License, Version 2.0 (the            *
+ * "License"); you may not use this file except in compliance   *
+ * with the License.  You may obtain a copy of the License at   *
+ *                                                              *
+ *   http://www.apache.org/licenses/LICENSE-2.0                 *
+ *                                                              *
+ * Unless required by applicable law or agreed to in writing,   *
+ * software distributed under the License is distributed on an  *
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
+ * KIND, either express or implied.  See the License for the    *
+ * specific language governing permissions and limitations      *
+ * under the License.                                           *
+ ****************************************************************/
+
+package org.apache.james.smtpserver.netty;
+
+import org.apache.james.metrics.api.Metric;
+import org.apache.james.metrics.api.MetricFactory;
+
+public class SmtpMetricsImpl implements SmtpMetrics {
+    private static final String SMTP_CONNECTIONS = "smtpConnections";
+    private static final String SMTP_COMMANDS = "smtpCommands";
+
+    private final Metric smtpConnectionMetric;
+    private final Metric smtpCommandsMetric;
+
+    public SmtpMetricsImpl(MetricFactory metricFactory) {
+        this.smtpConnectionMetric = metricFactory.generate(SMTP_CONNECTIONS);
+        this.smtpCommandsMetric = metricFactory.generate(SMTP_COMMANDS);
+    }
+
+    @Override
+    public Metric getConnectionMetric() {
+        return smtpConnectionMetric;
+    }
+
+    @Override
+    public Metric getCommandsMetric() {
+        return smtpCommandsMetric;
+    }
+}

http://git-wip-us.apache.org/repos/asf/james-project/blob/78f7dbb3/server/protocols/protocols-smtp/src/main/resources/META-INF/spring/smtpserver-context.xml
----------------------------------------------------------------------
diff --git a/server/protocols/protocols-smtp/src/main/resources/META-INF/spring/smtpserver-context.xml b/server/protocols/protocols-smtp/src/main/resources/META-INF/spring/smtpserver-context.xml
index 8933b7e..68fedd9 100644
--- a/server/protocols/protocols-smtp/src/main/resources/META-INF/spring/smtpserver-context.xml
+++ b/server/protocols/protocols-smtp/src/main/resources/META-INF/spring/smtpserver-context.xml
@@ -19,9 +19,10 @@
        xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
 
     <bean id="smtpserver" class="org.apache.james.smtpserver.netty.SMTPServerFactory">
-        <property name="protocolHandlerLoader" ref="protocolhandlerloader"/>
-        <property name="fileSystem" ref="filesystem"/>
-        <property name="dnsService" ref="dnsservice"/>
+        <constructor-arg index="0" ref="dnsservice"/>
+        <constructor-arg index="1" ref="protocolhandlerloader"/>
+        <constructor-arg index="2" ref="filesystem"/>
+        <constructor-arg index="3" ref="metricFactory"/>
     </bean>
     
 </beans>

http://git-wip-us.apache.org/repos/asf/james-project/blob/78f7dbb3/server/protocols/protocols-smtp/src/test/java/org/apache/james/smtpserver/OioSMTPServerTest.java
----------------------------------------------------------------------
diff --git a/server/protocols/protocols-smtp/src/test/java/org/apache/james/smtpserver/OioSMTPServerTest.java b/server/protocols/protocols-smtp/src/test/java/org/apache/james/smtpserver/OioSMTPServerTest.java
index 9b65e35..f265d25 100644
--- a/server/protocols/protocols-smtp/src/test/java/org/apache/james/smtpserver/OioSMTPServerTest.java
+++ b/server/protocols/protocols-smtp/src/test/java/org/apache/james/smtpserver/OioSMTPServerTest.java
@@ -20,11 +20,12 @@ package org.apache.james.smtpserver;
 
 import org.apache.james.smtpserver.netty.OioSMTPServer;
 import org.apache.james.smtpserver.netty.SMTPServer;
+import org.apache.james.smtpserver.netty.SmtpMetricsImpl;
 
 public class OioSMTPServerTest extends SMTPServerTest {
 
     @Override
-    protected SMTPServer createSMTPServer() {
-        return new OioSMTPServer();
+    protected SMTPServer createSMTPServer(SmtpMetricsImpl smtpMetrics) {
+        return new OioSMTPServer(smtpMetrics);
     }
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/78f7dbb3/server/protocols/protocols-smtp/src/test/java/org/apache/james/smtpserver/SMTPServerTest.java
----------------------------------------------------------------------
diff --git a/server/protocols/protocols-smtp/src/test/java/org/apache/james/smtpserver/SMTPServerTest.java b/server/protocols/protocols-smtp/src/test/java/org/apache/james/smtpserver/SMTPServerTest.java
index 3585d50..780e919 100644
--- a/server/protocols/protocols-smtp/src/test/java/org/apache/james/smtpserver/SMTPServerTest.java
+++ b/server/protocols/protocols-smtp/src/test/java/org/apache/james/smtpserver/SMTPServerTest.java
@@ -24,6 +24,8 @@ import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertNull;
 import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.fail;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
 
 import java.io.BufferedReader;
 import java.io.ByteArrayOutputStream;
@@ -54,6 +56,7 @@ import org.apache.james.filesystem.api.FileSystem;
 import org.apache.james.filesystem.api.mock.MockFileSystem;
 import org.apache.james.mailrepository.api.MailRepositoryStore;
 import org.apache.james.mailrepository.mock.MockMailRepositoryStore;
+import org.apache.james.metrics.api.Metric;
 import org.apache.james.protocols.lib.PortUtil;
 import org.apache.james.protocols.lib.mock.MockProtocolHandlerLoader;
 import org.apache.james.protocols.netty.AbstractChannelPipelineFactory;
@@ -64,6 +67,7 @@ import org.apache.james.rrt.api.RecipientRewriteTable;
 import org.apache.james.rrt.api.RecipientRewriteTableException;
 import org.apache.james.rrt.lib.Mappings;
 import org.apache.james.smtpserver.netty.SMTPServer;
+import org.apache.james.smtpserver.netty.SmtpMetricsImpl;
 import org.apache.james.user.api.UsersRepository;
 import org.apache.james.user.lib.mock.InMemoryUsersRepository;
 import org.apache.mailet.HostAddress;
@@ -193,16 +197,18 @@ public class SMTPServerTest {
         setUpSMTPServer();
     }
 
-    protected SMTPServer createSMTPServer() {
-        return new SMTPServer();
+    protected SMTPServer createSMTPServer(SmtpMetricsImpl smtpMetrics) {
+        return new SMTPServer(smtpMetrics);
     }
 
     protected void setUpSMTPServer() {
-        
         Logger log = LoggerFactory.getLogger("SMTP");
         // slf4j can't set programmatically any log level. It's just a facade
         // log.setLevel(SimpleLog.LOG_LEVEL_ALL);
-        smtpServer = createSMTPServer();
+        SmtpMetricsImpl smtpMetrics = mock(SmtpMetricsImpl.class);
+        when(smtpMetrics.getCommandsMetric()).thenReturn(mock(Metric.class));
+        when(smtpMetrics.getConnectionMetric()).thenReturn(mock(Metric.class));
+        smtpServer = createSMTPServer(smtpMetrics);
         smtpServer.setDnsService(dnsServer);
         smtpServer.setFileSystem(fileSystem);
         smtpServer.setProtocolHandlerLoader(chain);


---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org