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 <btell...@linagora.com> Authored: Tue Nov 29 09:31:05 2016 +0700 Committer: Benoit Tellier <btell...@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-unsubscr...@james.apache.org For additional commands, e-mail: server-dev-h...@james.apache.org