001 /**
002 * Licensed to the Apache Software Foundation (ASF) under one or more
003 * contributor license agreements. See the NOTICE file distributed with
004 * this work for additional information regarding copyright ownership.
005 * The ASF licenses this file to You under the Apache License, Version 2.0
006 * (the "License"); you may not use this file except in compliance with
007 * the License. You may obtain a copy of the License at
008 *
009 * http://www.apache.org/licenses/LICENSE-2.0
010 *
011 * Unless required by applicable law or agreed to in writing, software
012 * distributed under the License is distributed on an "AS IS" BASIS,
013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014 * See the License for the specific language governing permissions and
015 * limitations under the License.
016 */
017
018 package org.apache.geronimo.console.webmanager;
019
020 import org.apache.geronimo.console.BasePortlet;
021 import org.apache.geronimo.console.util.PortletManager;
022 import org.apache.geronimo.management.geronimo.WebContainer;
023 import org.apache.geronimo.management.geronimo.WebManager;
024 import org.apache.geronimo.management.geronimo.stats.WebContainerStats;
025 import org.apache.geronimo.management.StatisticsProvider;
026 import org.apache.commons.logging.Log;
027 import org.apache.commons.logging.LogFactory;
028
029 import javax.portlet.ActionRequest;
030 import javax.portlet.ActionResponse;
031 import javax.portlet.PortletConfig;
032 import javax.portlet.PortletException;
033 import javax.portlet.PortletRequestDispatcher;
034 import javax.portlet.RenderRequest;
035 import javax.portlet.RenderResponse;
036 import javax.portlet.WindowState;
037 import java.io.IOException;
038
039 /**
040 * Basic portlet showing statistics for a web container
041 *
042 * @version $Rev: 476321 $ $Date: 2006-11-17 16:18:49 -0500 (Fri, 17 Nov 2006) $
043 */
044 public class WebManagerPortlet extends BasePortlet {
045 private final static Log log = LogFactory.getLog(WebManagerPortlet.class);
046
047 private PortletRequestDispatcher normalView;
048
049 private PortletRequestDispatcher maximizedView;
050
051 private PortletRequestDispatcher helpView;
052
053 public void processAction(ActionRequest actionRequest,
054 ActionResponse actionResponse) throws PortletException, IOException {
055 try {
056 WebManager[] managers = PortletManager.getCurrentServer(actionRequest).getWebManagers();
057 if (managers != null) {
058 WebManager manager = managers[0]; //todo: handle multiple
059 WebContainer[] containers = (WebContainer[]) manager.getContainers();
060 if (containers != null) {
061 WebContainer container = containers[0]; //todo: handle multiple
062 String server = getWebServerType(container.getClass());
063 String action = actionRequest.getParameter("stats");
064 if (action != null) {
065 boolean stats = action.equals("true");
066 if(server.equals(WEB_SERVER_JETTY)) {
067 setProperty(container, "collectStatistics", stats ? Boolean.TRUE : Boolean.FALSE);
068 }
069 else if (server.equals(WEB_SERVER_TOMCAT)) {
070 //todo: Any Tomcat specific processing?
071 }
072 else {
073 log.error("Unrecognized Web Container");
074 }
075 }
076 if (actionRequest.getParameter("resetStats") != null) {
077 if(server.equals(WEB_SERVER_JETTY)) {
078 callOperation(container, "resetStatistics", null);
079 }
080 else if (server.equals(WEB_SERVER_TOMCAT)) {
081 //todo: Any Tomcat specific processing?
082 }
083 else {
084 log.error("Unrecognized Web Container");
085 }
086 }
087 }
088 else {
089 log.error("Error attempting to retrieve the web containers");
090 }
091 }
092 else {
093 log.error("Error attempting to retrieve the web managers");
094 }
095 } catch (Exception e) {
096 throw new PortletException(e);
097 }
098 }
099
100 protected void doView(RenderRequest renderRequest,
101 RenderResponse renderResponse) throws IOException, PortletException {
102 if (WindowState.MINIMIZED.equals(renderRequest.getWindowState())) {
103 return;
104 }
105 try {
106 WebManager[] managers = PortletManager.getCurrentServer(renderRequest).getWebManagers();
107 if (managers != null) {
108 WebManager manager = managers[0]; //todo: handle multiple
109 WebContainer[] containers = (WebContainer[]) manager.getContainers();
110 if (containers != null) {
111 WebContainer container = containers[0]; //todo: handle multiple
112 if(container.isStatisticsProvider()) {
113 WebContainerStats webStats = (WebContainerStats) ((StatisticsProvider)container).getStats();
114 if (webStats.isStatsOn()) {
115 renderRequest.setAttribute("statsOn", Boolean.TRUE);
116 renderRequest.setAttribute("totalRequestCount", new Long(webStats.getTotalRequestCount().getCount()));
117 renderRequest.setAttribute("totalConnectionCount", new Long(webStats.getTotalConnectionCount().getCount()));
118 renderRequest.setAttribute("totalErrorCount", new Long(webStats.getTotalErrorCount().getCount()));
119 renderRequest.setAttribute("activeRequestCountCurrent", new Long(webStats.getActiveRequestCount().getCurrent()));
120 renderRequest.setAttribute("activeRequestCountLow", new Long(webStats.getActiveRequestCount().getLowWaterMark()));
121 renderRequest.setAttribute("activeRequestCountHigh", new Long(webStats.getActiveRequestCount().getHighWaterMark()));
122 renderRequest.setAttribute("connectionRequestCountCurrent", new Long(webStats.getConnectionRequestCount().getCurrent()));
123 renderRequest.setAttribute("connectionRequestCountLow", new Long(webStats.getConnectionRequestCount().getLowWaterMark()));
124 renderRequest.setAttribute("connectionRequestCountHigh", new Long(webStats.getConnectionRequestCount().getHighWaterMark()));
125 // renderRequest.setAttribute("connectionRequestsAve", new Long(0)); /* Can't really compute this for a range ... do we still need it (from old portlet) */
126 renderRequest.setAttribute("openConnectionCountCurrent", new Long(webStats.getOpenConnectionCount().getCurrent()));
127 renderRequest.setAttribute("openConnectionCountLow", new Long(webStats.getOpenConnectionCount().getLowWaterMark()));
128 renderRequest.setAttribute("openConnectionCountHigh", new Long(webStats.getOpenConnectionCount().getHighWaterMark()));
129 renderRequest.setAttribute("requestDurationCount", new Long(webStats.getRequestDuration().getCount()));
130 renderRequest.setAttribute("requestDurationMinTime", new Long(webStats.getRequestDuration().getMinTime()));
131 renderRequest.setAttribute("requestDurationMaxTime", new Long(webStats.getRequestDuration().getMaxTime()));
132 renderRequest.setAttribute("requestDurationTotalTime", new Long(webStats.getRequestDuration().getTotalTime()));
133 // renderRequest.setAttribute("requestDurationAve", new Long(0)); /* Would this be valuable to calculate? We used to show this in the old jetty only portlet */
134 renderRequest.setAttribute("connectionDurationCount", new Long(webStats.getConnectionDuration().getCount()));
135 renderRequest.setAttribute("connectionDurationMinTime", new Long(webStats.getConnectionDuration().getMinTime()));
136 renderRequest.setAttribute("connectionDurationMaxTime", new Long(webStats.getConnectionDuration().getMaxTime()));
137 renderRequest.setAttribute("connectionDurationTotalTime", new Long(webStats.getConnectionDuration().getTotalTime()));
138 // renderRequest.setAttribute("connectionDurationAve", new Long(0)); /* Wouldl this be valueable to calculate? We used to show this in the old jetty only portlet */
139 } else {
140 renderRequest.setAttribute("statsSupported", Boolean.TRUE);
141 renderRequest.setAttribute("statsMessage", "Statistics are not currently being collected.");
142 }
143 } else {
144 renderRequest.setAttribute("statsSupported", Boolean.FALSE);
145 renderRequest.setAttribute("statsMessage", "Web statistics are not supported for the current web container.");
146 }
147 } else {
148 log.error("Error attempting to retrieve the web containers");
149 }
150 } else {
151 log.error("Error attempting to retrieve the web managers");
152 }
153 } catch (Exception e) {
154 throw new PortletException(e);
155 }
156 if (WindowState.NORMAL.equals(renderRequest.getWindowState())) {
157 normalView.include(renderRequest, renderResponse);
158 } else {
159 maximizedView.include(renderRequest, renderResponse);
160 }
161 }
162
163 protected void doHelp(RenderRequest renderRequest,
164 RenderResponse renderResponse) throws PortletException, IOException {
165 helpView.include(renderRequest, renderResponse);
166 }
167
168 public void init(PortletConfig portletConfig) throws PortletException {
169 super.init(portletConfig);
170
171 normalView = portletConfig.getPortletContext().getRequestDispatcher(
172 "/WEB-INF/view/webmanager/normal.jsp");
173 maximizedView = portletConfig.getPortletContext().getRequestDispatcher(
174 "/WEB-INF/view/webmanager/maximized.jsp");
175 helpView = portletConfig.getPortletContext().getRequestDispatcher(
176 "/WEB-INF/view/webmanager/help.jsp");
177 }
178
179 public void destroy() {
180 helpView = null;
181 normalView = null;
182 maximizedView = null;
183 super.destroy();
184 }
185
186 }