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