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 bt...@apache.org on 2017/08/24 03:46:29 UTC
[04/38] james-project git commit: JAMES-2114 MDC contectual logging
for JMAP
JAMES-2114 MDC contectual logging for JMAP
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/176d7bf5
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/176d7bf5
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/176d7bf5
Branch: refs/heads/master
Commit: 176d7bf5982aa348e46a363a7fee41055a2f8bb0
Parents: 47ceea4
Author: benwa <bt...@linagora.com>
Authored: Wed Aug 23 16:21:04 2017 +0700
Committer: benwa <bt...@linagora.com>
Committed: Thu Aug 24 10:34:38 2017 +0700
----------------------------------------------------------------------
.../java/org/apache/james/jmap/JMAPServer.java | 4 ++
.../java/org/apache/james/jmap/JMAPServlet.java | 23 +++++---
.../java/org/apache/james/jmap/MDCFilter.java | 56 ++++++++++++++++++++
.../james/jmap/methods/GetMailboxesMethod.java | 13 ++++-
.../jmap/methods/GetMessageListMethod.java | 20 ++++++-
.../james/jmap/methods/GetMessagesMethod.java | 13 ++++-
.../jmap/methods/GetVacationResponseMethod.java | 11 +++-
.../james/jmap/methods/RequestHandler.java | 20 +++++--
.../james/jmap/methods/SetMailboxesMethod.java | 16 +++++-
.../james/jmap/methods/SetMessagesMethod.java | 18 ++++++-
.../jmap/methods/SetVacationResponseMethod.java | 12 ++++-
.../apache/james/jmap/methods/ValueWithId.java | 9 ++++
.../james/jmap/model/CreationMessage.java | 7 +++
.../james/jmap/model/CreationMessageId.java | 8 +++
.../james/jmap/model/MailboxCreationId.java | 8 +++
.../james/jmap/model/MailboxProperty.java | 8 +++
.../james/jmap/model/MessageProperties.java | 9 ++++
.../james/jmap/model/VacationResponse.java | 11 ++++
.../org/apache/james/jmap/JMAPServletTest.java | 4 +-
.../james/jmap/methods/RequestHandlerTest.java | 4 +-
20 files changed, 249 insertions(+), 25 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/james-project/blob/176d7bf5/server/protocols/jmap/src/main/java/org/apache/james/jmap/JMAPServer.java
----------------------------------------------------------------------
diff --git a/server/protocols/jmap/src/main/java/org/apache/james/jmap/JMAPServer.java b/server/protocols/jmap/src/main/java/org/apache/james/jmap/JMAPServer.java
index 5d7ad49..2881e68 100644
--- a/server/protocols/jmap/src/main/java/org/apache/james/jmap/JMAPServer.java
+++ b/server/protocols/jmap/src/main/java/org/apache/james/jmap/JMAPServer.java
@@ -58,6 +58,7 @@ public class JMAPServer implements Configurable {
.with(authenticationServlet)
.filter(JMAPUrls.AUTHENTICATION)
.with(new AllowAllCrossOriginRequests(bypass(authenticationFilter).on("POST").and("OPTIONS").only()))
+ .and(new MDCFilter())
.only()
.serve(JMAPUrls.JMAP)
.with(jmapServlet)
@@ -66,16 +67,19 @@ public class JMAPServer implements Configurable {
.and(new LogbookFilter(logbook()))
.and(userProvisioningFilter)
.and(defaultMailboxesProvisioningFilter)
+ .and(new MDCFilter())
.only()
.serveAsOneLevelTemplate(JMAPUrls.DOWNLOAD)
.with(downloadServlet)
.filterAsOneLevelTemplate(JMAPUrls.DOWNLOAD)
.with(new AllowAllCrossOriginRequests(bypass(authenticationFilter).on("OPTIONS").only()))
+ .and(new MDCFilter())
.only()
.serve(JMAPUrls.UPLOAD)
.with(uploadServlet)
.filterAsOneLevelTemplate(JMAPUrls.UPLOAD)
.with(new AllowAllCrossOriginRequests(bypass(authenticationFilter).on("OPTIONS").only()))
+ .and(new MDCFilter())
.only()
.build()));
} else {
http://git-wip-us.apache.org/repos/asf/james-project/blob/176d7bf5/server/protocols/jmap/src/main/java/org/apache/james/jmap/JMAPServlet.java
----------------------------------------------------------------------
diff --git a/server/protocols/jmap/src/main/java/org/apache/james/jmap/JMAPServlet.java b/server/protocols/jmap/src/main/java/org/apache/james/jmap/JMAPServlet.java
index 2b17bd8..8ace83e 100644
--- a/server/protocols/jmap/src/main/java/org/apache/james/jmap/JMAPServlet.java
+++ b/server/protocols/jmap/src/main/java/org/apache/james/jmap/JMAPServlet.java
@@ -45,6 +45,7 @@ import com.fasterxml.jackson.core.JsonParseException;
import com.fasterxml.jackson.databind.JsonMappingException;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
+import com.google.common.base.Throwables;
public class JMAPServlet extends HttpServlet {
@@ -67,13 +68,13 @@ public class JMAPServlet extends HttpServlet {
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException {
TimeMetric timeMetric = metricFactory.timer("JMAP-request");
try {
- List<Object[]> responses =
+ List<Object[]> responses =
requestAsJsonStream(req)
- .map(ProtocolRequest::deserialize)
- .map(x -> AuthenticatedProtocolRequest.decorate(x, req))
- .flatMap(requestHandler::handle)
- .map(ProtocolResponse::asProtocolSpecification)
- .collect(Collectors.toList());
+ .map(ProtocolRequest::deserialize)
+ .map(x -> AuthenticatedProtocolRequest.decorate(x, req))
+ .flatMap(this::handle)
+ .map(ProtocolResponse::asProtocolSpecification)
+ .collect(Collectors.toList());
resp.setContentType(JSON_CONTENT_TYPE);
objectMapper.writeValue(resp.getOutputStream(), responses);
@@ -87,7 +88,15 @@ public class JMAPServlet extends HttpServlet {
timeMetric.stopAndPublish();
}
}
-
+
+ private Stream<? extends ProtocolResponse> handle(AuthenticatedProtocolRequest request) {
+ try {
+ return requestHandler.handle(request);
+ } catch (IOException e) {
+ throw Throwables.propagate(e);
+ }
+ }
+
private Stream<JsonNode[]> requestAsJsonStream(HttpServletRequest req) throws IOException, JsonParseException, JsonMappingException {
return Arrays.stream(
objectMapper.readValue(req.getInputStream(), JsonNode[][].class));
http://git-wip-us.apache.org/repos/asf/james-project/blob/176d7bf5/server/protocols/jmap/src/main/java/org/apache/james/jmap/MDCFilter.java
----------------------------------------------------------------------
diff --git a/server/protocols/jmap/src/main/java/org/apache/james/jmap/MDCFilter.java b/server/protocols/jmap/src/main/java/org/apache/james/jmap/MDCFilter.java
new file mode 100644
index 0000000..18b45c4
--- /dev/null
+++ b/server/protocols/jmap/src/main/java/org/apache/james/jmap/MDCFilter.java
@@ -0,0 +1,56 @@
+/****************************************************************
+ * 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.jmap;
+
+import java.io.Closeable;
+import java.io.IOException;
+
+import javax.servlet.Filter;
+import javax.servlet.FilterChain;
+import javax.servlet.FilterConfig;
+import javax.servlet.ServletException;
+import javax.servlet.ServletRequest;
+import javax.servlet.ServletResponse;
+
+import org.apache.james.util.MDCBuilder;
+
+public class MDCFilter implements Filter {
+ @Override
+ public void init(FilterConfig filterConfig) throws ServletException {
+
+ }
+
+ @Override
+ public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
+ try (Closeable closeable =
+ MDCBuilder.create()
+ .addContext(MDCBuilder.PROTOCOL, "JMAP")
+ .addContext(MDCBuilder.IP, request.getRemoteAddr())
+ .addContext(MDCBuilder.HOST, request.getRemoteHost())
+ .build()) {
+ chain.doFilter(request, response);
+ }
+ }
+
+ @Override
+ public void destroy() {
+
+ }
+}
http://git-wip-us.apache.org/repos/asf/james-project/blob/176d7bf5/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/GetMailboxesMethod.java
----------------------------------------------------------------------
diff --git a/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/GetMailboxesMethod.java b/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/GetMailboxesMethod.java
index a32757e..b15a17e 100644
--- a/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/GetMailboxesMethod.java
+++ b/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/GetMailboxesMethod.java
@@ -19,6 +19,8 @@
package org.apache.james.jmap.methods;
+import java.io.Closeable;
+import java.io.IOException;
import java.util.Comparator;
import java.util.List;
import java.util.Optional;
@@ -41,6 +43,7 @@ import org.apache.james.mailbox.model.MailboxMetaData;
import org.apache.james.mailbox.model.MailboxQuery;
import org.apache.james.metrics.api.MetricFactory;
import org.apache.james.metrics.api.TimeMetric;
+import org.apache.james.util.MDCBuilder;
import org.apache.james.util.OptionalConverter;
import com.google.common.annotations.VisibleForTesting;
@@ -80,13 +83,21 @@ public class GetMailboxesMethod implements Method {
Preconditions.checkArgument(request instanceof GetMailboxesRequest);
GetMailboxesRequest mailboxesRequest = (GetMailboxesRequest) request;
TimeMetric timeMetric = metricFactory.timer(JMAP_PREFIX + METHOD_NAME.getName());
- try {
+ try (Closeable closeable =
+ MDCBuilder.create()
+ .addContext(MDCBuilder.ACTION, "GET_MAILBOXES")
+ .addContext("accountId", mailboxesRequest.getAccountId())
+ .addContext("mailboxIds", mailboxesRequest.getIds())
+ .addContext("properties", mailboxesRequest.getProperties())
+ .build()) {
return Stream.of(
JmapResponse.builder().clientId(clientId)
.response(getMailboxesResponse(mailboxesRequest, mailboxSession))
.properties(mailboxesRequest.getProperties().map(this::ensureContainsId))
.responseName(RESPONSE_NAME)
.build());
+ } catch (IOException e) {
+ throw Throwables.propagate(e);
} finally {
timeMetric.stopAndPublish();
}
http://git-wip-us.apache.org/repos/asf/james-project/blob/176d7bf5/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/GetMessageListMethod.java
----------------------------------------------------------------------
diff --git a/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/GetMessageListMethod.java b/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/GetMessageListMethod.java
index 24fbe46..a128fcc 100644
--- a/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/GetMessageListMethod.java
+++ b/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/GetMessageListMethod.java
@@ -19,6 +19,8 @@
package org.apache.james.jmap.methods;
+import java.io.Closeable;
+import java.io.IOException;
import java.util.List;
import java.util.Optional;
import java.util.Set;
@@ -45,6 +47,7 @@ import org.apache.james.mailbox.model.MultimailboxesSearchQuery;
import org.apache.james.mailbox.model.SearchQuery;
import org.apache.james.metrics.api.MetricFactory;
import org.apache.james.metrics.api.TimeMetric;
+import org.apache.james.util.MDCBuilder;
import com.github.steveash.guavate.Guavate;
import com.google.common.annotations.VisibleForTesting;
@@ -94,13 +97,28 @@ public class GetMessageListMethod implements Method {
GetMessageListRequest messageListRequest = (GetMessageListRequest) request;
GetMessageListResponse messageListResponse = getMessageListResponse(messageListRequest, mailboxSession);
- try {
+ try (Closeable closeable =
+ MDCBuilder.create()
+ .addContext(MDCBuilder.ACTION, "GET_MESSAGE_LIST")
+ .addContext("accountId", messageListRequest.getAccountId())
+ .addContext("limit", messageListRequest.getLimit())
+ .addContext("anchor", messageListRequest.getAnchor())
+ .addContext("offset", messageListRequest.getAnchorOffset())
+ .addContext("properties", messageListRequest.getFetchMessageProperties())
+ .addContext("position", messageListRequest.getPosition())
+ .addContext("filters", messageListRequest.getFilter())
+ .addContext("sorts", messageListRequest.getSort())
+ .addContext("isFetchMessage", messageListRequest.isFetchMessages())
+ .addContext("isCollapseThread", messageListRequest.isCollapseThreads())
+ .build()) {
Stream<JmapResponse> jmapResponse = Stream.of(JmapResponse.builder().clientId(clientId)
.response(messageListResponse)
.responseName(RESPONSE_NAME)
.build());
return Stream.concat(jmapResponse,
processGetMessages(messageListRequest, messageListResponse, clientId, mailboxSession));
+ } catch (IOException e) {
+ throw Throwables.propagate(e);
} finally {
timeMetric.stopAndPublish();
}
http://git-wip-us.apache.org/repos/asf/james-project/blob/176d7bf5/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/GetMessagesMethod.java
----------------------------------------------------------------------
diff --git a/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/GetMessagesMethod.java b/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/GetMessagesMethod.java
index acaf9cc..aa4a439 100644
--- a/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/GetMessagesMethod.java
+++ b/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/GetMessagesMethod.java
@@ -19,6 +19,8 @@
package org.apache.james.jmap.methods;
+import java.io.Closeable;
+import java.io.IOException;
import java.util.Collection;
import java.util.List;
import java.util.Optional;
@@ -45,6 +47,7 @@ import org.apache.james.mailbox.model.MailboxId;
import org.apache.james.mailbox.model.MessageResult;
import org.apache.james.metrics.api.MetricFactory;
import org.apache.james.metrics.api.TimeMetric;
+import org.apache.james.util.MDCBuilder;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -95,13 +98,21 @@ public class GetMessagesMethod implements Method {
GetMessagesRequest getMessagesRequest = (GetMessagesRequest) request;
MessageProperties outputProperties = getMessagesRequest.getProperties().toOutputProperties();
TimeMetric timeMetric = metricFactory.timer(JMAP_PREFIX + METHOD_NAME.getName());
- try {
+ try (Closeable closeable =
+ MDCBuilder.create()
+ .addContext(MDCBuilder.ACTION, "GET_MESSAGES")
+ .addContext("accountId", getMessagesRequest.getAccountId())
+ .addContext("ids", getMessagesRequest.getIds())
+ .addContext("properties", getMessagesRequest.getProperties())
+ .build()) {
return Stream.of(JmapResponse.builder().clientId(clientId)
.response(getMessagesResponse(mailboxSession, getMessagesRequest))
.responseName(RESPONSE_NAME)
.properties(outputProperties.getOptionalMessageProperties())
.filterProvider(buildOptionalHeadersFilteringFilterProvider(outputProperties))
.build());
+ } catch (IOException e) {
+ throw Throwables.propagate(e);
} finally {
timeMetric.stopAndPublish();
}
http://git-wip-us.apache.org/repos/asf/james-project/blob/176d7bf5/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/GetVacationResponseMethod.java
----------------------------------------------------------------------
diff --git a/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/GetVacationResponseMethod.java b/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/GetVacationResponseMethod.java
index abd4541..6653976 100644
--- a/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/GetVacationResponseMethod.java
+++ b/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/GetVacationResponseMethod.java
@@ -19,6 +19,8 @@
package org.apache.james.jmap.methods;
+import java.io.Closeable;
+import java.io.IOException;
import java.util.stream.Stream;
import javax.inject.Inject;
@@ -33,9 +35,11 @@ import org.apache.james.jmap.model.VacationResponse;
import org.apache.james.mailbox.MailboxSession;
import org.apache.james.metrics.api.MetricFactory;
import org.apache.james.metrics.api.TimeMetric;
+import org.apache.james.util.MDCBuilder;
import org.apache.james.util.date.ZonedDateTimeProvider;
import com.google.common.base.Preconditions;
+import com.google.common.base.Throwables;
public class GetVacationResponseMethod implements Method {
@@ -71,12 +75,17 @@ public class GetVacationResponseMethod implements Method {
Preconditions.checkArgument(request instanceof GetVacationRequest);
TimeMetric timeMetric = metricFactory.timer(JMAP_PREFIX + METHOD_NAME.getName());
- try {
+ try (Closeable closeable =
+ MDCBuilder.create()
+ .addContext(MDCBuilder.ACTION, "VACATION")
+ .build()) {
return Stream.of(JmapResponse.builder()
.clientId(clientId)
.responseName(RESPONSE_NAME)
.response(process(mailboxSession))
.build());
+ } catch (IOException e) {
+ throw Throwables.propagate(e);
} finally {
timeMetric.stopAndPublish();
}
http://git-wip-us.apache.org/repos/asf/james-project/blob/176d7bf5/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/RequestHandler.java
----------------------------------------------------------------------
diff --git a/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/RequestHandler.java b/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/RequestHandler.java
index 19a8633..f62273c 100644
--- a/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/RequestHandler.java
+++ b/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/RequestHandler.java
@@ -19,6 +19,7 @@
package org.apache.james.jmap.methods;
+import java.io.Closeable;
import java.io.IOException;
import java.util.Map;
import java.util.Optional;
@@ -33,6 +34,7 @@ import org.apache.commons.lang.NotImplementedException;
import org.apache.james.jmap.model.AuthenticatedProtocolRequest;
import org.apache.james.jmap.model.ProtocolResponse;
import org.apache.james.mailbox.MailboxSession;
+import org.apache.james.util.MDCBuilder;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -52,11 +54,19 @@ public class RequestHandler {
.collect(Collectors.toMap(Method::requestHandled, Function.identity()));
}
- public Stream<ProtocolResponse> handle(AuthenticatedProtocolRequest request) {
- return Optional.ofNullable(methods.get(request.getMethodName()))
- .map(extractAndProcess(request))
- .map(jmapResponseWriter::formatMethodResponse)
- .orElseThrow(() -> new IllegalStateException("unknown method " + request.getMethodName()));
+ public Stream<ProtocolResponse> handle(AuthenticatedProtocolRequest request) throws IOException {
+ Optional<MailboxSession> mailboxSession = Optional.ofNullable(request.getMailboxSession());
+ try (Closeable closeable =
+ MDCBuilder.create()
+ .addContext(MDCBuilder.USER, mailboxSession.map(MailboxSession::getUser).map(MailboxSession.User::getUserName))
+ .addContext(MDCBuilder.SESSION_ID, mailboxSession.map(MailboxSession::getSessionId))
+ .addContext(MDCBuilder.ACTION, request.getMethodName().getName())
+ .build()) {
+ return Optional.ofNullable(methods.get(request.getMethodName()))
+ .map(extractAndProcess(request))
+ .map(jmapResponseWriter::formatMethodResponse)
+ .orElseThrow(() -> new IllegalStateException("unknown method " + request.getMethodName()));
+ }
}
private Function<Method, Stream<JmapResponse>> extractAndProcess(AuthenticatedProtocolRequest request) {
http://git-wip-us.apache.org/repos/asf/james-project/blob/176d7bf5/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/SetMailboxesMethod.java
----------------------------------------------------------------------
diff --git a/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/SetMailboxesMethod.java b/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/SetMailboxesMethod.java
index ba125b2..f73f788 100644
--- a/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/SetMailboxesMethod.java
+++ b/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/SetMailboxesMethod.java
@@ -19,6 +19,8 @@
package org.apache.james.jmap.methods;
+import java.io.Closeable;
+import java.io.IOException;
import java.util.Set;
import java.util.stream.Stream;
@@ -30,9 +32,11 @@ import org.apache.james.jmap.model.SetMailboxesResponse;
import org.apache.james.mailbox.MailboxSession;
import org.apache.james.metrics.api.MetricFactory;
import org.apache.james.metrics.api.TimeMetric;
+import org.apache.james.util.MDCBuilder;
import com.google.common.annotations.VisibleForTesting;
import com.google.common.base.Preconditions;
+import com.google.common.base.Throwables;
public class SetMailboxesMethod implements Method {
@@ -66,13 +70,21 @@ public class SetMailboxesMethod implements Method {
Preconditions.checkArgument(request instanceof SetMailboxesRequest);
TimeMetric timeMetric = metricFactory.timer(JMAP_PREFIX + METHOD_NAME.getName());
- try {
- SetMailboxesRequest setMailboxesRequest = (SetMailboxesRequest) request;
+ SetMailboxesRequest setMailboxesRequest = (SetMailboxesRequest) request;
+ try (Closeable closeable =
+ MDCBuilder.create()
+ .addContext(MDCBuilder.ACTION, "SET_MAILBOXES")
+ .addContext("create", setMailboxesRequest.getCreate())
+ .addContext("update", setMailboxesRequest.getUpdate())
+ .addContext("destroy", setMailboxesRequest.getDestroy())
+ .build()) {
return Stream.of(
JmapResponse.builder().clientId(clientId)
.response(setMailboxesResponse(setMailboxesRequest, mailboxSession))
.responseName(RESPONSE_NAME)
.build());
+ } catch (IOException e) {
+ throw Throwables.propagate(e);
} finally {
timeMetric.stopAndPublish();
}
http://git-wip-us.apache.org/repos/asf/james-project/blob/176d7bf5/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/SetMessagesMethod.java
----------------------------------------------------------------------
diff --git a/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/SetMessagesMethod.java b/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/SetMessagesMethod.java
index 8f9da9b..def3929 100644
--- a/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/SetMessagesMethod.java
+++ b/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/SetMessagesMethod.java
@@ -19,6 +19,8 @@
package org.apache.james.jmap.methods;
+import java.io.Closeable;
+import java.io.IOException;
import java.util.Set;
import java.util.stream.Stream;
@@ -30,9 +32,11 @@ import org.apache.james.jmap.model.SetMessagesResponse;
import org.apache.james.mailbox.MailboxSession;
import org.apache.james.metrics.api.MetricFactory;
import org.apache.james.metrics.api.TimeMetric;
+import org.apache.james.util.MDCBuilder;
import com.google.common.annotations.VisibleForTesting;
import com.google.common.base.Preconditions;
+import com.google.common.base.Throwables;
public class SetMessagesMethod implements Method {
@@ -61,13 +65,23 @@ public class SetMessagesMethod implements Method {
public Stream<JmapResponse> process(JmapRequest request, ClientId clientId, MailboxSession mailboxSession) {
Preconditions.checkArgument(request instanceof SetMessagesRequest);
TimeMetric timeMetric = metricFactory.timer(JMAP_PREFIX + METHOD_NAME.getName());
- try {
+ SetMessagesRequest setMessagesRequest = (SetMessagesRequest) request;
+ try (Closeable closeable =
+ MDCBuilder.create()
+ .addContext(MDCBuilder.ACTION, "SET_MESSAGES")
+ .addContext("accountId", setMessagesRequest.getAccountId())
+ .addContext("create", setMessagesRequest.getCreate())
+ .addContext("destroy", setMessagesRequest.getDestroy())
+ .addContext("ifInState", setMessagesRequest.getIfInState())
+ .build()) {
Stream<JmapResponse> responses = Stream.of(
JmapResponse.builder().clientId(clientId)
- .response(setMessagesResponse((SetMessagesRequest) request, mailboxSession))
+ .response(setMessagesResponse(setMessagesRequest, mailboxSession))
.responseName(RESPONSE_NAME)
.build());
return responses;
+ } catch (IOException e) {
+ throw Throwables.propagate(e);
} finally {
timeMetric.stopAndPublish();
}
http://git-wip-us.apache.org/repos/asf/james-project/blob/176d7bf5/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/SetVacationResponseMethod.java
----------------------------------------------------------------------
diff --git a/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/SetVacationResponseMethod.java b/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/SetVacationResponseMethod.java
index 208cb2d..ffe30e9 100644
--- a/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/SetVacationResponseMethod.java
+++ b/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/SetVacationResponseMethod.java
@@ -19,6 +19,8 @@
package org.apache.james.jmap.methods;
+import java.io.Closeable;
+import java.io.IOException;
import java.util.stream.Stream;
import javax.inject.Inject;
@@ -35,8 +37,10 @@ import org.apache.james.jmap.model.VacationResponse;
import org.apache.james.mailbox.MailboxSession;
import org.apache.james.metrics.api.MetricFactory;
import org.apache.james.metrics.api.TimeMetric;
+import org.apache.james.util.MDCBuilder;
import com.google.common.base.Preconditions;
+import com.google.common.base.Throwables;
public class SetVacationResponseMethod implements Method {
@@ -77,7 +81,11 @@ public class SetVacationResponseMethod implements Method {
SetVacationRequest setVacationRequest = (SetVacationRequest) request;
TimeMetric timeMetric = metricFactory.timer(JMAP_PREFIX + METHOD_NAME.getName());
- try {
+ try (Closeable closeable =
+ MDCBuilder.create()
+ .addContext(MDCBuilder.ACTION, "SET_VACATION")
+ .addContext("update", setVacationRequest.getUpdate())
+ .build()) {
if (!setVacationRequest.isValid()) {
return Stream.of(JmapResponse
.builder()
@@ -92,6 +100,8 @@ public class SetVacationResponseMethod implements Method {
return process(clientId,
AccountId.fromString(mailboxSession.getUser().getUserName()),
setVacationRequest.getUpdate().get(Vacation.ID));
+ } catch (IOException e) {
+ throw Throwables.propagate(e);
} finally {
timeMetric.stopAndPublish();
}
http://git-wip-us.apache.org/repos/asf/james-project/blob/176d7bf5/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/ValueWithId.java
----------------------------------------------------------------------
diff --git a/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/ValueWithId.java b/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/ValueWithId.java
index 9595ed3..194e6d1 100644
--- a/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/ValueWithId.java
+++ b/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/ValueWithId.java
@@ -24,6 +24,8 @@ import org.apache.james.jmap.model.CreationMessageId;
import org.apache.james.jmap.model.Message;
import org.apache.james.jmap.model.SetError;
+import com.google.common.base.MoreObjects;
+
public class ValueWithId<T> {
private CreationMessageId creationId;
@@ -60,4 +62,11 @@ public class ValueWithId<T> {
}
}
+ @Override
+ public String toString() {
+ return MoreObjects.toStringHelper(this)
+ .add("creationId", creationId)
+ .add("value", value)
+ .toString();
+ }
}
http://git-wip-us.apache.org/repos/asf/james-project/blob/176d7bf5/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/CreationMessage.java
----------------------------------------------------------------------
diff --git a/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/CreationMessage.java b/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/CreationMessage.java
index a113f83..791b383 100644
--- a/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/CreationMessage.java
+++ b/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/CreationMessage.java
@@ -476,4 +476,11 @@ public class CreationMessage {
return result;
}
}
+
+ @Override
+ public String toString() {
+ return MoreObjects.toStringHelper(this)
+ .add("mailboxIds", mailboxIds)
+ .toString();
+ }
}
http://git-wip-us.apache.org/repos/asf/james-project/blob/176d7bf5/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/CreationMessageId.java
----------------------------------------------------------------------
diff --git a/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/CreationMessageId.java b/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/CreationMessageId.java
index e23dd6a..a914ec1 100644
--- a/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/CreationMessageId.java
+++ b/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/CreationMessageId.java
@@ -22,6 +22,7 @@ package org.apache.james.jmap.model;
import java.util.Objects;
import com.fasterxml.jackson.annotation.JsonValue;
+import com.google.common.base.MoreObjects;
import com.google.common.base.Preconditions;
public class CreationMessageId {
@@ -56,4 +57,11 @@ public class CreationMessageId {
public int hashCode() {
return Objects.hash(id);
}
+
+ @Override
+ public String toString() {
+ return MoreObjects.toStringHelper(this)
+ .add("id", id)
+ .toString();
+ }
}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/james-project/blob/176d7bf5/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/MailboxCreationId.java
----------------------------------------------------------------------
diff --git a/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/MailboxCreationId.java b/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/MailboxCreationId.java
index 40d76af..01398ac 100644
--- a/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/MailboxCreationId.java
+++ b/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/MailboxCreationId.java
@@ -22,6 +22,7 @@ package org.apache.james.jmap.model;
import java.util.Objects;
import com.fasterxml.jackson.annotation.JsonValue;
+import com.google.common.base.MoreObjects;
public class MailboxCreationId {
@@ -52,4 +53,11 @@ public class MailboxCreationId {
public int hashCode() {
return Objects.hashCode(creationId);
}
+
+ @Override
+ public String toString() {
+ return MoreObjects.toStringHelper(this)
+ .add("creationId", creationId)
+ .toString();
+ }
}
http://git-wip-us.apache.org/repos/asf/james-project/blob/176d7bf5/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/MailboxProperty.java
----------------------------------------------------------------------
diff --git a/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/MailboxProperty.java b/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/MailboxProperty.java
index 393e64b..5508073 100644
--- a/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/MailboxProperty.java
+++ b/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/MailboxProperty.java
@@ -21,6 +21,7 @@ package org.apache.james.jmap.model;
import java.util.Arrays;
import java.util.Optional;
+import com.google.common.base.MoreObjects;
import com.google.common.base.Preconditions;
public enum MailboxProperty implements Property {
@@ -57,4 +58,11 @@ public enum MailboxProperty implements Property {
.filter(element -> element.fieldName.equals(value))
.findAny();
}
+
+ @Override
+ public String toString() {
+ return MoreObjects.toStringHelper(this)
+ .add("fieldName", fieldName)
+ .toString();
+ }
}
http://git-wip-us.apache.org/repos/asf/james-project/blob/176d7bf5/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/MessageProperties.java
----------------------------------------------------------------------
diff --git a/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/MessageProperties.java b/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/MessageProperties.java
index f53fe5f..d8b23db 100644
--- a/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/MessageProperties.java
+++ b/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/MessageProperties.java
@@ -25,6 +25,7 @@ import java.util.Optional;
import java.util.stream.Stream;
import com.github.steveash.guavate.Guavate;
+import com.google.common.base.MoreObjects;
import com.google.common.base.Preconditions;
import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Sets;
@@ -244,4 +245,12 @@ public class MessageProperties {
return Objects.toString(fieldName);
}
}
+
+ @Override
+ public String toString() {
+ return MoreObjects.toStringHelper(this)
+ .add("headersProperties", headersProperties)
+ .add("messageProperties", messageProperties)
+ .toString();
+ }
}
http://git-wip-us.apache.org/repos/asf/james-project/blob/176d7bf5/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/VacationResponse.java
----------------------------------------------------------------------
diff --git a/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/VacationResponse.java b/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/VacationResponse.java
index 37816a0..0266f60 100644
--- a/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/VacationResponse.java
+++ b/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/VacationResponse.java
@@ -34,6 +34,7 @@ import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import com.fasterxml.jackson.databind.annotation.JsonPOJOBuilder;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.google.common.base.MoreObjects;
import com.google.common.base.Preconditions;
@JsonDeserialize(builder = VacationResponse.Builder.class)
@@ -221,4 +222,14 @@ public class VacationResponse {
public int hashCode() {
return Objects.hash(id, isEnabled, fromDate, toDate, textBody, subject, htmlBody, isActivated);
}
+
+ @Override
+ public String toString() {
+ return MoreObjects.toStringHelper(this)
+ .add("id", id)
+ .add("fromDate", fromDate)
+ .add("toDate", toDate)
+ .add("isActivated", isActivated)
+ .toString();
+ }
}
http://git-wip-us.apache.org/repos/asf/james-project/blob/176d7bf5/server/protocols/jmap/src/test/java/org/apache/james/jmap/JMAPServletTest.java
----------------------------------------------------------------------
diff --git a/server/protocols/jmap/src/test/java/org/apache/james/jmap/JMAPServletTest.java b/server/protocols/jmap/src/test/java/org/apache/james/jmap/JMAPServletTest.java
index 1bac2d0..5c4d338 100644
--- a/server/protocols/jmap/src/test/java/org/apache/james/jmap/JMAPServletTest.java
+++ b/server/protocols/jmap/src/test/java/org/apache/james/jmap/JMAPServletTest.java
@@ -93,7 +93,7 @@ public class JMAPServletTest {
}
@Test
- public void mustReturnInvalidArgumentOnInvalidState() {
+ public void mustReturnInvalidArgumentOnInvalidState() throws Exception {
ObjectNode json = new ObjectNode(new JsonNodeFactory(false));
json.put("type", "invalidArgument");
@@ -110,7 +110,7 @@ public class JMAPServletTest {
}
@Test
- public void mustReturnAccountsOnValidRequest() {
+ public void mustReturnAccountsOnValidRequest() throws Exception {
ObjectNode json = new ObjectNode(new JsonNodeFactory(false));
json.put("state", "f6a7e214");
ArrayNode arrayNode = json.putArray("list");
http://git-wip-us.apache.org/repos/asf/james-project/blob/176d7bf5/server/protocols/jmap/src/test/java/org/apache/james/jmap/methods/RequestHandlerTest.java
----------------------------------------------------------------------
diff --git a/server/protocols/jmap/src/test/java/org/apache/james/jmap/methods/RequestHandlerTest.java b/server/protocols/jmap/src/test/java/org/apache/james/jmap/methods/RequestHandlerTest.java
index 303aa47..ac388e7 100644
--- a/server/protocols/jmap/src/test/java/org/apache/james/jmap/methods/RequestHandlerTest.java
+++ b/server/protocols/jmap/src/test/java/org/apache/james/jmap/methods/RequestHandlerTest.java
@@ -134,7 +134,7 @@ public class RequestHandlerTest {
@Test(expected=IllegalStateException.class)
- public void processShouldThrowWhenUnknownMethod() {
+ public void processShouldThrowWhenUnknownMethod() throws Exception {
JsonNode[] nodes = new JsonNode[] { new ObjectNode(new JsonNodeFactory(false)).textNode("unknwonMethod"),
new ObjectNode(new JsonNodeFactory(false)).putObject("{\"id\": \"id\"}"),
new ObjectNode(new JsonNodeFactory(false)).textNode("#1")} ;
@@ -199,7 +199,7 @@ public class RequestHandlerTest {
}
@Test
- public void processShouldWorkWhenKnownMethod() {
+ public void processShouldWorkWhenKnownMethod() throws Exception {
ObjectNode parameters = new ObjectNode(new JsonNodeFactory(false));
parameters.put("id", "testId");
parameters.put("name", "testName");
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org