You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@james.apache.org by bt...@apache.org on 2021/02/25 09:06:55 UTC
[james-project] 07/12: JAMES-3504 Register metrics for POP3 commands
This is an automated email from the ASF dual-hosted git repository.
btellier pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/james-project.git
commit 33e9b7010b49d7ce64f6d56d590149d96abe4e09
Author: Benoit Tellier <bt...@linagora.com>
AuthorDate: Tue Feb 23 15:51:07 2021 +0700
JAMES-3504 Register metrics for POP3 commands
---
protocols/pop3/pom.xml | 9 +++++++
.../pop3/core/AbstractApopCmdHandler.java | 8 ++++++
.../pop3/core/AbstractPassCmdHandler.java | 13 ++++++++--
.../james/protocols/pop3/core/CapaCmdHandler.java | 19 +++++++++++---
.../james/protocols/pop3/core/DeleCmdHandler.java | 21 +++++++++++----
.../james/protocols/pop3/core/ListCmdHandler.java | 21 +++++++++++----
.../james/protocols/pop3/core/NoopCmdHandler.java | 21 +++++++++++----
.../james/protocols/pop3/core/QuitCmdHandler.java | 21 +++++++++++----
.../james/protocols/pop3/core/RetrCmdHandler.java | 23 ++++++++++++-----
.../james/protocols/pop3/core/RsetCmdHandler.java | 22 +++++++++++-----
.../james/protocols/pop3/core/StatCmdHandler.java | 21 +++++++++++----
.../james/protocols/pop3/core/StlsCmdHandler.java | 21 +++++++++++----
.../james/protocols/pop3/core/TopCmdHandler.java | 24 ++++++++++++-----
.../james/protocols/pop3/core/UidlCmdHandler.java | 23 ++++++++++++-----
.../james/protocols/pop3/core/UserCmdHandler.java | 23 ++++++++++++-----
.../protocols/pop3/AbstractPOP3ServerTest.java | 30 +++++++++++++---------
.../pop3/AbstractStartTlsPOP3ServerTest.java | 3 ++-
.../protocols/pop3/POP3ProtocolHandlerChain.java | 27 ++++++++++---------
.../protocols/pop3/core/RetrCmdHandlerTest.java | 5 ++--
.../protocols/pop3/utils/TestPassCmdHandler.java | 7 ++++-
.../james/pop3server/core/PassCmdHandler.java | 4 ++-
.../apache/james/pop3server/POP3ServerTest.java | 3 +++
22 files changed, 274 insertions(+), 95 deletions(-)
diff --git a/protocols/pop3/pom.xml b/protocols/pop3/pom.xml
index f77786e..784c795 100644
--- a/protocols/pop3/pom.xml
+++ b/protocols/pop3/pom.xml
@@ -39,6 +39,15 @@
</dependency>
<dependency>
<groupId>${james.groupId}</groupId>
+ <artifactId>metrics-api</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>${james.groupId}</groupId>
+ <artifactId>metrics-tests</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>${james.groupId}</groupId>
<artifactId>testing-base</artifactId>
<scope>test</scope>
</dependency>
diff --git a/protocols/pop3/src/main/java/org/apache/james/protocols/pop3/core/AbstractApopCmdHandler.java b/protocols/pop3/src/main/java/org/apache/james/protocols/pop3/core/AbstractApopCmdHandler.java
index 521c1df..06af37e 100644
--- a/protocols/pop3/src/main/java/org/apache/james/protocols/pop3/core/AbstractApopCmdHandler.java
+++ b/protocols/pop3/src/main/java/org/apache/james/protocols/pop3/core/AbstractApopCmdHandler.java
@@ -21,7 +21,10 @@ package org.apache.james.protocols.pop3.core;
import java.util.Collection;
+import javax.inject.Inject;
+
import org.apache.james.core.Username;
+import org.apache.james.metrics.api.MetricFactory;
import org.apache.james.protocols.api.ProtocolSession.State;
import org.apache.james.protocols.api.Request;
import org.apache.james.protocols.api.Response;
@@ -39,6 +42,11 @@ public abstract class AbstractApopCmdHandler extends AbstractPassCmdHandler {
private static final Collection<String> COMMANDS = ImmutableSet.of("APOP");
private static final String MISSING_APOP_TIMESTAMP = "";
+ @Inject
+ public AbstractApopCmdHandler(MetricFactory metricFactory) {
+ super(metricFactory);
+ }
+
@Override
public Response onCommand(POP3Session session, Request request) {
if (!session.getAttachment(POP3Session.APOP_TIMESTAMP, State.Connection).isPresent()) {
diff --git a/protocols/pop3/src/main/java/org/apache/james/protocols/pop3/core/AbstractPassCmdHandler.java b/protocols/pop3/src/main/java/org/apache/james/protocols/pop3/core/AbstractPassCmdHandler.java
index 8b1a48e..ba70287 100644
--- a/protocols/pop3/src/main/java/org/apache/james/protocols/pop3/core/AbstractPassCmdHandler.java
+++ b/protocols/pop3/src/main/java/org/apache/james/protocols/pop3/core/AbstractPassCmdHandler.java
@@ -23,6 +23,7 @@ import java.util.Collection;
import java.util.Optional;
import org.apache.james.core.Username;
+import org.apache.james.metrics.api.MetricFactory;
import org.apache.james.protocols.api.Request;
import org.apache.james.protocols.api.Response;
import org.apache.james.protocols.pop3.POP3Response;
@@ -43,17 +44,25 @@ public abstract class AbstractPassCmdHandler extends RsetCmdHandler {
private static final Response UNEXPECTED_ERROR = new POP3Response(POP3Response.ERR_RESPONSE, "Unexpected error accessing mailbox").immutable();
protected static final Response AUTH_FAILED = new POP3Response(POP3Response.ERR_RESPONSE, "Authentication failed.").immutable();
+ private final MetricFactory metricFactory;
+
+ public AbstractPassCmdHandler(MetricFactory metricFactory) {
+ super(metricFactory);
+ this.metricFactory = metricFactory;
+ }
+
/**
* Handler method called upon receipt of a PASS command. Reads in and
* validates the password.
*/
@Override
public Response onCommand(POP3Session session, Request request) {
- return MDCBuilder.withMdc(
+ return metricFactory.decorateSupplierWithTimerMetric("pop3-pass", () ->
+ MDCBuilder.withMdc(
MDCBuilder.create()
.addContext(MDCBuilder.ACTION, "AUTH")
.addContext(MDCConstants.withSession(session)),
- () -> doAuth(session, request));
+ () -> doAuth(session, request)));
}
private Response doAuth(POP3Session session, Request request) {
diff --git a/protocols/pop3/src/main/java/org/apache/james/protocols/pop3/core/CapaCmdHandler.java b/protocols/pop3/src/main/java/org/apache/james/protocols/pop3/core/CapaCmdHandler.java
index b902f6e..8c93abc 100644
--- a/protocols/pop3/src/main/java/org/apache/james/protocols/pop3/core/CapaCmdHandler.java
+++ b/protocols/pop3/src/main/java/org/apache/james/protocols/pop3/core/CapaCmdHandler.java
@@ -24,6 +24,9 @@ import java.util.Collection;
import java.util.List;
import java.util.Set;
+import javax.inject.Inject;
+
+import org.apache.james.metrics.api.MetricFactory;
import org.apache.james.protocols.api.Request;
import org.apache.james.protocols.api.Response;
import org.apache.james.protocols.api.handler.CommandHandler;
@@ -43,12 +46,20 @@ public class CapaCmdHandler implements CommandHandler<POP3Session>, ExtensibleHa
private static final Collection<String> COMMANDS = ImmutableSet.of("CAPA");
private static final Set<String> CAPS = ImmutableSet.of("PIPELINING");
+ private final MetricFactory metricFactory;
+
+ @Inject
+ public CapaCmdHandler(MetricFactory metricFactory) {
+ this.metricFactory = metricFactory;
+ }
+
@Override
public Response onCommand(POP3Session session, Request request) {
- return MDCBuilder.withMdc(MDCBuilder.create()
- .addContext(MDCBuilder.ACTION, "CAPA")
- .addContext(MDCConstants.withSession(session)),
- () -> capa(session));
+ return metricFactory.decorateSupplierWithTimerMetric("pop3-capa", () ->
+ MDCBuilder.withMdc(MDCBuilder.create()
+ .addContext(MDCBuilder.ACTION, "CAPA")
+ .addContext(MDCConstants.withSession(session)),
+ () -> capa(session)));
}
private Response capa(POP3Session session) {
diff --git a/protocols/pop3/src/main/java/org/apache/james/protocols/pop3/core/DeleCmdHandler.java b/protocols/pop3/src/main/java/org/apache/james/protocols/pop3/core/DeleCmdHandler.java
index d32624a..cdc0771 100644
--- a/protocols/pop3/src/main/java/org/apache/james/protocols/pop3/core/DeleCmdHandler.java
+++ b/protocols/pop3/src/main/java/org/apache/james/protocols/pop3/core/DeleCmdHandler.java
@@ -23,6 +23,9 @@ import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
+import javax.inject.Inject;
+
+import org.apache.james.metrics.api.MetricFactory;
import org.apache.james.protocols.api.ProtocolSession.State;
import org.apache.james.protocols.api.Request;
import org.apache.james.protocols.api.Response;
@@ -43,6 +46,13 @@ public class DeleCmdHandler implements CommandHandler<POP3Session> {
private static final Response SYNTAX_ERROR = new POP3Response(POP3Response.ERR_RESPONSE, "Usage: DELE [mail number]").immutable();
private static final Response DELETED = new POP3Response(POP3Response.OK_RESPONSE, "Message deleted").immutable();
+ private final MetricFactory metricFactory;
+
+ @Inject
+ public DeleCmdHandler(MetricFactory metricFactory) {
+ this.metricFactory = metricFactory;
+ }
+
/**
* Handler method called upon receipt of a DELE command. This command
* deletes a particular mail message from the mailbox.
@@ -50,11 +60,12 @@ public class DeleCmdHandler implements CommandHandler<POP3Session> {
@Override
@SuppressWarnings("unchecked")
public Response onCommand(POP3Session session, Request request) {
- return MDCBuilder.withMdc(MDCBuilder.create()
- .addContext(MDCBuilder.ACTION, "DELE")
- .addContext(MDCConstants.withSession(session))
- .addContext(MDCConstants.forRequest(request)),
- () -> delete(session, request));
+ return metricFactory.decorateSupplierWithTimerMetric("pop3-dele", () ->
+ MDCBuilder.withMdc(MDCBuilder.create()
+ .addContext(MDCBuilder.ACTION, "DELE")
+ .addContext(MDCConstants.withSession(session))
+ .addContext(MDCConstants.forRequest(request)),
+ () -> delete(session, request)));
}
private Response delete(POP3Session session, Request request) {
diff --git a/protocols/pop3/src/main/java/org/apache/james/protocols/pop3/core/ListCmdHandler.java b/protocols/pop3/src/main/java/org/apache/james/protocols/pop3/core/ListCmdHandler.java
index 4c16b54..60649de 100644
--- a/protocols/pop3/src/main/java/org/apache/james/protocols/pop3/core/ListCmdHandler.java
+++ b/protocols/pop3/src/main/java/org/apache/james/protocols/pop3/core/ListCmdHandler.java
@@ -23,6 +23,9 @@ import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
+import javax.inject.Inject;
+
+import org.apache.james.metrics.api.MetricFactory;
import org.apache.james.protocols.api.ProtocolSession.State;
import org.apache.james.protocols.api.Request;
import org.apache.james.protocols.api.Response;
@@ -42,6 +45,13 @@ public class ListCmdHandler implements CommandHandler<POP3Session> {
private static final Collection<String> COMMANDS = ImmutableSet.of("LIST");
+ private final MetricFactory metricFactory;
+
+ @Inject
+ public ListCmdHandler(MetricFactory metricFactory) {
+ this.metricFactory = metricFactory;
+ }
+
/**
* Handler method called upon receipt of a LIST command. Returns the number
* of messages in the mailbox and its aggregate size, or optionally, the
@@ -56,11 +66,12 @@ public class ListCmdHandler implements CommandHandler<POP3Session> {
@Override
@SuppressWarnings("unchecked")
public Response onCommand(POP3Session session, Request request) {
- return MDCBuilder.withMdc(MDCBuilder.create()
- .addContext(MDCBuilder.ACTION, "LIST")
- .addContext(MDCConstants.withSession(session))
- .addContext(MDCConstants.forRequest(request)),
- () -> list(session, request));
+ return metricFactory.decorateSupplierWithTimerMetric("pop3-list", () ->
+ MDCBuilder.withMdc(MDCBuilder.create()
+ .addContext(MDCBuilder.ACTION, "LIST")
+ .addContext(MDCConstants.withSession(session))
+ .addContext(MDCConstants.forRequest(request)),
+ () -> list(session, request)));
}
private Response list(POP3Session session, Request request) {
diff --git a/protocols/pop3/src/main/java/org/apache/james/protocols/pop3/core/NoopCmdHandler.java b/protocols/pop3/src/main/java/org/apache/james/protocols/pop3/core/NoopCmdHandler.java
index 0796771..4bdc7b5 100644
--- a/protocols/pop3/src/main/java/org/apache/james/protocols/pop3/core/NoopCmdHandler.java
+++ b/protocols/pop3/src/main/java/org/apache/james/protocols/pop3/core/NoopCmdHandler.java
@@ -21,6 +21,9 @@ package org.apache.james.protocols.pop3.core;
import java.util.Collection;
+import javax.inject.Inject;
+
+import org.apache.james.metrics.api.MetricFactory;
import org.apache.james.protocols.api.Request;
import org.apache.james.protocols.api.Response;
import org.apache.james.protocols.api.handler.CommandHandler;
@@ -39,17 +42,25 @@ public class NoopCmdHandler implements CommandHandler<POP3Session> {
private static final Logger LOGGER = LoggerFactory.getLogger(NoopCmdHandler.class);
private static final Collection<String> COMMANDS = ImmutableSet.of("NOOP");
+ private final MetricFactory metricFactory;
+
+ @Inject
+ public NoopCmdHandler(MetricFactory metricFactory) {
+ this.metricFactory = metricFactory;
+ }
+
/**
* Handler method called upon receipt of a NOOP command. Like all good
* NOOPs, does nothing much.
*/
@Override
public Response onCommand(POP3Session session, Request request) {
- return MDCBuilder.withMdc(
- MDCBuilder.create()
- .addContext(MDCBuilder.ACTION, "NOOP")
- .addContext(MDCConstants.withSession(session)),
- () -> noop(session));
+ return metricFactory.decorateSupplierWithTimerMetric("pop3-noop", () ->
+ MDCBuilder.withMdc(
+ MDCBuilder.create()
+ .addContext(MDCBuilder.ACTION, "NOOP")
+ .addContext(MDCConstants.withSession(session)),
+ () -> noop(session)));
}
private Response noop(POP3Session session) {
diff --git a/protocols/pop3/src/main/java/org/apache/james/protocols/pop3/core/QuitCmdHandler.java b/protocols/pop3/src/main/java/org/apache/james/protocols/pop3/core/QuitCmdHandler.java
index 248cd4d..902ae72 100644
--- a/protocols/pop3/src/main/java/org/apache/james/protocols/pop3/core/QuitCmdHandler.java
+++ b/protocols/pop3/src/main/java/org/apache/james/protocols/pop3/core/QuitCmdHandler.java
@@ -23,6 +23,9 @@ import java.io.IOException;
import java.util.Collection;
import java.util.List;
+import javax.inject.Inject;
+
+import org.apache.james.metrics.api.MetricFactory;
import org.apache.james.protocols.api.ProtocolSession.State;
import org.apache.james.protocols.api.Request;
import org.apache.james.protocols.api.Response;
@@ -56,17 +59,25 @@ public class QuitCmdHandler implements CommandHandler<POP3Session> {
SIGN_OFF_NOT_CLEAN = response.immutable();
}
+ private final MetricFactory metricFactory;
+
+ @Inject
+ public QuitCmdHandler(MetricFactory metricFactory) {
+ this.metricFactory = metricFactory;
+ }
+
/**
* Handler method called upon receipt of a QUIT command. This method handles
* cleanup of the POP3Handler state.
*/
@Override
public Response onCommand(POP3Session session, Request request) {
- return MDCBuilder.withMdc(
- MDCBuilder.create()
- .addContext(MDCBuilder.ACTION, "QUIT")
- .addContext(MDCConstants.withSession(session)),
- () -> quit(session));
+ return metricFactory.decorateSupplierWithTimerMetric("pop3-quit", () ->
+ MDCBuilder.withMdc(
+ MDCBuilder.create()
+ .addContext(MDCBuilder.ACTION, "QUIT")
+ .addContext(MDCConstants.withSession(session)),
+ () -> quit(session)));
}
private Response quit(POP3Session session) {
diff --git a/protocols/pop3/src/main/java/org/apache/james/protocols/pop3/core/RetrCmdHandler.java b/protocols/pop3/src/main/java/org/apache/james/protocols/pop3/core/RetrCmdHandler.java
index 8544741..fc05faa 100644
--- a/protocols/pop3/src/main/java/org/apache/james/protocols/pop3/core/RetrCmdHandler.java
+++ b/protocols/pop3/src/main/java/org/apache/james/protocols/pop3/core/RetrCmdHandler.java
@@ -24,6 +24,9 @@ import java.io.InputStream;
import java.util.Collection;
import java.util.List;
+import javax.inject.Inject;
+
+import org.apache.james.metrics.api.MetricFactory;
import org.apache.james.protocols.api.ProtocolSession.State;
import org.apache.james.protocols.api.Request;
import org.apache.james.protocols.api.Response;
@@ -50,6 +53,13 @@ public class RetrCmdHandler implements CommandHandler<POP3Session> {
static final Response SYNTAX_ERROR = new POP3Response(POP3Response.ERR_RESPONSE, "Usage: RETR [mail number]").immutable();
private static final Response ERROR_MESSAGE_RETRIEVE = new POP3Response(POP3Response.ERR_RESPONSE, "Error while retrieving message.").immutable();
+ private final MetricFactory metricFactory;
+
+ @Inject
+ public RetrCmdHandler(MetricFactory metricFactory) {
+ this.metricFactory = metricFactory;
+ }
+
/**
* Handler method called upon receipt of a RETR command. This command
* retrieves a particular mail message from the mailbox.
@@ -57,12 +67,13 @@ public class RetrCmdHandler implements CommandHandler<POP3Session> {
@Override
@SuppressWarnings("unchecked")
public Response onCommand(POP3Session session, Request request) {
- return MDCBuilder.withMdc(
- MDCBuilder.create()
- .addContext(MDCBuilder.ACTION, "RETR")
- .addContext(MDCConstants.withSession(session))
- .addContext(MDCConstants.forRequest(request)),
- () -> retr(session, request));
+ return metricFactory.decorateSupplierWithTimerMetric("pop3-retr", () ->
+ MDCBuilder.withMdc(
+ MDCBuilder.create()
+ .addContext(MDCBuilder.ACTION, "RETR")
+ .addContext(MDCConstants.withSession(session))
+ .addContext(MDCConstants.forRequest(request)),
+ () -> retr(session, request)));
}
private Response retr(POP3Session session, Request request) {
diff --git a/protocols/pop3/src/main/java/org/apache/james/protocols/pop3/core/RsetCmdHandler.java b/protocols/pop3/src/main/java/org/apache/james/protocols/pop3/core/RsetCmdHandler.java
index b74e4ec..003e0d0 100644
--- a/protocols/pop3/src/main/java/org/apache/james/protocols/pop3/core/RsetCmdHandler.java
+++ b/protocols/pop3/src/main/java/org/apache/james/protocols/pop3/core/RsetCmdHandler.java
@@ -24,6 +24,9 @@ import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
+import javax.inject.Inject;
+
+import org.apache.james.metrics.api.MetricFactory;
import org.apache.james.protocols.api.ProtocolSession.State;
import org.apache.james.protocols.api.Request;
import org.apache.james.protocols.api.Response;
@@ -44,18 +47,25 @@ public class RsetCmdHandler implements CommandHandler<POP3Session> {
private static final Collection<String> COMMANDS = ImmutableSet.of("RSET");
private static final Logger LOGGER = LoggerFactory.getLogger(RsetCmdHandler.class);
+ private final MetricFactory metricFactory;
+
+ @Inject
+ public RsetCmdHandler(MetricFactory metricFactory) {
+ this.metricFactory = metricFactory;
+ }
+
/**
* Handler method called upon receipt of a RSET command. Calls stat() to
* reset the mailbox.
*/
@Override
public Response onCommand(POP3Session session, Request request) {
- return MDCBuilder.withMdc(
- MDCBuilder.create()
- .addContext(MDCBuilder.ACTION, "RSET")
- .addContext(MDCConstants.withSession(session)),
- () -> rset(session));
-
+ return metricFactory.decorateSupplierWithTimerMetric("pop3-rset", () ->
+ MDCBuilder.withMdc(
+ MDCBuilder.create()
+ .addContext(MDCBuilder.ACTION, "RSET")
+ .addContext(MDCConstants.withSession(session)),
+ () -> rset(session)));
}
private Response rset(POP3Session session) {
diff --git a/protocols/pop3/src/main/java/org/apache/james/protocols/pop3/core/StatCmdHandler.java b/protocols/pop3/src/main/java/org/apache/james/protocols/pop3/core/StatCmdHandler.java
index 09b3bdc..c2a3e83 100644
--- a/protocols/pop3/src/main/java/org/apache/james/protocols/pop3/core/StatCmdHandler.java
+++ b/protocols/pop3/src/main/java/org/apache/james/protocols/pop3/core/StatCmdHandler.java
@@ -23,6 +23,9 @@ import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
+import javax.inject.Inject;
+
+import org.apache.james.metrics.api.MetricFactory;
import org.apache.james.protocols.api.ProtocolSession.State;
import org.apache.james.protocols.api.Request;
import org.apache.james.protocols.api.Response;
@@ -44,17 +47,25 @@ public class StatCmdHandler implements CommandHandler<POP3Session> {
private static final Logger LOGGER = LoggerFactory.getLogger(StatCmdHandler.class);
private static final Collection<String> COMMANDS = ImmutableSet.of("STAT");
+ private final MetricFactory metricFactory;
+
+ @Inject
+ public StatCmdHandler(MetricFactory metricFactory) {
+ this.metricFactory = metricFactory;
+ }
+
/**
* Handler method called upon receipt of a STAT command. Returns the number
* of messages in the mailbox and its aggregate size.
*/
@Override
public Response onCommand(POP3Session session, Request request) {
- return MDCBuilder.withMdc(
- MDCBuilder.create()
- .addContext(MDCBuilder.ACTION, "STAT")
- .addContext(MDCConstants.withSession(session)),
- () -> stat(session));
+ return metricFactory.decorateSupplierWithTimerMetric("pop3-stat", () ->
+ MDCBuilder.withMdc(
+ MDCBuilder.create()
+ .addContext(MDCBuilder.ACTION, "STAT")
+ .addContext(MDCConstants.withSession(session)),
+ () -> stat(session)));
}
private Response stat(POP3Session session) {
diff --git a/protocols/pop3/src/main/java/org/apache/james/protocols/pop3/core/StlsCmdHandler.java b/protocols/pop3/src/main/java/org/apache/james/protocols/pop3/core/StlsCmdHandler.java
index c242172..7e5ab10 100644
--- a/protocols/pop3/src/main/java/org/apache/james/protocols/pop3/core/StlsCmdHandler.java
+++ b/protocols/pop3/src/main/java/org/apache/james/protocols/pop3/core/StlsCmdHandler.java
@@ -23,6 +23,9 @@ import java.util.Collection;
import java.util.Collections;
import java.util.Set;
+import javax.inject.Inject;
+
+import org.apache.james.metrics.api.MetricFactory;
import org.apache.james.protocols.api.Request;
import org.apache.james.protocols.api.Response;
import org.apache.james.protocols.api.handler.CommandHandler;
@@ -46,13 +49,21 @@ public class StlsCmdHandler implements CommandHandler<POP3Session>, CapaCapabili
private static final Response BEGIN_TLS = new POP3StartTlsResponse(POP3Response.OK_RESPONSE, "Begin TLS negotiation").immutable();
+ private final MetricFactory metricFactory;
+
+ @Inject
+ public StlsCmdHandler(MetricFactory metricFactory) {
+ this.metricFactory = metricFactory;
+ }
+
@Override
public Response onCommand(POP3Session session, Request request) {
- return MDCBuilder.withMdc(
- MDCBuilder.create()
- .addContext(MDCBuilder.ACTION, "START_TLS")
- .addContext(MDCConstants.withSession(session)),
- () -> stls(session));
+ return metricFactory.decorateSupplierWithTimerMetric("pop3-stls", () ->
+ MDCBuilder.withMdc(
+ MDCBuilder.create()
+ .addContext(MDCBuilder.ACTION, "START_TLS")
+ .addContext(MDCConstants.withSession(session)),
+ () -> stls(session)));
}
private Response stls(POP3Session session) {
diff --git a/protocols/pop3/src/main/java/org/apache/james/protocols/pop3/core/TopCmdHandler.java b/protocols/pop3/src/main/java/org/apache/james/protocols/pop3/core/TopCmdHandler.java
index 7351b20..f7d8a52 100644
--- a/protocols/pop3/src/main/java/org/apache/james/protocols/pop3/core/TopCmdHandler.java
+++ b/protocols/pop3/src/main/java/org/apache/james/protocols/pop3/core/TopCmdHandler.java
@@ -27,6 +27,9 @@ import java.util.List;
import java.util.NoSuchElementException;
import java.util.Set;
+import javax.inject.Inject;
+
+import org.apache.james.metrics.api.MetricFactory;
import org.apache.james.protocols.api.ProtocolSession.State;
import org.apache.james.protocols.api.Request;
import org.apache.james.protocols.api.Response;
@@ -52,6 +55,14 @@ public class TopCmdHandler extends RetrCmdHandler implements CapaCapability {
private static final Response SYNTAX_ERROR = new POP3Response(POP3Response.ERR_RESPONSE, "Usage: TOP [mail number] [Line number]").immutable();
private static final Response ERROR_MESSAGE_RETR = new POP3Response(POP3Response.ERR_RESPONSE, "Error while retrieving message.").immutable();
+ private final MetricFactory metricFactory;
+
+ @Inject
+ public TopCmdHandler(MetricFactory metricFactory) {
+ super(metricFactory);
+ this.metricFactory = metricFactory;
+ }
+
/**
* Handler method called upon receipt of a TOP command. This command
* retrieves the top N lines of a specified message in the mailbox.
@@ -62,12 +73,13 @@ public class TopCmdHandler extends RetrCmdHandler implements CapaCapability {
@SuppressWarnings("unchecked")
@Override
public Response onCommand(POP3Session session, Request request) {
- return MDCBuilder.withMdc(
- MDCBuilder.create()
- .addContext(MDCBuilder.ACTION, "TOP")
- .addContext(MDCConstants.withSession(session))
- .addContext(MDCConstants.forRequest(request)),
- () -> top(session, request));
+ return metricFactory.decorateSupplierWithTimerMetric("pop3-top", () ->
+ MDCBuilder.withMdc(
+ MDCBuilder.create()
+ .addContext(MDCBuilder.ACTION, "TOP")
+ .addContext(MDCConstants.withSession(session))
+ .addContext(MDCConstants.forRequest(request)),
+ () -> top(session, request)));
}
private Response top(POP3Session session, Request request) {
diff --git a/protocols/pop3/src/main/java/org/apache/james/protocols/pop3/core/UidlCmdHandler.java b/protocols/pop3/src/main/java/org/apache/james/protocols/pop3/core/UidlCmdHandler.java
index ef3aa8f..feee247 100644
--- a/protocols/pop3/src/main/java/org/apache/james/protocols/pop3/core/UidlCmdHandler.java
+++ b/protocols/pop3/src/main/java/org/apache/james/protocols/pop3/core/UidlCmdHandler.java
@@ -25,6 +25,9 @@ import java.util.Collections;
import java.util.List;
import java.util.Set;
+import javax.inject.Inject;
+
+import org.apache.james.metrics.api.MetricFactory;
import org.apache.james.protocols.api.ProtocolSession.State;
import org.apache.james.protocols.api.Request;
import org.apache.james.protocols.api.Response;
@@ -47,18 +50,26 @@ public class UidlCmdHandler implements CommandHandler<POP3Session>, CapaCapabili
private static final Collection<String> COMMANDS = ImmutableSet.of("UIDL");
private static final Set<String> CAPS = ImmutableSet.of("UIDL");
+ private final MetricFactory metricFactory;
+
+ @Inject
+ public UidlCmdHandler(MetricFactory metricFactory) {
+ this.metricFactory = metricFactory;
+ }
+
/**
* Handler method called upon receipt of a UIDL command. Returns a listing
* of message ids to the client.
*/
@Override
public Response onCommand(POP3Session session, Request request) {
- return MDCBuilder.withMdc(
- MDCBuilder.create()
- .addContext(MDCBuilder.ACTION, "UIDL")
- .addContext(MDCConstants.withSession(session))
- .addContext(MDCConstants.forRequest(request)),
- () -> uidl(session, request));
+ return metricFactory.decorateSupplierWithTimerMetric("pop3-uidl", () ->
+ MDCBuilder.withMdc(
+ MDCBuilder.create()
+ .addContext(MDCBuilder.ACTION, "UIDL")
+ .addContext(MDCConstants.withSession(session))
+ .addContext(MDCConstants.forRequest(request)),
+ () -> uidl(session, request)));
}
private Response uidl(POP3Session session, Request request) {
diff --git a/protocols/pop3/src/main/java/org/apache/james/protocols/pop3/core/UserCmdHandler.java b/protocols/pop3/src/main/java/org/apache/james/protocols/pop3/core/UserCmdHandler.java
index a08780f..5980485 100644
--- a/protocols/pop3/src/main/java/org/apache/james/protocols/pop3/core/UserCmdHandler.java
+++ b/protocols/pop3/src/main/java/org/apache/james/protocols/pop3/core/UserCmdHandler.java
@@ -22,7 +22,10 @@ package org.apache.james.protocols.pop3.core;
import java.util.Collection;
import java.util.Set;
+import javax.inject.Inject;
+
import org.apache.james.core.Username;
+import org.apache.james.metrics.api.MetricFactory;
import org.apache.james.protocols.api.Request;
import org.apache.james.protocols.api.Response;
import org.apache.james.protocols.api.handler.CommandHandler;
@@ -42,18 +45,26 @@ public class UserCmdHandler implements CommandHandler<POP3Session>, CapaCapabili
private static final Collection<String> COMMANDS = ImmutableSet.of("USER");
private static final Set<String> CAPS = ImmutableSet.of("USER");
+ private final MetricFactory metricFactory;
+
+ @Inject
+ public UserCmdHandler(MetricFactory metricFactory) {
+ this.metricFactory = metricFactory;
+ }
+
/**
* Handler method called upon receipt of a USER command. Reads in the user
* id.
*/
@Override
public Response onCommand(POP3Session session, Request request) {
- return MDCBuilder.withMdc(
- MDCBuilder.create()
- .addContext(MDCBuilder.ACTION, "USER")
- .addContext(MDCConstants.withSession(session))
- .addContext(MDCConstants.forRequest(request)),
- () -> user(session, request));
+ return metricFactory.decorateSupplierWithTimerMetric("pop3-user", () ->
+ MDCBuilder.withMdc(
+ MDCBuilder.create()
+ .addContext(MDCBuilder.ACTION, "USER")
+ .addContext(MDCConstants.withSession(session))
+ .addContext(MDCConstants.forRequest(request)),
+ () -> user(session, request)));
}
private Response user(POP3Session session, Request request) {
diff --git a/protocols/pop3/src/test/java/org/apache/james/protocols/pop3/AbstractPOP3ServerTest.java b/protocols/pop3/src/test/java/org/apache/james/protocols/pop3/AbstractPOP3ServerTest.java
index 4cbc395..a9b0212 100644
--- a/protocols/pop3/src/test/java/org/apache/james/protocols/pop3/AbstractPOP3ServerTest.java
+++ b/protocols/pop3/src/test/java/org/apache/james/protocols/pop3/AbstractPOP3ServerTest.java
@@ -32,6 +32,8 @@ import org.apache.commons.net.pop3.POP3Client;
import org.apache.commons.net.pop3.POP3MessageInfo;
import org.apache.commons.net.pop3.POP3Reply;
import org.apache.james.core.Username;
+import org.apache.james.metrics.api.MetricFactory;
+import org.apache.james.metrics.tests.RecordingMetricFactory;
import org.apache.james.protocols.api.Protocol;
import org.apache.james.protocols.api.ProtocolServer;
import org.apache.james.protocols.api.handler.WiringException;
@@ -63,7 +65,7 @@ public abstract class AbstractPOP3ServerTest {
public void testInvalidAuth() throws Exception {
ProtocolServer server = null;
try {
- server = createServer(createProtocol(new TestPassCmdHandler()));
+ server = createServer(createProtocol(new TestPassCmdHandler(new RecordingMetricFactory())));
server.bind();
POP3Client client = createClient();
@@ -86,7 +88,7 @@ public abstract class AbstractPOP3ServerTest {
ProtocolServer server = null;
try {
String identifier = "id";
- TestPassCmdHandler handler = new TestPassCmdHandler();
+ TestPassCmdHandler handler = new TestPassCmdHandler(new RecordingMetricFactory());
handler.add("valid", new MockMailbox(identifier));
server = createServer(createProtocol(handler));
@@ -117,7 +119,7 @@ public abstract class AbstractPOP3ServerTest {
ProtocolServer server = null;
try {
String identifier = "id";
- TestPassCmdHandler handler = new TestPassCmdHandler();
+ TestPassCmdHandler handler = new TestPassCmdHandler(new RecordingMetricFactory());
handler.add("valid", new MockMailbox(identifier, MESSAGE1, MESSAGE2));
server = createServer(createProtocol(handler));
@@ -173,7 +175,7 @@ public abstract class AbstractPOP3ServerTest {
ProtocolServer server = null;
try {
String identifier = "id";
- TestPassCmdHandler factory = new TestPassCmdHandler();
+ TestPassCmdHandler factory = new TestPassCmdHandler(new RecordingMetricFactory());
factory.add("valid", new MockMailbox(identifier, MESSAGE1, MESSAGE2));
server = createServer(createProtocol(factory));
@@ -215,7 +217,7 @@ public abstract class AbstractPOP3ServerTest {
ProtocolServer server = null;
try {
String identifier = "id";
- TestPassCmdHandler factory = new TestPassCmdHandler();
+ TestPassCmdHandler factory = new TestPassCmdHandler(new RecordingMetricFactory());
factory.add("valid", new MockMailbox(identifier, MESSAGE1, MESSAGE2));
server = createServer(createProtocol(factory));
@@ -260,7 +262,7 @@ public abstract class AbstractPOP3ServerTest {
ProtocolServer server = null;
try {
String identifier = "id";
- TestPassCmdHandler factory = new TestPassCmdHandler();
+ TestPassCmdHandler factory = new TestPassCmdHandler(new RecordingMetricFactory());
factory.add("valid", new MockMailbox(identifier, MESSAGE1, MESSAGE2));
server = createServer(createProtocol(factory));
@@ -312,7 +314,7 @@ public abstract class AbstractPOP3ServerTest {
ProtocolServer server = null;
try {
String identifier = "id";
- TestPassCmdHandler factory = new TestPassCmdHandler();
+ TestPassCmdHandler factory = new TestPassCmdHandler(new RecordingMetricFactory());
factory.add("valid", new MockMailbox(identifier));
server = createServer(createProtocol(factory));
@@ -339,7 +341,7 @@ public abstract class AbstractPOP3ServerTest {
ProtocolServer server = null;
try {
String identifier = "id";
- TestPassCmdHandler factory = new TestPassCmdHandler();
+ TestPassCmdHandler factory = new TestPassCmdHandler(new RecordingMetricFactory());
factory.add("valid", new MockMailbox(identifier, MESSAGE1));
server = createServer(createProtocol(factory));
@@ -373,7 +375,7 @@ public abstract class AbstractPOP3ServerTest {
ProtocolServer server = null;
try {
String identifier = "id";
- TestPassCmdHandler factory = new TestPassCmdHandler();
+ TestPassCmdHandler factory = new TestPassCmdHandler(new RecordingMetricFactory());
factory.add("valid", new MockMailbox(identifier, MESSAGE1, MESSAGE2));
server = createServer(createProtocol(factory));
@@ -402,7 +404,7 @@ public abstract class AbstractPOP3ServerTest {
ProtocolServer server = null;
try {
String identifier = "id";
- TestPassCmdHandler factory = new TestPassCmdHandler();
+ TestPassCmdHandler factory = new TestPassCmdHandler(new RecordingMetricFactory());
factory.add("valid", new MockMailbox(identifier, MESSAGE1, MESSAGE2));
server = createServer(createProtocol(factory));
@@ -451,7 +453,7 @@ public abstract class AbstractPOP3ServerTest {
public void testAPop() throws Exception {
ProtocolServer server = null;
try {
- TestApopCmdHandler handler = new TestApopCmdHandler();
+ TestApopCmdHandler handler = new TestApopCmdHandler(new RecordingMetricFactory());
server = createServer(createProtocol(handler));
server.bind();
@@ -515,7 +517,11 @@ public abstract class AbstractPOP3ServerTest {
private final class TestApopCmdHandler extends AbstractApopCmdHandler {
private final Map<String, Mailbox> mailboxes = new HashMap<>();
-
+
+ public TestApopCmdHandler(MetricFactory metricFactory) {
+ super(metricFactory);
+ }
+
public void add(String username, Mailbox mailbox) {
mailboxes.put(username, mailbox);
}
diff --git a/protocols/pop3/src/test/java/org/apache/james/protocols/pop3/AbstractStartTlsPOP3ServerTest.java b/protocols/pop3/src/test/java/org/apache/james/protocols/pop3/AbstractStartTlsPOP3ServerTest.java
index 388404b..03c1aea 100644
--- a/protocols/pop3/src/test/java/org/apache/james/protocols/pop3/AbstractStartTlsPOP3ServerTest.java
+++ b/protocols/pop3/src/test/java/org/apache/james/protocols/pop3/AbstractStartTlsPOP3ServerTest.java
@@ -25,6 +25,7 @@ import java.util.Arrays;
import org.apache.commons.net.pop3.POP3Reply;
import org.apache.commons.net.pop3.POP3SClient;
+import org.apache.james.metrics.tests.RecordingMetricFactory;
import org.apache.james.protocols.api.Encryption;
import org.apache.james.protocols.api.Protocol;
import org.apache.james.protocols.api.ProtocolServer;
@@ -62,7 +63,7 @@ public abstract class AbstractStartTlsPOP3ServerTest {
ProtocolServer server = null;
try {
String identifier = "id";
- TestPassCmdHandler handler = new TestPassCmdHandler();
+ TestPassCmdHandler handler = new TestPassCmdHandler(new RecordingMetricFactory());
handler.add("valid", new MockMailbox(identifier));
server = createServer(createProtocol(handler), address, Encryption.createStartTls(BogusSslContextFactory.getServerContext()));
diff --git a/protocols/pop3/src/test/java/org/apache/james/protocols/pop3/POP3ProtocolHandlerChain.java b/protocols/pop3/src/test/java/org/apache/james/protocols/pop3/POP3ProtocolHandlerChain.java
index 8035ff7..fa0e632 100644
--- a/protocols/pop3/src/test/java/org/apache/james/protocols/pop3/POP3ProtocolHandlerChain.java
+++ b/protocols/pop3/src/test/java/org/apache/james/protocols/pop3/POP3ProtocolHandlerChain.java
@@ -23,6 +23,8 @@ import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
+import org.apache.james.metrics.api.MetricFactory;
+import org.apache.james.metrics.tests.RecordingMetricFactory;
import org.apache.james.protocols.api.handler.CommandDispatcher;
import org.apache.james.protocols.api.handler.CommandHandlerResultLogger;
import org.apache.james.protocols.api.handler.ProtocolHandler;
@@ -50,6 +52,7 @@ import org.apache.james.protocols.pop3.core.WelcomeMessageHandler;
*
*/
public class POP3ProtocolHandlerChain extends ProtocolHandlerChainImpl {
+ private final MetricFactory metricFactory = new RecordingMetricFactory();
/**
* The {@link AbstractPassCmdHandler}'s to use. If at least one {@link AbstractPassCmdHandler} is given, the {@link POP3ProtocolHandlerChain}
@@ -67,20 +70,20 @@ public class POP3ProtocolHandlerChain extends ProtocolHandlerChainImpl {
// add all pass handlers
Collections.addAll(handlers, authHandlers);
- handlers.add(new CapaCmdHandler());
- handlers.add(new UserCmdHandler());
- handlers.add(new ListCmdHandler());
- handlers.add(new UidlCmdHandler());
- handlers.add(new RsetCmdHandler());
- handlers.add(new DeleCmdHandler());
- handlers.add(new NoopCmdHandler());
- handlers.add(new RetrCmdHandler());
- handlers.add(new TopCmdHandler());
- handlers.add(new StatCmdHandler());
- handlers.add(new QuitCmdHandler());
+ handlers.add(new CapaCmdHandler(metricFactory));
+ handlers.add(new UserCmdHandler(metricFactory));
+ handlers.add(new ListCmdHandler(metricFactory));
+ handlers.add(new UidlCmdHandler(metricFactory));
+ handlers.add(new RsetCmdHandler(metricFactory));
+ handlers.add(new DeleCmdHandler(metricFactory));
+ handlers.add(new NoopCmdHandler(metricFactory));
+ handlers.add(new RetrCmdHandler(metricFactory));
+ handlers.add(new TopCmdHandler(metricFactory));
+ handlers.add(new StatCmdHandler(metricFactory));
+ handlers.add(new QuitCmdHandler(metricFactory));
+ handlers.add(new StlsCmdHandler(metricFactory));
handlers.add(new WelcomeMessageHandler());
handlers.add(new UnknownCmdHandler());
- handlers.add(new StlsCmdHandler());
handlers.add(new CommandDispatcher<POP3Session>());
handlers.add(new CommandHandlerResultLogger());
diff --git a/protocols/pop3/src/test/java/org/apache/james/protocols/pop3/core/RetrCmdHandlerTest.java b/protocols/pop3/src/test/java/org/apache/james/protocols/pop3/core/RetrCmdHandlerTest.java
index 7ffb6d0..dd0ebac 100644
--- a/protocols/pop3/src/test/java/org/apache/james/protocols/pop3/core/RetrCmdHandlerTest.java
+++ b/protocols/pop3/src/test/java/org/apache/james/protocols/pop3/core/RetrCmdHandlerTest.java
@@ -26,6 +26,7 @@ import static org.mockito.Mockito.when;
import java.util.Collections;
import java.util.stream.Collectors;
+import org.apache.james.metrics.tests.RecordingMetricFactory;
import org.apache.james.protocols.api.Request;
import org.apache.james.protocols.pop3.POP3Session;
import org.junit.jupiter.api.Test;
@@ -44,7 +45,7 @@ class RetrCmdHandlerTest {
String overflowedNumber = Collections.nCopies(pad, "\\xff").stream().collect(Collectors.joining());
when(request.getArgument()).thenReturn(overflowedNumber);
- assertThat(new RetrCmdHandler().onCommand(session, request))
+ assertThat(new RetrCmdHandler(new RecordingMetricFactory()).onCommand(session, request))
.isEqualTo(RetrCmdHandler.SYNTAX_ERROR);
}
@@ -57,7 +58,7 @@ class RetrCmdHandlerTest {
String overflowedNumber = Long.toString(Long.MAX_VALUE);
when(request.getArgument()).thenReturn(overflowedNumber);
- assertThat(new RetrCmdHandler().onCommand(session, request))
+ assertThat(new RetrCmdHandler(new RecordingMetricFactory()).onCommand(session, request))
.isEqualTo(RetrCmdHandler.SYNTAX_ERROR);
}
}
diff --git a/protocols/pop3/src/test/java/org/apache/james/protocols/pop3/utils/TestPassCmdHandler.java b/protocols/pop3/src/test/java/org/apache/james/protocols/pop3/utils/TestPassCmdHandler.java
index fdaa284..b0baa42 100644
--- a/protocols/pop3/src/test/java/org/apache/james/protocols/pop3/utils/TestPassCmdHandler.java
+++ b/protocols/pop3/src/test/java/org/apache/james/protocols/pop3/utils/TestPassCmdHandler.java
@@ -22,13 +22,18 @@ import java.util.HashMap;
import java.util.Map;
import org.apache.james.core.Username;
+import org.apache.james.metrics.api.MetricFactory;
import org.apache.james.protocols.pop3.POP3Session;
import org.apache.james.protocols.pop3.core.AbstractPassCmdHandler;
import org.apache.james.protocols.pop3.mailbox.Mailbox;
public class TestPassCmdHandler extends AbstractPassCmdHandler {
private final Map<String, Mailbox> mailboxes = new HashMap<>();
-
+
+ public TestPassCmdHandler(MetricFactory metricFactory) {
+ super(metricFactory);
+ }
+
public void add(String username, Mailbox mailbox) {
mailboxes.put(username, mailbox);
}
diff --git a/server/protocols/protocols-pop3/src/main/java/org/apache/james/pop3server/core/PassCmdHandler.java b/server/protocols/protocols-pop3/src/main/java/org/apache/james/pop3server/core/PassCmdHandler.java
index dca994f..0e4fffe 100644
--- a/server/protocols/protocols-pop3/src/main/java/org/apache/james/pop3server/core/PassCmdHandler.java
+++ b/server/protocols/protocols-pop3/src/main/java/org/apache/james/pop3server/core/PassCmdHandler.java
@@ -32,6 +32,7 @@ import org.apache.james.mailbox.exception.BadCredentialsException;
import org.apache.james.mailbox.exception.MailboxException;
import org.apache.james.mailbox.model.MailboxId;
import org.apache.james.mailbox.model.MailboxPath;
+import org.apache.james.metrics.api.MetricFactory;
import org.apache.james.pop3server.mailbox.MailboxAdapter;
import org.apache.james.protocols.api.Request;
import org.apache.james.protocols.api.Response;
@@ -58,7 +59,8 @@ public class PassCmdHandler extends AbstractPassCmdHandler {
private final MailboxManager manager;
@Inject
- public PassCmdHandler(@Named("mailboxmanager") MailboxManager manager) {
+ public PassCmdHandler(@Named("mailboxmanager") MailboxManager manager, MetricFactory metricFactory) {
+ super(metricFactory);
this.manager = manager;
}
diff --git a/server/protocols/protocols-pop3/src/test/java/org/apache/james/pop3server/POP3ServerTest.java b/server/protocols/protocols-pop3/src/test/java/org/apache/james/pop3server/POP3ServerTest.java
index 10120fa..0eaa19c 100644
--- a/server/protocols/protocols-pop3/src/test/java/org/apache/james/pop3server/POP3ServerTest.java
+++ b/server/protocols/protocols-pop3/src/test/java/org/apache/james/pop3server/POP3ServerTest.java
@@ -41,6 +41,8 @@ import org.apache.james.mailbox.exception.MailboxException;
import org.apache.james.mailbox.inmemory.manager.InMemoryIntegrationResources;
import org.apache.james.mailbox.model.MailboxPath;
import org.apache.james.mailbox.store.StoreMailboxManager;
+import org.apache.james.metrics.api.MetricFactory;
+import org.apache.james.metrics.tests.RecordingMetricFactory;
import org.apache.james.mime4j.dom.Message;
import org.apache.james.pop3server.netty.POP3Server;
import org.apache.james.protocols.api.utils.ProtocolServerUtils;
@@ -738,6 +740,7 @@ class POP3ServerTest {
.put(binder -> binder.bind(UsersRepository.class).toInstance(usersRepository))
.put(binder -> binder.bind(MailboxManager.class).annotatedWith(Names.named("mailboxmanager")).toInstance(mailboxManager))
.put(binder -> binder.bind(FileSystem.class).toInstance(fileSystem))
+ .put(binder -> binder.bind(MetricFactory.class).toInstance(new RecordingMetricFactory()))
.build();
}
---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@james.apache.org
For additional commands, e-mail: notifications-help@james.apache.org