Author: norman
Date: Sat Nov 27 10:14:12 2010
New Revision: 1039640
URL: http://svn.apache.org/viewvc?rev=1039640&view=rev
Log:
Expose statistics for ConnectHandler/LineHandler/CommandHandler. See
PROTOCOLS-15
Added:
james/protocols/trunk/api/src/main/java/org/apache/james/protocols/api/CommanHandlerResultHandler.java
- copied, changed from r1039534,
james/protocols/trunk/api/src/main/java/org/apache/james/protocols/api/ResponseResultHandler.java
james/protocols/trunk/api/src/main/java/org/apache/james/protocols/api/ConnectHandlerResultHandler.java
james/protocols/trunk/api/src/main/java/org/apache/james/protocols/api/LineHandlerResultHandler.java
Removed:
james/protocols/trunk/api/src/main/java/org/apache/james/protocols/api/ResponseResultHandler.java
Modified:
james/protocols/trunk/api/src/main/java/org/apache/james/protocols/api/AbstractCommandDispatcher.java
james/protocols/trunk/impl/src/main/java/org/apache/james/protocols/impl/AbstractChannelUpstreamHandler.java
james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/core/AbstractHookableCmdHandler.java
james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/core/DataLineMessageHookHandler.java
james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/core/esmtp/AuthCmdHandler.java
james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/hook/HookResultHook.java
Modified:
james/protocols/trunk/api/src/main/java/org/apache/james/protocols/api/AbstractCommandDispatcher.java
URL:
http://svn.apache.org/viewvc/james/protocols/trunk/api/src/main/java/org/apache/james/protocols/api/AbstractCommandDispatcher.java?rev=1039640&r1=1039639&r2=1039640&view=diff
==============================================================================
---
james/protocols/trunk/api/src/main/java/org/apache/james/protocols/api/AbstractCommandDispatcher.java
(original)
+++
james/protocols/trunk/api/src/main/java/org/apache/james/protocols/api/AbstractCommandDispatcher.java
Sat Nov 27 10:14:12 2010
@@ -41,7 +41,7 @@ public abstract class AbstractCommandDis
*/
private HashMap<String, List<CommandHandler<Session>>> commandHandlerMap =
new HashMap<String, List<CommandHandler<Session>>>();
- private List<ResponseResultHandler<Response, Session>> rHandlers = new
ArrayList<ResponseResultHandler<Response, Session>>();
+ private List<CommanHandlerResultHandler<Response, Session>> rHandlers =
new ArrayList<CommanHandlerResultHandler<Response, Session>>();
/**
* Add it to map (key as command name, value is an array list of
CommandHandlers)
*
@@ -86,7 +86,7 @@ public abstract class AbstractCommandDis
*/
@SuppressWarnings("unchecked")
public void wireExtensions(Class interfaceName, List extension) throws
WiringException {
- if (interfaceName.equals(ResponseResultHandler.class)) {
+ if (interfaceName.equals(CommanHandlerResultHandler.class)) {
rHandlers.addAll(extension);
}
if (interfaceName.equals(CommandHandler.class)) {
@@ -142,7 +142,10 @@ public abstract class AbstractCommandDis
int count = commandHandlers.size();
for (int i = 0; i < count; i++) {
CommandHandler<Session> cHandler = commandHandlers.get(i);
+
+ long start = System.currentTimeMillis();
Response response = cHandler.onCommand(session, new
BaseRequest(curCommandName, curCommandArgument));
+ long executionTime = System.currentTimeMillis() - start;
// if the response is received, stop processing of command
// handlers
@@ -150,7 +153,7 @@ public abstract class AbstractCommandDis
// now process the result handlers
for (int a = 0; a < rHandlers.size(); a++) {
- response = rHandlers.get(a).onResponse(session,
response, (CommandHandler<Session>) cHandler);
+ response = rHandlers.get(a).onResponse(session,
response, executionTime, (CommandHandler<Session>) cHandler);
}
session.writeResponse(response);
@@ -178,7 +181,7 @@ public abstract class AbstractCommandDis
public List<Class<?>> getMarkerInterfaces() {
List res = new LinkedList();
res.add(CommandHandler.class);
- res.add(ResponseResultHandler.class);
+ res.add(CommanHandlerResultHandler.class);
return res;
}
Copied:
james/protocols/trunk/api/src/main/java/org/apache/james/protocols/api/CommanHandlerResultHandler.java
(from r1039534,
james/protocols/trunk/api/src/main/java/org/apache/james/protocols/api/ResponseResultHandler.java)
URL:
http://svn.apache.org/viewvc/james/protocols/trunk/api/src/main/java/org/apache/james/protocols/api/CommanHandlerResultHandler.java?p2=james/protocols/trunk/api/src/main/java/org/apache/james/protocols/api/CommanHandlerResultHandler.java&p1=james/protocols/trunk/api/src/main/java/org/apache/james/protocols/api/ResponseResultHandler.java&r1=1039534&r2=1039640&rev=1039640&view=diff
==============================================================================
---
james/protocols/trunk/api/src/main/java/org/apache/james/protocols/api/ResponseResultHandler.java
(original)
+++
james/protocols/trunk/api/src/main/java/org/apache/james/protocols/api/CommanHandlerResultHandler.java
Sat Nov 27 10:14:12 2010
@@ -19,7 +19,7 @@
package org.apache.james.protocols.api;
-public interface ResponseResultHandler<R extends Response, S extends
ProtocolSession> {
+public interface CommanHandlerResultHandler<R extends Response, S extends
ProtocolSession> {
/**
* Get called when a {...@link Response} was returned from the {...@link
CommandHandler}
@@ -29,5 +29,5 @@ public interface ResponseResultHandler<R
* @param handler
* @return response
*/
- public Response onResponse(ProtocolSession session, R response,
CommandHandler<S> handler);
+ public Response onResponse(ProtocolSession session, R response, long
executionTime, CommandHandler<S> handler);
}
Added:
james/protocols/trunk/api/src/main/java/org/apache/james/protocols/api/ConnectHandlerResultHandler.java
URL:
http://svn.apache.org/viewvc/james/protocols/trunk/api/src/main/java/org/apache/james/protocols/api/ConnectHandlerResultHandler.java?rev=1039640&view=auto
==============================================================================
---
james/protocols/trunk/api/src/main/java/org/apache/james/protocols/api/ConnectHandlerResultHandler.java
(added)
+++
james/protocols/trunk/api/src/main/java/org/apache/james/protocols/api/ConnectHandlerResultHandler.java
Sat Nov 27 10:14:12 2010
@@ -0,0 +1,41 @@
+/****************************************************************
+ * 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.protocols.api;
+
+/**
+ * Handler which can be used to gather statistics for {...@link
ConnectHandler} or
+ * modify the return type of them
+ *
+ *
+ * @param <S>
+ */
+public interface ConnectHandlerResultHandler<S extends ProtocolSession> {
+
+ /**
+ * Called after the {...@link ConnectHandler} returned a result
+ *
+ * @param session
+ * @param response
+ * @param executionTime
+ * @param handler
+ * @return result
+ */
+ public boolean onResponse(ProtocolSession session, boolean response, long
executionTime, ConnectHandler<S> handler);
+
+}
Added:
james/protocols/trunk/api/src/main/java/org/apache/james/protocols/api/LineHandlerResultHandler.java
URL:
http://svn.apache.org/viewvc/james/protocols/trunk/api/src/main/java/org/apache/james/protocols/api/LineHandlerResultHandler.java?rev=1039640&view=auto
==============================================================================
---
james/protocols/trunk/api/src/main/java/org/apache/james/protocols/api/LineHandlerResultHandler.java
(added)
+++
james/protocols/trunk/api/src/main/java/org/apache/james/protocols/api/LineHandlerResultHandler.java
Sat Nov 27 10:14:12 2010
@@ -0,0 +1,44 @@
+/****************************************************************
+ * 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.protocols.api;
+
+/**
+ * Handler which can be used to gather statistics for {...@link LineHandler}
or
+ * modify the return type of them
+ *
+ *
+ * @param <S>
+ */
+public interface LineHandlerResultHandler<S extends ProtocolSession> {
+
+
+ /**
+ * Called after the {...@link LineHandler} returned a result
+ *
+ * @param session
+ * @param response
+ * @param executionTime
+ * @param handler
+ * @return result
+ */
+ public boolean onResponse(ProtocolSession session, boolean response, long
executionTime, LineHandler<S> handler);
+
+
+}
Modified:
james/protocols/trunk/impl/src/main/java/org/apache/james/protocols/impl/AbstractChannelUpstreamHandler.java
URL:
http://svn.apache.org/viewvc/james/protocols/trunk/impl/src/main/java/org/apache/james/protocols/impl/AbstractChannelUpstreamHandler.java?rev=1039640&r1=1039639&r2=1039640&view=diff
==============================================================================
---
james/protocols/trunk/impl/src/main/java/org/apache/james/protocols/impl/AbstractChannelUpstreamHandler.java
(original)
+++
james/protocols/trunk/impl/src/main/java/org/apache/james/protocols/impl/AbstractChannelUpstreamHandler.java
Sat Nov 27 10:14:12 2010
@@ -23,7 +23,9 @@ import java.util.LinkedList;
import java.util.List;
import org.apache.james.protocols.api.ConnectHandler;
+import org.apache.james.protocols.api.ConnectHandlerResultHandler;
import org.apache.james.protocols.api.LineHandler;
+import org.apache.james.protocols.api.LineHandlerResultHandler;
import org.apache.james.protocols.api.ProtocolHandlerChain;
import org.apache.james.protocols.api.ProtocolSession;
import org.jboss.netty.buffer.ChannelBuffer;
@@ -66,10 +68,19 @@ public abstract class AbstractChannelUps
@Override
public void channelConnected(ChannelHandlerContext ctx, ChannelStateEvent
e) throws Exception {
List<ConnectHandler> connectHandlers =
chain.getHandlers(ConnectHandler.class);
-
+ List<ConnectHandlerResultHandler> resultHandlers =
chain.getHandlers(ConnectHandlerResultHandler.class);
+ ProtocolSession session = (ProtocolSession)
attributes.get(ctx.getChannel());
if (connectHandlers != null) {
for (int i = 0; i < connectHandlers.size(); i++) {
- boolean disconnect =
connectHandlers.get(i).onConnect((ProtocolSession)
attributes.get(ctx.getChannel()));
+ ConnectHandler cHandler = connectHandlers.get(i);
+
+ long start = System.currentTimeMillis();
+ boolean disconnect = connectHandlers.get(i).onConnect(session);
+ long executionTime = System.currentTimeMillis() - start;
+
+ for (int a = 0; a < resultHandlers.size(); a++) {
+ disconnect = resultHandlers.get(i).onResponse(session,
disconnect, executionTime, cHandler);
+ }
if (disconnect) {
ctx.getChannel().disconnect();
break;
@@ -89,7 +100,8 @@ public abstract class AbstractChannelUps
public void messageReceived(ChannelHandlerContext ctx, MessageEvent e)
throws Exception {
ProtocolSession pSession = (ProtocolSession)
attributes.get(ctx.getChannel());
LinkedList<LineHandler> lineHandlers =
chain.getHandlers(LineHandler.class);
-
+ LinkedList<LineHandlerResultHandler> resultHandlers =
chain.getHandlers(LineHandlerResultHandler.class);
+
if (lineHandlers.size() > 0) {
@@ -104,8 +116,16 @@ public abstract class AbstractChannelUps
buf.getBytes(0, line);
}
- boolean disconnect = ((LineHandler)
lineHandlers.getLast()).onLine(pSession,line);
+ LineHandler lHandler= (LineHandler) lineHandlers.getLast();
+ long start = System.currentTimeMillis();
+ boolean disconnect = lHandler.onLine(pSession,line);
+ long executionTime = System.currentTimeMillis() - start;
+
+ for (int i = 0; i < resultHandlers.size(); i++) {
+ disconnect = resultHandlers.get(i).onResponse(pSession,
disconnect, executionTime, lHandler);
+ }
if (disconnect) ctx.getChannel().disconnect();
+
}
super.messageReceived(ctx, e);
Modified:
james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/core/AbstractHookableCmdHandler.java
URL:
http://svn.apache.org/viewvc/james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/core/AbstractHookableCmdHandler.java?rev=1039640&r1=1039639&r2=1039640&view=diff
==============================================================================
---
james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/core/AbstractHookableCmdHandler.java
(original)
+++
james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/core/AbstractHookableCmdHandler.java
Sat Nov 27 10:14:12 2010
@@ -87,12 +87,16 @@ public abstract class AbstractHookableCm
for (int i = 0; i < count; i++) {
Hook rawHook = hooks.get(i);
session.getLogger().debug("executing hook " +
rawHook.getClass().getName());
+ long start = System.currentTimeMillis();
+
HookResult hRes = callHook(rawHook, session, parameters);
+ long executionTime = System.currentTimeMillis() - start;
+
if (rHooks != null) {
for (int i2 = 0; i2 < rHooks.size(); i2++) {
Object rHook = rHooks.get(i2);
session.getLogger().debug("executing hook " + rHook);
- hRes = ((HookResultHook) rHook).onHookResult(session,
hRes, rawHook);
+ hRes = ((HookResultHook) rHook).onHookResult(session,
hRes, executionTime, rawHook);
}
}
Modified:
james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/core/DataLineMessageHookHandler.java
URL:
http://svn.apache.org/viewvc/james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/core/DataLineMessageHookHandler.java?rev=1039640&r1=1039639&r2=1039640&view=diff
==============================================================================
---
james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/core/DataLineMessageHookHandler.java
(original)
+++
james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/core/DataLineMessageHookHandler.java
Sat Nov 27 10:14:12 2010
@@ -104,13 +104,17 @@ public final class DataLineMessageHookHa
for(int i =0; i < count; i++) {
MessageHook rawHandler = (MessageHook)
messageHandlers.get(i);
session.getLogger().debug("executing message handler " +
rawHandler);
+
+ long start = System.currentTimeMillis();
HookResult hRes = rawHandler.onMessage(session, mail);
-
+ long executionTime = System.currentTimeMillis() - start;
+
if (rHooks != null) {
for (int i2 = 0; i2 < rHooks.size(); i2++) {
Object rHook = rHooks.get(i2);
session.getLogger().debug("executing hook " +
rHook);
- hRes = ((HookResultHook)
rHook).onHookResult(session, hRes, rawHandler);
+
+ hRes = ((HookResultHook)
rHook).onHookResult(session, hRes, executionTime, rawHandler);
}
}
Modified:
james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/core/esmtp/AuthCmdHandler.java
URL:
http://svn.apache.org/viewvc/james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/core/esmtp/AuthCmdHandler.java?rev=1039640&r1=1039639&r2=1039640&view=diff
==============================================================================
---
james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/core/esmtp/AuthCmdHandler.java
(original)
+++
james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/core/esmtp/AuthCmdHandler.java
Sat Nov 27 10:14:12 2010
@@ -327,14 +327,17 @@ public class AuthCmdHandler
AuthHook rawHook = hooks.get(i);
session.getLogger().debug("executing hook " + rawHook);
+
+ long start = System.currentTimeMillis();
HookResult hRes = rawHook.doAuth(session, user, pass);
-
+ long executionTime = System.currentTimeMillis() - start;
+
if (rHooks != null) {
for (int i2 = 0; i2 < rHooks.size(); i2++) {
Object rHook = rHooks.get(i2);
session.getLogger().debug("executing hook " + rHook);
- hRes = ((HookResultHook) rHook).onHookResult(session,
hRes, rawHook);
+ hRes = ((HookResultHook) rHook).onHookResult(session,
hRes, executionTime, rawHook);
}
}
Modified:
james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/hook/HookResultHook.java
URL:
http://svn.apache.org/viewvc/james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/hook/HookResultHook.java?rev=1039640&r1=1039639&r2=1039640&view=diff
==============================================================================
---
james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/hook/HookResultHook.java
(original)
+++
james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/hook/HookResultHook.java
Sat Nov 27 10:14:12 2010
@@ -24,5 +24,5 @@ import org.apache.james.protocols.smtp.S
public interface HookResultHook {
- public HookResult onHookResult(SMTPSession session,HookResult result, Hook
object);
+ public HookResult onHookResult(SMTPSession session,HookResult result, long
executionTime, Hook object);
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]