001    /**
002     * Copyright (c) 2000-2013 Liferay, Inc. All rights reserved.
003     *
004     * This library is free software; you can redistribute it and/or modify it under
005     * the terms of the GNU Lesser General Public License as published by the Free
006     * Software Foundation; either version 2.1 of the License, or (at your option)
007     * any later version.
008     *
009     * This library is distributed in the hope that it will be useful, but WITHOUT
010     * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
011     * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
012     * details.
013     */
014    
015    package com.liferay.portal.monitoring.statistics.portlet;
016    
017    import com.liferay.portal.kernel.monitoring.MonitoringException;
018    import com.liferay.portal.kernel.monitoring.RequestStatus;
019    import com.liferay.portal.kernel.monitoring.statistics.DataSampleProcessor;
020    import com.liferay.portal.kernel.monitoring.statistics.RequestStatistics;
021    
022    import java.util.HashMap;
023    import java.util.Map;
024    
025    /**
026     * @author Karthik Sudarshan
027     * @author Michael C. Han
028     * @author Brian Wing Shun Chan
029     */
030    public class PortletStatistics
031            implements DataSampleProcessor<PortletRequestDataSample> {
032    
033            public PortletStatistics(
034                    String portletId, String portletName, String displayName) {
035    
036                    _portletId = portletId;
037                    _portletName = portletName;
038                    _displayName = displayName;
039                    _actionRequestStatistics = new RequestStatistics(portletId);
040                    _eventRequestStatistics = new RequestStatistics(portletId);
041                    _renderRequestStatistics = new RequestStatistics(portletId);
042                    _resourceRequestStatistics = new RequestStatistics(portletId);
043    
044                    _requestStatistics.put(
045                            PortletRequestType.ACTION, _actionRequestStatistics);
046                    _requestStatistics.put(
047                            PortletRequestType.EVENT, _eventRequestStatistics);
048                    _requestStatistics.put(
049                            PortletRequestType.RENDER, _renderRequestStatistics);
050                    _requestStatistics.put(
051                            PortletRequestType.RESOURCE, _resourceRequestStatistics);
052            }
053    
054            public RequestStatistics getActionRequestStatistics() {
055                    return _actionRequestStatistics;
056            }
057    
058            public String getDisplayName() {
059                    return _displayName;
060            }
061    
062            public RequestStatistics getEventRequestStatistics() {
063                    return _eventRequestStatistics;
064            }
065    
066            public String getPortletId() {
067                    return _portletId;
068            }
069    
070            public String getPortletName() {
071                    return _portletName;
072            }
073    
074            public RequestStatistics getRenderRequestStatistics() {
075                    return _renderRequestStatistics;
076            }
077    
078            public RequestStatistics getResourceRequestStatistics() {
079                    return _resourceRequestStatistics;
080            }
081    
082            @Override
083            public void processDataSample(
084                            PortletRequestDataSample portletRequestDataSample)
085                    throws MonitoringException {
086    
087                    if (!portletRequestDataSample.getPortletId().equals(_portletId)) {
088                            return;
089                    }
090    
091                    PortletRequestType portletRequestType =
092                            portletRequestDataSample.getRequestType();
093    
094                    RequestStatistics requestStatistics =_requestStatistics.get(
095                            portletRequestType);
096    
097                    if (requestStatistics == null) {
098                            throw new MonitoringException(
099                                    "No statistics found for " + portletRequestDataSample);
100                    }
101    
102                    RequestStatus requestStatus =
103                            portletRequestDataSample.getRequestStatus();
104    
105                    if (requestStatus.equals(RequestStatus.ERROR)) {
106                            requestStatistics.incrementError();
107                    }
108                    else if (requestStatus.equals(RequestStatus.SUCCESS)) {
109                            requestStatistics.incrementSuccessDuration(
110                                    portletRequestDataSample.getDuration());
111                    }
112                    else if (requestStatus.equals(RequestStatus.TIMEOUT)) {
113                            requestStatistics.incrementTimeout();
114                    }
115            }
116    
117            public void reset() {
118                    _actionRequestStatistics.reset();
119                    _eventRequestStatistics.reset();
120                    _renderRequestStatistics.reset();
121                    _resourceRequestStatistics.reset();
122            }
123    
124            private RequestStatistics _actionRequestStatistics;
125            private String _displayName;
126            private RequestStatistics _eventRequestStatistics;
127            private String _portletId;
128            private String _portletName;
129            private RequestStatistics _renderRequestStatistics;
130            private Map<PortletRequestType, RequestStatistics> _requestStatistics =
131                    new HashMap<PortletRequestType, RequestStatistics>();
132            private RequestStatistics _resourceRequestStatistics;
133    
134    }