You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@james.apache.org by rc...@apache.org on 2024/11/01 02:24:44 UTC

(james-project) 02/02: [ENHANCEMENT] mailUserAgent in IMAP MDC

This is an automated email from the ASF dual-hosted git repository.

rcordier pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/james-project.git

commit 7db768a5407b7dae34d00f3089eb623ad299c26b
Author: Benoit TELLIER <bt...@linagora.com>
AuthorDate: Tue Oct 29 22:31:17 2024 +0100

    [ENHANCEMENT] mailUserAgent in IMAP MDC
    
    Ease debugging
---
 .../apache/james/imap/processor/IdProcessor.java   | 23 +++++++++++++++++++---
 1 file changed, 20 insertions(+), 3 deletions(-)

diff --git a/protocols/imap/src/main/java/org/apache/james/imap/processor/IdProcessor.java b/protocols/imap/src/main/java/org/apache/james/imap/processor/IdProcessor.java
index a0c00e8520..c1011a2dea 100644
--- a/protocols/imap/src/main/java/org/apache/james/imap/processor/IdProcessor.java
+++ b/protocols/imap/src/main/java/org/apache/james/imap/processor/IdProcessor.java
@@ -41,6 +41,7 @@ import com.google.common.collect.ImmutableList;
 import reactor.core.publisher.Mono;
 
 public class IdProcessor extends AbstractMailboxProcessor<IDRequest> implements CapabilityImplementingProcessor {
+    public static final String MDC_KEY = "bound_MDC";
     private static final Logger LOGGER = LoggerFactory.getLogger(IdProcessor.class);
     private static final ImmutableList<Capability> CAPABILITIES = ImmutableList.of(Capability.of("ID"));
 
@@ -53,12 +54,28 @@ public class IdProcessor extends AbstractMailboxProcessor<IDRequest> implements
     protected Mono<Void> processRequestReactive(IDRequest request, ImapSession session, Responder responder) {
         responder.respond(new IdResponse());
 
-        return ReactorUtils.logAsMono(() -> MDCStructuredLogger.forLogger(LOGGER)
-            .field("parameters", request.getParameters().map(Object::toString).orElse("NIL"))
-            .log(logger -> logger.info("Received id information"))).then(unsolicitedResponses(session, responder, false))
+        String mailUserAgent = request.getParameters().map(Object::toString).orElse("NIL");
+        addMailUserAgentToMDC(session, mailUserAgent);
+
+        return logMailUserAgent(mailUserAgent)
+            .then(unsolicitedResponses(session, responder, false))
             .then(Mono.fromRunnable(() -> okComplete(request, responder)));
     }
 
+    private Mono<Void> logMailUserAgent(String mailUserAgent) {
+        return ReactorUtils.logAsMono(() -> MDCStructuredLogger.forLogger(LOGGER)
+            .field("parameters", mailUserAgent)
+            .log(logger -> logger.info("Received id information")));
+    }
+
+    private void addMailUserAgentToMDC(ImapSession session, String mailUserAgent) {
+        Object maybeMDC = session.getAttribute(MDC_KEY);
+        if (maybeMDC instanceof MDCBuilder boundMDC) {
+            MDCBuilder newMDC = boundMDC.addToContext("mailUserAgent", mailUserAgent);
+            session.setAttribute(MDC_KEY, newMDC);
+        }
+    }
+
     @Override
     protected MDCBuilder mdc(IDRequest message) {
         return MDCBuilder.create()


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