package org.exoplatform.portal.application;
import java.io.IOException;
import javax.portlet.ActionRequest;
import javax.portlet.ActionResponse;
import javax.portlet.EventRequest;
import javax.portlet.EventResponse;
import javax.portlet.PortletConfig;
import javax.portlet.PortletException;
import javax.portlet.PortletRequest;
import javax.portlet.RenderRequest;
import javax.portlet.RenderResponse;
import javax.portlet.ResourceRequest;
import javax.portlet.ResourceResponse;
import javax.portlet.filter.ActionFilter;
import javax.portlet.filter.EventFilter;
import javax.portlet.filter.FilterChain;
import javax.portlet.filter.FilterConfig;
import javax.portlet.filter.RenderFilter;
import javax.portlet.filter.ResourceFilter;
import org.exoplatform.container.PortalContainer;
/**
* @author <a href="hoang281283@gmail.com">Minh Hoang TO</a>
* @date 4/5/11
*/
public class ApplicationMonitoringFilter implements ActionFilter, RenderFilter, EventFilter, ResourceFilter {
public void init(FilterConfig cfg) throws PortletException {
}
public void destroy() {
}
public void doFilter(ActionRequest req, ActionResponse resp, FilterChain chain) throws IOException, PortletException {
ApplicationStatistic stat = get(req);
if (stat != null) {
long t = -System.currentTimeMillis();
chain.doFilter(req, resp);
t += System.currentTimeMillis();
stat.logTime(t);
} else {
chain.doFilter(req, resp);
}
}
public void doFilter(EventRequest req, EventResponse resp, FilterChain chain) throws IOException, PortletException {
ApplicationStatistic stat = get(req);
if (stat != null) {
long t = -System.currentTimeMillis();
chain.doFilter(req, resp);
t += System.currentTimeMillis();
stat.logTime(t);
} else {
chain.doFilter(req, resp);
}
}
public void doFilter(RenderRequest req, RenderResponse resp, FilterChain chain) throws IOException, PortletException {
ApplicationStatistic stat = get(req);
if (stat != null) {
long t = -System.currentTimeMillis();
chain.doFilter(req, resp);
t += System.currentTimeMillis();
stat.logTime(t);
} else {
chain.doFilter(req, resp);
}
}
public void doFilter(ResourceRequest req, ResourceResponse resp, FilterChain chain) throws IOException, PortletException {
ApplicationStatistic stat = get(req);
if (stat != null) {
long t = -System.currentTimeMillis();
chain.doFilter(req, resp);
t += System.currentTimeMillis();
stat.logTime(t);
} else {
chain.doFilter(req, resp);
}
}
private ApplicationStatistic get(PortletRequest req) {
PortalContainer container = PortalContainer.getInstance();
ApplicationStatisticService service = (ApplicationStatisticService) container
.getComponentInstance(ApplicationStatisticService.class);
if (service != null) {
PortletConfig portletConfig = (PortletConfig) req.getAttribute("javax.portlet.config");
String portletName = portletConfig.getPortletName();
String phase = (String) req.getAttribute(PortletRequest.LIFECYCLE_PHASE);
String applicationId = portletName + "/" + phase;
return service.getApplicationStatistic(applicationId);
} else {
return null;
}
}
}