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 <btell...@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-unsubscr...@james.apache.org
For additional commands, e-mail: notifications-h...@james.apache.org

Reply via email to