001
014
015 package com.liferay.portal.servlet.filters.monitoring;
016
017 import com.liferay.portal.kernel.messaging.DestinationNames;
018 import com.liferay.portal.kernel.messaging.MessageBusUtil;
019 import com.liferay.portal.kernel.monitoring.RequestStatus;
020 import com.liferay.portal.kernel.monitoring.statistics.DataSampleThreadLocal;
021 import com.liferay.portal.kernel.util.GetterUtil;
022 import com.liferay.portal.monitoring.statistics.portal.PortalRequestDataSample;
023 import com.liferay.portal.monitoring.statistics.service.ServiceMonitorAdvice;
024 import com.liferay.portal.servlet.filters.BasePortalFilter;
025 import com.liferay.portal.util.PortalUtil;
026 import com.liferay.portal.util.PropsValues;
027 import com.liferay.portlet.MonitoringPortlet;
028
029 import java.io.IOException;
030
031 import javax.servlet.FilterChain;
032 import javax.servlet.ServletException;
033 import javax.servlet.http.HttpServletRequest;
034 import javax.servlet.http.HttpServletResponse;
035
036
040 public class MonitoringFilter extends BasePortalFilter {
041
042 public static boolean isMonitoringPortalRequest() {
043 return _monitoringPortalRequest;
044 }
045
046 public static void setMonitoringPortalRequest(
047 boolean monitoringPortalRequest) {
048
049 _monitoringPortalRequest = monitoringPortalRequest;
050 }
051
052 @Override
053 public boolean isFilterEnabled() {
054 if (!super.isFilterEnabled()) {
055 return false;
056 }
057
058 if (!_monitoringPortalRequest &&
059 !MonitoringPortlet.isMonitoringPortletActionRequest() &&
060 !MonitoringPortlet.isMonitoringPortletEventRequest() &&
061 !MonitoringPortlet.isMonitoringPortletRenderRequest() &&
062 !MonitoringPortlet.isMonitoringPortletResourceRequest() &&
063 !ServiceMonitorAdvice.isActive()) {
064
065 return false;
066 }
067
068 return true;
069 }
070
071 @Override
072 protected void processFilter(
073 HttpServletRequest request, HttpServletResponse response,
074 FilterChain filterChain)
075 throws IOException, ServletException {
076
077 long companyId = PortalUtil.getCompanyId(request);
078
079 PortalRequestDataSample portalRequestDataSample = null;
080
081 if (_monitoringPortalRequest) {
082 portalRequestDataSample = new PortalRequestDataSample(
083 companyId, request.getRemoteUser(), request.getRequestURI(),
084 GetterUtil.getString(request.getRequestURL()));
085 }
086
087 try {
088 if (portalRequestDataSample != null) {
089 portalRequestDataSample.prepare();
090 }
091
092 processFilter(
093 MonitoringFilter.class, request, response, filterChain);
094
095 if (portalRequestDataSample != null) {
096 portalRequestDataSample.capture(RequestStatus.SUCCESS);
097 }
098 }
099 catch (Exception e) {
100 if (portalRequestDataSample != null) {
101 portalRequestDataSample.capture(RequestStatus.ERROR);
102 }
103
104 if (e instanceof IOException) {
105 throw (IOException)e;
106 }
107 else if (e instanceof ServletException) {
108 throw (ServletException)e;
109 }
110 else {
111 throw new ServletException("Unable to execute request", e);
112 }
113 }
114 finally {
115 if (portalRequestDataSample != null) {
116 DataSampleThreadLocal.addDataSample(portalRequestDataSample);
117 }
118
119 MessageBusUtil.sendMessage(
120 DestinationNames.MONITORING,
121 DataSampleThreadLocal.getDataSamples());
122 }
123 }
124
125 private static boolean _monitoringPortalRequest =
126 PropsValues.MONITORING_PORTAL_REQUEST;
127
128 }