This is how one of the doFilter() method of PerformanceFilter looks like
public void doFilter(RenderRequest request, RenderResponse response,FilterChain filterChain)
throws IOException, PortletException {
long beforeTime = System.currentTimeMillis();
filterChain.doFilter(request, response);
long afterTime = System.currentTimeMillis();
long executionTime = (afterTime - beforeTime)/100;
System.out.println("Time for execution " + executionTime);
if(executionTime > debugThreshold){
Map portletInfoMap = getCurrentPortletInfo(request.getWindowID(),
(ServletRequest)request, (ServletResponse)response);
portletInfoMap.put("PORTLET_METHOD", "render");
portletInfoMap.put("PORTLET_EXECUTIONTIME", Long.toString(executionTime));
printDebugInformation(request, response,portletInfoMap);
}
}
In the doFilter() method i am taking the time before and after i forwarded control up the chain and using that time to calculate execution time. If the execution time is more than threshold then i am printing debug information. In my simple filter i am only printing request parameter, but you can print all the information that you want ex. portlet prefrences, portlet session information...
Since this is a Global Filter i have a plugin.xml file which looks like this
<?xml version="1.0" encoding="UTF-8"?>
<?eclipse version="3.0"?>
<plugin id="com.webspherenotes.filter.performancemonitorfilter" name="WS_Server"
provider-name="IBM" version="2.0.0">
<extension point="com.ibm.ws.portletcontainer.portlet-filter-config">
<portlet-filter-config
class-name="com.webspherenotes.portlet.PerformanceMonitorFilter" order="99">
<description> Performance Filter, order = 102 </description>
<lifecycle>RENDER_PHASE</lifecycle>
<lifecycle>RESOURCE_PHASE</lifecycle>
<lifecycle>ACTION_PHASE</lifecycle>
<lifecycle>EVENT_PHASE</lifecycle>
<init-param>
<name>DEBUG_THRESHOLD</name>
<value>1</value>
</init-param>
</portlet-filter-config>
</extension>
</plugin>
I am reading value of DEBUG_THRESHOLD input parameter from plugin.xml and using it to decide when should i generate debug log. In my case if the portlet takes more than 1 second to respond then i am generating log. This is how a sample log looks like
****Problematic portlet found ****
Page -> wps.LoginPorltet Name -> wps.p.Login Method -> render Took 7
Hi
ReplyDeleteThese days you are mostly writing for developers. I'm interested from Administration point of view. Your earlier posts were concentrated a lot on Admin but these days almost no posts.
Srinivas