1   /**
2    * Copyright (c) 2000-2010 Liferay, Inc. All rights reserved.
3    *
4    * This library is free software; you can redistribute it and/or modify it under
5    * the terms of the GNU Lesser General Public License as published by the Free
6    * Software Foundation; either version 2.1 of the License, or (at your option)
7    * any later version.
8    *
9    * This library is distributed in the hope that it will be useful, but WITHOUT
10   * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
11   * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
12   * details.
13   */
14  
15  package com.liferay.portal.monitoring.statistics.portlet;
16  
17  import com.liferay.portal.monitoring.MonitoringException;
18  import com.liferay.portal.monitoring.RequestStatus;
19  import com.liferay.portal.monitoring.statistics.DataSampleProcessor;
20  import com.liferay.portal.monitoring.statistics.RequestStatistics;
21  
22  import java.util.HashMap;
23  import java.util.Map;
24  
25  /**
26   * <a href="PortletStatistics.java.html"><b><i>View Source</i></b></a>
27   *
28   * @author Karthik Sudarshan
29   * @author Michael C. Han
30   * @author Brian Wing Shun Chan
31   */
32  public class PortletStatistics
33      implements DataSampleProcessor<PortletRequestDataSample> {
34  
35      public PortletStatistics(
36          String portletId, String portletName, String displayName) {
37  
38          _portletId = portletId;
39          _portletName = portletName;
40          _displayName = displayName;
41          _actionRequestStatistics = new RequestStatistics(portletId);
42          _eventRequestStatistics = new RequestStatistics(portletId);
43          _renderRequestStatistics = new RequestStatistics(portletId);
44          _resourceRequestStatistics = new RequestStatistics(portletId);
45  
46          _requestStatistics.put(
47              PortletRequestType.ACTION, _actionRequestStatistics);
48          _requestStatistics.put(
49              PortletRequestType.EVENT, _eventRequestStatistics);
50          _requestStatistics.put(
51              PortletRequestType.RENDER, _renderRequestStatistics);
52          _requestStatistics.put(
53              PortletRequestType.RESOURCE, _resourceRequestStatistics);
54      }
55  
56      public RequestStatistics getActionRequestStatistics() {
57          return _actionRequestStatistics;
58      }
59  
60      public String getDisplayName() {
61          return _displayName;
62      }
63  
64      public RequestStatistics getEventRequestStatistics() {
65          return _eventRequestStatistics;
66      }
67  
68      public String getPortletId() {
69          return _portletId;
70      }
71  
72      public String getPortletName() {
73          return _portletName;
74      }
75  
76      public RequestStatistics getRenderRequestStatistics() {
77          return _renderRequestStatistics;
78      }
79  
80      public RequestStatistics getResourceRequestStatistics() {
81          return _resourceRequestStatistics;
82      }
83  
84      public void processDataSample(
85              PortletRequestDataSample portletRequestDataSample)
86          throws MonitoringException {
87  
88          if (!portletRequestDataSample.getPortletId().equals(_portletId)) {
89              return;
90          }
91  
92          PortletRequestType portletRequestType =
93              portletRequestDataSample.getRequestType();
94  
95          RequestStatistics requestStatistics =_requestStatistics.get(
96              portletRequestType);
97  
98          if (requestStatistics == null) {
99              throw new MonitoringException(
100                 "No statistics found for " + portletRequestDataSample);
101         }
102 
103         RequestStatus requestStatus =
104             portletRequestDataSample.getRequestStatus();
105 
106         if (requestStatus.equals(RequestStatus.ERROR)) {
107             requestStatistics.incrementError();
108         }
109         else if (requestStatus.equals(RequestStatus.SUCCESS)) {
110             requestStatistics.incrementSuccessDuration(
111                 portletRequestDataSample.getDuration());
112         }
113         else if (requestStatus.equals(RequestStatus.TIMEOUT)) {
114             requestStatistics.incrementTimeout();
115         }
116     }
117 
118     public void reset() {
119         _actionRequestStatistics.reset();
120         _eventRequestStatistics.reset();
121         _renderRequestStatistics.reset();
122         _resourceRequestStatistics.reset();
123     }
124 
125     private RequestStatistics _actionRequestStatistics;
126     private String _displayName;
127     private RequestStatistics _eventRequestStatistics;
128     private String _portletId;
129     private String _portletName;
130     private RequestStatistics _renderRequestStatistics;
131     private Map<PortletRequestType, RequestStatistics> _requestStatistics =
132         new HashMap<PortletRequestType, RequestStatistics>();
133     private RequestStatistics _resourceRequestStatistics;
134 
135 }