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 DataSampleThreadLocal.initialize();
087 }
088
089 try {
090 if (portalRequestDataSample != null) {
091 portalRequestDataSample.prepare();
092 }
093
094 processFilter(
095 MonitoringFilter.class, request, response, filterChain);
096
097 if (portalRequestDataSample != null) {
098 portalRequestDataSample.capture(RequestStatus.SUCCESS);
099 }
100 }
101 catch (Exception e) {
102 if (portalRequestDataSample != null) {
103 portalRequestDataSample.capture(RequestStatus.ERROR);
104 }
105
106 if (e instanceof IOException) {
107 throw (IOException)e;
108 }
109 else if (e instanceof ServletException) {
110 throw (ServletException)e;
111 }
112 else {
113 throw new ServletException("Unable to execute request", e);
114 }
115 }
116 finally {
117 if (portalRequestDataSample != null) {
118 DataSampleThreadLocal.addDataSample(portalRequestDataSample);
119 }
120
121 MessageBusUtil.sendMessage(
122 DestinationNames.MONITORING,
123 DataSampleThreadLocal.getDataSamples());
124 }
125 }
126
127 private static boolean _monitoringPortalRequest =
128 PropsValues.MONITORING_PORTAL_REQUEST;
129
130 }