Hello list,
I need to write an interceptor to log the execution time for a
request. Nothing's more easy than that - I thought. Just intercept the
most low level Stage, execute the others stages in between and then
log the time. But i didn't find a way to intercept the whole request.
What I've done so far is this interceptor:
@Intercepts(
{
        LifecycleStage.RequestInit,
        LifecycleStage.ActionBeanResolution,
        LifecycleStage.HandlerResolution,
        LifecycleStage.BindingAndValidation,
        LifecycleStage.CustomValidation,
        LifecycleStage.EventHandling,
        LifecycleStage.ResolutionExecution,
        LifecycleStage.RequestComplete })
public class CallTimeInterceptor implements Interceptor {
        private static final Logger logger =
Logger.getLogger(CallTimeInterceptor.class);
        private static final String FORMAT_STRING = "Call to {0}, stage {1}
took {2}ms";

        public Resolution intercept(ExecutionContext context) throws Exception {
                if (logger.isInfoEnabled()) {
                        long nanoTime = System.nanoTime();
                        Resolution proceed = context.proceed();
                        logger.info(MessageFormat.format(FORMAT_STRING,
context.getActionBeanContext().getRequest().getRequestURL(), context
                                        .getLifecycleStage(), 
Double.valueOf(System.nanoTime() -
nanoTime) / 1000000.0));
                        return proceed;
                } else
                        return context.proceed();
        }
}

This creates the following logEntries:
[ INFO] 10:25:26 ....controllers.interceptors.CallTimeInterceptor:31 -
Call to http://127.0.0.1:8080/dwhfe/pub/Authentication.htm, stage
RequestInit took 0,103ms
[ INFO] 10:25:27 ...controllers.interceptors.CallTimeInterceptor:31 -
Call to http://127.0.0.1:8080/dwhfe/pub/Authentication.htm, stage
ActionBeanResolution took 506,321ms
[ INFO] 10:25:27 ...controllers.interceptors.CallTimeInterceptor:31 -
Call to http://127.0.0.1:8080/dwhfe/pub/Authentication.htm, stage
HandlerResolution took 3,613ms
[ INFO] 10:25:27 ...controllers.interceptors.CallTimeInterceptor:31 -
Call to http://127.0.0.1:8080/dwhfe/pub/Authentication.htm, stage
BindingAndValidation took 0,013ms
[ INFO] 10:25:27 ...controllers.interceptors.CallTimeInterceptor:31 -
Call to http://127.0.0.1:8080/dwhfe/pub/Authentication.htm, stage
EventHandling took 3,761ms
[ INFO] 10:25:27 ...controllers.interceptors.CallTimeInterceptor:31 -
Call to http://127.0.0.1:8080/dwhfe/pub/Authentication.htm, stage
ResolutionExecution took 467,878ms
[ INFO] 10:25:27 ...controllers.interceptors.CallTimeInterceptor:31 -
Call to http://127.0.0.1:8080/dwhfe/pub/Authentication.htm, stage
RequestComplete took 0,013ms

I googled around but didn't find a way to configure the interceptor in
a way, that it encapsulates the whole call, not only the single
stages. Of course I could write the startTime into the request in life
cycle RequestInit and read it out in RequestComplete but I'm scared of
the possible performance hit. So is there a way to do this?

Thanks for your time,
Richard

------------------------------------------------------------------------------
Apps built with the Adobe(R) Flex(R) framework and Flex Builder(TM) are
powering Web 2.0 with engaging, cross-platform capabilities. Quickly and
easily build your RIAs with Flex Builder, the Eclipse(TM)based development
software that enables intelligent coding and step-through debugging.
Download the free 60 day trial. http://p.sf.net/sfu/www-adobe-com
_______________________________________________
Stripes-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/stripes-users

Reply via email to