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:34 UTC
[09/38] james-project git commit: JAMES-2114 MDC logging context for
MANAGE-SIEVE
JAMES-2114 MDC logging context for MANAGE-SIEVE
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/f998640a
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/f998640a
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/f998640a
Branch: refs/heads/master
Commit: f998640aec61cf08c38753e8879947d14329603c
Parents: 56974b9
Author: benwa <bt...@linagora.com>
Authored: Mon Aug 14 11:35:44 2017 +0700
Committer: benwa <bt...@linagora.com>
Committed: Thu Aug 24 10:34:42 2017 +0700
----------------------------------------------------------------------
server/protocols/protocols-managesieve/pom.xml | 4 +
.../ManageSieveChannelUpstreamHandler.java | 88 +++++++++-----------
.../netty/ManageSieveMDCContext.java | 67 +++++++++++++++
3 files changed, 110 insertions(+), 49 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/james-project/blob/f998640a/server/protocols/protocols-managesieve/pom.xml
----------------------------------------------------------------------
diff --git a/server/protocols/protocols-managesieve/pom.xml b/server/protocols/protocols-managesieve/pom.xml
index 81863e6..5bbcbb6 100644
--- a/server/protocols/protocols-managesieve/pom.xml
+++ b/server/protocols/protocols-managesieve/pom.xml
@@ -22,6 +22,10 @@
<artifactId>james-server-filesystem-api</artifactId>
</dependency>
<dependency>
+ <groupId>org.apache.james</groupId>
+ <artifactId>james-server-util-java8</artifactId>
+ </dependency>
+ <dependency>
<groupId>org.apache.james.protocols</groupId>
<artifactId>protocols-managesieve</artifactId>
</dependency>
http://git-wip-us.apache.org/repos/asf/james-project/blob/f998640a/server/protocols/protocols-managesieve/src/main/java/org/apache/james/managesieveserver/netty/ManageSieveChannelUpstreamHandler.java
----------------------------------------------------------------------
diff --git a/server/protocols/protocols-managesieve/src/main/java/org/apache/james/managesieveserver/netty/ManageSieveChannelUpstreamHandler.java b/server/protocols/protocols-managesieve/src/main/java/org/apache/james/managesieveserver/netty/ManageSieveChannelUpstreamHandler.java
index 11b182f..8f63517 100644
--- a/server/protocols/protocols-managesieve/src/main/java/org/apache/james/managesieveserver/netty/ManageSieveChannelUpstreamHandler.java
+++ b/server/protocols/protocols-managesieve/src/main/java/org/apache/james/managesieveserver/netty/ManageSieveChannelUpstreamHandler.java
@@ -19,8 +19,8 @@
package org.apache.james.managesieveserver.netty;
+import java.io.Closeable;
import java.net.InetSocketAddress;
-import java.util.function.Supplier;
import javax.net.ssl.SSLContext;
@@ -28,7 +28,6 @@ import org.apache.james.managesieve.api.Session;
import org.apache.james.managesieve.api.SessionTerminatedException;
import org.apache.james.managesieve.transcode.ManageSieveProcessor;
import org.apache.james.managesieve.util.SettableSession;
-import org.apache.james.protocols.api.logger.ContextualLogger;
import org.jboss.netty.buffer.ChannelBuffers;
import org.jboss.netty.channel.Channel;
import org.jboss.netty.channel.ChannelFutureListener;
@@ -65,28 +64,32 @@ public class ManageSieveChannelUpstreamHandler extends SimpleChannelUpstreamHand
@Override
public void messageReceived(ChannelHandlerContext ctx, MessageEvent e) throws Exception {
- String request = (String) e.getMessage();
- Session manageSieveSession = attributes.get(ctx.getChannel());
- String responseString = manageSieveProcessor.handleRequest(manageSieveSession, request);
- ((ChannelManageSieveResponseWriter)ctx.getAttachment()).write(responseString);
- if (manageSieveSession.getState() == Session.State.SSL_NEGOCIATION) {
- turnSSLon(ctx.getChannel());
- manageSieveSession.setSslEnabled(true);
- manageSieveSession.setState(Session.State.UNAUTHENTICATED);
+ try (Closeable closeable = ManageSieveMDCContext.from(ctx, attributes)) {
+ String request = (String) e.getMessage();
+ Session manageSieveSession = attributes.get(ctx.getChannel());
+ String responseString = manageSieveProcessor.handleRequest(manageSieveSession, request);
+ ((ChannelManageSieveResponseWriter) ctx.getAttachment()).write(responseString);
+ if (manageSieveSession.getState() == Session.State.SSL_NEGOCIATION) {
+ turnSSLon(ctx.getChannel());
+ manageSieveSession.setSslEnabled(true);
+ manageSieveSession.setState(Session.State.UNAUTHENTICATED);
+ }
}
}
@Override
public void exceptionCaught(ChannelHandlerContext ctx, ExceptionEvent e) throws Exception {
- getLogger(ctx).warn("Error while processing ManageSieve request", e.getCause());
-
- if (e.getCause() instanceof TooLongFrameException) {
- // Max line length exceeded
- // See also JAMES-1190
- ((ChannelManageSieveResponseWriter)ctx.getAttachment()).write("NO Maximum command line length exceeded");
- } else if (e.getCause() instanceof SessionTerminatedException) {
- ((ChannelManageSieveResponseWriter)ctx.getAttachment()).write("OK channel is closing");
- logout(ctx);
+ try (Closeable closeable = ManageSieveMDCContext.from(ctx, attributes)) {
+ logger.warn("Error while processing ManageSieve request", e.getCause());
+
+ if (e.getCause() instanceof TooLongFrameException) {
+ // Max line length exceeded
+ // See also JAMES-1190
+ ((ChannelManageSieveResponseWriter) ctx.getAttachment()).write("NO Maximum command line length exceeded");
+ } else if (e.getCause() instanceof SessionTerminatedException) {
+ ((ChannelManageSieveResponseWriter) ctx.getAttachment()).write("OK channel is closing");
+ logout(ctx);
+ }
}
}
@@ -102,42 +105,29 @@ public class ManageSieveChannelUpstreamHandler extends SimpleChannelUpstreamHand
@Override
public void channelConnected(ChannelHandlerContext ctx, ChannelStateEvent e) throws Exception {
- InetSocketAddress address = (InetSocketAddress) ctx.getChannel().getRemoteAddress();
- getLogger(ctx).info("Connection established from " + address.getAddress().getHostAddress());
+ try (Closeable closeable = ManageSieveMDCContext.from(ctx, attributes)) {
+ InetSocketAddress address = (InetSocketAddress) ctx.getChannel().getRemoteAddress();
+ logger.info("Connection established from " + address.getAddress().getHostAddress());
- Session session = new SettableSession();
- if (sslServer) {
- session.setSslEnabled(true);
+ Session session = new SettableSession();
+ if (sslServer) {
+ session.setSslEnabled(true);
+ }
+ attributes.set(ctx.getChannel(), session);
+ ctx.setAttachment(new ChannelManageSieveResponseWriter(ctx.getChannel()));
+ super.channelBound(ctx, e);
+ ((ChannelManageSieveResponseWriter) ctx.getAttachment()).write(manageSieveProcessor.getAdvertisedCapabilities());
}
- attributes.set(ctx.getChannel(), session);
- ctx.setAttachment(new ChannelManageSieveResponseWriter(ctx.getChannel()));
- super.channelBound(ctx, e);
- ((ChannelManageSieveResponseWriter)ctx.getAttachment()).write(manageSieveProcessor.getAdvertisedCapabilities());
}
@Override
public void channelClosed(ChannelHandlerContext ctx, ChannelStateEvent e) throws Exception {
- InetSocketAddress address = (InetSocketAddress) ctx.getChannel().getRemoteAddress();
- getLogger(ctx).info("Connection closed for " + address.getAddress().getHostAddress());
-
- attributes.remove(ctx.getChannel());
- super.channelClosed(ctx, e);
- }
-
- private Logger getLogger(final ChannelHandlerContext ctx) {
- return new ContextualLogger(getUserSupplier(ctx),
- Integer.toString(ctx.getChannel().getId()),
- logger);
- }
-
- private Supplier<String> getUserSupplier(final ChannelHandlerContext ctx) {
- return () -> {
- Session session = attributes.get(ctx.getChannel());
- if (session != null) {
- return session.getUser();
- }
- return null;
- };
+ try (Closeable closeable = ManageSieveMDCContext.from(ctx, attributes)) {
+ InetSocketAddress address = (InetSocketAddress) ctx.getChannel().getRemoteAddress();
+ logger.info("Connection closed for " + address.getAddress().getHostAddress());
+ attributes.remove(ctx.getChannel());
+ super.channelClosed(ctx, e);
+ }
}
private void turnSSLon(Channel channel) {
http://git-wip-us.apache.org/repos/asf/james-project/blob/f998640a/server/protocols/protocols-managesieve/src/main/java/org/apache/james/managesieveserver/netty/ManageSieveMDCContext.java
----------------------------------------------------------------------
diff --git a/server/protocols/protocols-managesieve/src/main/java/org/apache/james/managesieveserver/netty/ManageSieveMDCContext.java b/server/protocols/protocols-managesieve/src/main/java/org/apache/james/managesieveserver/netty/ManageSieveMDCContext.java
new file mode 100644
index 0000000..d069f7a
--- /dev/null
+++ b/server/protocols/protocols-managesieve/src/main/java/org/apache/james/managesieveserver/netty/ManageSieveMDCContext.java
@@ -0,0 +1,67 @@
+/****************************************************************
+ * 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.managesieveserver.netty;
+
+import java.io.Closeable;
+import java.net.InetSocketAddress;
+import java.net.SocketAddress;
+import java.util.Optional;
+
+import org.apache.james.managesieve.api.Session;
+import org.apache.james.util.MDCBuilder;
+import org.jboss.netty.channel.ChannelHandlerContext;
+import org.jboss.netty.channel.ChannelLocal;
+
+public class ManageSieveMDCContext {
+ public static Closeable from(ChannelHandlerContext ctx, ChannelLocal<Session> attributes) {
+ return MDCBuilder.create()
+ .addContext(from(attributes.get(ctx.getChannel())))
+ .addContext(MDCBuilder.PROTOCOL, "MANAGE-SIEVE")
+ .addContext(MDCBuilder.IP, retrieveIp(ctx))
+ .addContext(MDCBuilder.HOST, retrieveHost(ctx))
+ .addContext(MDCBuilder.SESSION_ID, ctx.getChannel().getId())
+ .build();
+ }
+
+ private static String retrieveIp(ChannelHandlerContext ctx) {
+ SocketAddress remoteAddress = ctx.getChannel().getRemoteAddress();
+ if (remoteAddress instanceof InetSocketAddress) {
+ InetSocketAddress address = (InetSocketAddress) remoteAddress;
+ return address.getAddress().getHostAddress();
+ }
+ return remoteAddress.toString();
+ }
+
+ private static String retrieveHost(ChannelHandlerContext ctx) {
+ SocketAddress remoteAddress = ctx.getChannel().getRemoteAddress();
+ if (remoteAddress instanceof InetSocketAddress) {
+ InetSocketAddress address = (InetSocketAddress) remoteAddress;
+ return address.getHostName();
+ }
+ return remoteAddress.toString();
+ }
+
+ private static MDCBuilder from(Session session) {
+ return Optional.ofNullable(session)
+ .map(s -> MDCBuilder.create()
+ .addContext(MDCBuilder.USER, s.getUser()))
+ .orElse(MDCBuilder.create());
+ }
+}
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org