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]

Reply via email to