You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by re...@apache.org on 2007/04/25 21:56:26 UTC
svn commit: r532461 - in
/tomcat/tc6.0.x/trunk/java/org/apache/catalina/manager:
HTMLManagerServlet.java LocalStrings.properties LocalStrings_de.properties
ManagerServlet.java
Author: remm
Date: Wed Apr 25 12:56:25 2007
New Revision: 532461
URL: http://svn.apache.org/viewvc?view=rev&rev=532461
Log:
- Session expiration and statistics tools.
- Submitted by Rainer Jung.
Modified:
tomcat/tc6.0.x/trunk/java/org/apache/catalina/manager/HTMLManagerServlet.java
tomcat/tc6.0.x/trunk/java/org/apache/catalina/manager/LocalStrings.properties
tomcat/tc6.0.x/trunk/java/org/apache/catalina/manager/LocalStrings_de.properties
tomcat/tc6.0.x/trunk/java/org/apache/catalina/manager/ManagerServlet.java
Modified: tomcat/tc6.0.x/trunk/java/org/apache/catalina/manager/HTMLManagerServlet.java
URL: http://svn.apache.org/viewvc/tomcat/tc6.0.x/trunk/java/org/apache/catalina/manager/HTMLManagerServlet.java?view=diff&rev=532461&r1=532460&r2=532461
==============================================================================
--- tomcat/tc6.0.x/trunk/java/org/apache/catalina/manager/HTMLManagerServlet.java (original)
+++ tomcat/tc6.0.x/trunk/java/org/apache/catalina/manager/HTMLManagerServlet.java Wed Apr 25 12:56:25 2007
@@ -113,8 +113,9 @@
message = reload(path);
} else if (command.equals("/undeploy")) {
message = undeploy(path);
+ } else if (command.equals("/expire")) {
+ message = expireSessions(path, request);
} else if (command.equals("/sessions")) {
- //message = sessions(path);
try {
doSessions(path, request, response);
return;
@@ -353,6 +354,7 @@
String appsStop = sm.getString("htmlManagerServlet.appsStop");
String appsReload = sm.getString("htmlManagerServlet.appsReload");
String appsUndeploy = sm.getString("htmlManagerServlet.appsUndeploy");
+ String appsExpire = sm.getString("htmlManagerServlet.appsExpire");
Iterator iterator = sortedContextPathsMap.entrySet().iterator();
boolean isHighlighted = true;
@@ -406,7 +408,7 @@
writer.print
(MessageFormat.format(APPS_ROW_DETAILS_SECTION, args));
- args = new Object[9];
+ args = new Object[14];
args[0] = response.encodeURL
(request.getContextPath() +
"/html/start?path=" + displayPath);
@@ -424,7 +426,15 @@
"/html/undeploy?path=" + displayPath);
args[7] = appsUndeploy;
- args[8] = highlightColor;
+ args[8] = response.encodeURL
+ (request.getContextPath() +
+ "/html/expire?path=" + displayPath);
+ args[9] = appsExpire;
+ args[10] = sm.getString("htmlManagerServlet.expire.explain");
+ args[11] = new Integer(context.getManager().getMaxInactiveInterval()/60);
+ args[12] = sm.getString("htmlManagerServlet.expire.unit");
+
+ args[13] = highlightColor;
if (context.getPath().equals(this.context.getPath())) {
writer.print(MessageFormat.format(
@@ -533,22 +543,36 @@
/**
* Display session information and invoke list.
*
- * @see ManagerServlet#sessions(PrintWriter, String)
+ * @see ManagerServlet#sessions(PrintWriter, String, int)
*
* @param path Context path of the application to list session information
+ * @param idle Expire all sessions with idle time ≥ idle for this context
* @return message String
*/
- public String sessions(String path) {
+ public String sessions(String path, int idle) {
StringWriter stringWriter = new StringWriter();
PrintWriter printWriter = new PrintWriter(stringWriter);
- super.sessions(printWriter, path);
+ super.sessions(printWriter, path, idle);
return stringWriter.toString();
}
/**
+ * Display session information and invoke list.
+ *
+ * @see ManagerServlet#sessions(PrintWriter, String)
+ *
+ * @param path Context path of the application to list session information
+ * @return message String
+ */
+ public String sessions(String path) {
+
+ return sessions(path, -1);
+ }
+
+ /**
* Start the web application at the specified context path.
*
* @see ManagerServlet#start(PrintWriter, String)
@@ -601,6 +625,26 @@
// ------------------------------------------------ Sessions administration
/**
+ *
+ * Extract the expiration request parameter
+ *
+ * @param path
+ * @param req
+ */
+ protected String expireSessions(String path, HttpServletRequest req) {
+ int idle = -1;
+ String idleParam = req.getParameter("idle");
+ if (idleParam != null) {
+ try {
+ idle = Integer.parseInt(idleParam);
+ } catch (NumberFormatException e) {
+ log("Could not parse idle parameter to an int: " + idleParam);
+ }
+ }
+ return sessions(path, idle);
+ }
+
+ /**
*
* @param req
* @param resp
@@ -903,18 +947,20 @@
" <td class=\"header-left\"><small>{2}</small></td>\n" +
" <td class=\"header-center\"><small>{3}</small></td>\n" +
" <td class=\"header-center\"><small>{4}</small></td>\n" +
- " <td class=\"header-center\"><small>{5}</small></td>\n" +
+ " <td class=\"header-left\"><small>{5}</small></td>\n" +
"</tr>\n";
private static final String APPS_ROW_DETAILS_SECTION =
"<tr>\n" +
- " <td class=\"row-left\" bgcolor=\"{5}\"><small><a href=\"{0}\">{0}</a></small></td>\n" +
- " <td class=\"row-left\" bgcolor=\"{5}\"><small>{1}</small></td>\n" +
- " <td class=\"row-center\" bgcolor=\"{5}\"><small>{2}</small></td>\n" +
- " <td class=\"row-center\" bgcolor=\"{5}\"><small><a href=\"{3}\" target=\"_new\">{4}</a></small></td>\n";
+ " <td class=\"row-left\" bgcolor=\"{5}\" rowspan=\"2\"><small><a href=\"{0}\">{0}</a>" +
+ "</small></td>\n" +
+ " <td class=\"row-left\" bgcolor=\"{5}\" rowspan=\"2\"><small>{1}</small></td>\n" +
+ " <td class=\"row-center\" bgcolor=\"{5}\" rowspan=\"2\"><small>{2}</small></td>\n" +
+ " <td class=\"row-center\" bgcolor=\"{5}\" rowspan=\"2\">" +
+ "<small><a href=\"{3}\" target=\"_new\">{4}</a></small></td>\n";
private static final String MANAGER_APP_ROW_BUTTON_SECTION =
- " <td class=\"row-left\" bgcolor=\"{8}\">\n" +
+ " <td class=\"row-left\" bgcolor=\"{13}\">\n" +
" <small>\n" +
" {1} \n" +
" {3} \n" +
@@ -922,10 +968,18 @@
" {7} \n" +
" </small>\n" +
" </td>\n" +
+ "</tr><tr>\n" +
+ " <td class=\"row-left\" bgcolor=\"{13}\">\n" +
+ " <form method=\"POST\" action=\"{8}\">\n" +
+ " <small>\n" +
+ " <input type=\"submit\" value=\"{9}\"> {10} <input type=\"text\" name=\"expire\" size=\"5\" value=\"{11}\"> {12} \n" +
+ " </small>\n" +
+ " </form>\n" +
+ " </td>\n" +
"</tr>\n";
private static final String STARTED_DEPLOYED_APPS_ROW_BUTTON_SECTION =
- " <td class=\"row-left\" bgcolor=\"{8}\">\n" +
+ " <td class=\"row-left\" bgcolor=\"{13}\">\n" +
" <small>\n" +
" {1} \n" +
" <a href=\"{2}\" onclick=\"return(confirm('''Are you sure?'''))\">{3}</a> \n" +
@@ -933,10 +987,18 @@
" <a href=\"{6}\" onclick=\"return(confirm('''Are you sure?'''))\">{7}</a> \n" +
" </small>\n" +
" </td>\n" +
+ " </tr><tr>\n" +
+ " <td class=\"row-left\" bgcolor=\"{13}\">\n" +
+ " <form method=\"POST\" action=\"{8}\">\n" +
+ " <small>\n" +
+ " <input type=\"submit\" value=\"{9}\"> {10} <input type=\"text\" name=\"expire\" size=\"5\" value=\"{11}\"> {12} \n" +
+ " </small>\n" +
+ " </form>\n" +
+ " </td>\n" +
"</tr>\n";
private static final String STOPPED_DEPLOYED_APPS_ROW_BUTTON_SECTION =
- " <td class=\"row-left\" bgcolor=\"{8}\">\n" +
+ " <td class=\"row-left\" bgcolor=\"{13}\" rowspan=\"2\">\n" +
" <small>\n" +
" <a href=\"{0}\" onclick=\"return(confirm('''Are you sure?'''))\">{1}</a> \n" +
" {3} \n" +
@@ -947,7 +1009,7 @@
"</tr>\n";
private static final String STARTED_NONDEPLOYED_APPS_ROW_BUTTON_SECTION =
- " <td class=\"row-left\" bgcolor=\"{8}\">\n" +
+ " <td class=\"row-left\" bgcolor=\"{13}\" rowspan=\"2\">\n" +
" <small>\n" +
" {1} \n" +
" <a href=\"{2}\" onclick=\"return(confirm('''Are you sure?'''))\">{3}</a> \n" +
@@ -958,7 +1020,7 @@
"</tr>\n";
private static final String STOPPED_NONDEPLOYED_APPS_ROW_BUTTON_SECTION =
- " <td class=\"row-left\" bgcolor=\"{8}\">\n" +
+ " <td class=\"row-left\" bgcolor=\"{13}\" rowspan=\"2\">\n" +
" <small>\n" +
" <a href=\"{0}\" onclick=\"return(confirm('''Are you sure?'''))\">{1}</a> \n" +
" {3} \n" +
Modified: tomcat/tc6.0.x/trunk/java/org/apache/catalina/manager/LocalStrings.properties
URL: http://svn.apache.org/viewvc/tomcat/tc6.0.x/trunk/java/org/apache/catalina/manager/LocalStrings.properties?view=diff&rev=532461&r1=532460&r2=532461
==============================================================================
--- tomcat/tc6.0.x/trunk/java/org/apache/catalina/manager/LocalStrings.properties (original)
+++ tomcat/tc6.0.x/trunk/java/org/apache/catalina/manager/LocalStrings.properties Wed Apr 25 12:56:25 2007
@@ -3,11 +3,14 @@
htmlManagerServlet.appsPath=Path
htmlManagerServlet.appsReload=Reload
htmlManagerServlet.appsUndeploy=Undeploy
+htmlManagerServlet.appsExpire=Expire sessions
htmlManagerServlet.appsSessions=Sessions
htmlManagerServlet.appsStart=Start
htmlManagerServlet.appsStop=Stop
htmlManagerServlet.appsTasks=Commands
htmlManagerServlet.appsTitle=Applications
+htmlManagerServlet.expire.explain=with idle ≥
+htmlManagerServlet.expire.unit=minutes
htmlManagerServlet.helpHtmlManager=HTML Manager Help
htmlManagerServlet.helpHtmlManagerFile=../docs/html-manager-howto.html
htmlManagerServlet.helpManager=Manager Help
Modified: tomcat/tc6.0.x/trunk/java/org/apache/catalina/manager/LocalStrings_de.properties
URL: http://svn.apache.org/viewvc/tomcat/tc6.0.x/trunk/java/org/apache/catalina/manager/LocalStrings_de.properties?view=diff&rev=532461&r1=532460&r2=532461
==============================================================================
--- tomcat/tc6.0.x/trunk/java/org/apache/catalina/manager/LocalStrings_de.properties (original)
+++ tomcat/tc6.0.x/trunk/java/org/apache/catalina/manager/LocalStrings_de.properties Wed Apr 25 12:56:25 2007
@@ -3,11 +3,14 @@
htmlManagerServlet.appsPath=Kontext Pfad
htmlManagerServlet.appsReload=Neu laden
htmlManagerServlet.appsUndeploy=Entfernen
+htmlManagerServlet.appsExpire=Lösche Sitzungen
htmlManagerServlet.appsSessions=Sitzungen
htmlManagerServlet.appsStart=Start
htmlManagerServlet.appsStop=Stop
htmlManagerServlet.appsTasks=Kommandos
htmlManagerServlet.appsTitle=Anwendungen
+htmlManagerServlet.expire.explain=mit Inaktivität ≥
+htmlManagerServlet.expire.unit=Minuten
htmlManagerServlet.helpHtmlManager=Hilfeseite HTML Manager (englisch)
htmlManagerServlet.helpHtmlManagerFile=html-manager-howto.html
htmlManagerServlet.helpManager=Hilfeseite Manager (englisch)
Modified: tomcat/tc6.0.x/trunk/java/org/apache/catalina/manager/ManagerServlet.java
URL: http://svn.apache.org/viewvc/tomcat/tc6.0.x/trunk/java/org/apache/catalina/manager/ManagerServlet.java?view=diff&rev=532461&r1=532460&r2=532461
==============================================================================
--- tomcat/tc6.0.x/trunk/java/org/apache/catalina/manager/ManagerServlet.java (original)
+++ tomcat/tc6.0.x/trunk/java/org/apache/catalina/manager/ManagerServlet.java Wed Apr 25 12:56:25 2007
@@ -100,9 +100,12 @@
* descriptions from the user database connected to the <code>users</code>
* resource reference.
* <li><b>/serverinfo</b> - Display system OS and JVM properties.
- * <li><b>/sessions?path=/xxx</b> - List session information about the web
- * application attached to context path <code>/xxx</code> for this
+ * <li><b>/expire?path=/xxx</b> - List session idle timeinformation about the
+ * web application attached to context path <code>/xxx</code> for this
* virtual host.</li>
+ * <li><b>/expire?path=/xxx&idle=mm</b> - Expire sessions
+ * for the context path <code>/xxx</code> which were idle for at
+ * least mm minutes.</li>
* <li><b>/start?path=/xxx</b> - Start the web application attached to
* context path <code>/xxx</code> for this virtual host.</li>
* <li><b>/stop?path=/xxx</b> - Stop the web application attached to
@@ -364,8 +367,8 @@
save(writer, path);
} else if (command.equals("/serverinfo")) {
serverinfo(writer);
- } else if (command.equals("/sessions")) {
- sessions(writer, path);
+ } else if (command.equals("/expire")) {
+ expireSessions(writer, path, request);
} else if (command.equals("/start")) {
start(writer, path);
} else if (command.equals("/stop")) {
@@ -1082,16 +1085,20 @@
/**
* Session information for the web application at the specified context path.
- * Displays a profile of session MaxInactiveInterval timeouts listing number
- * of sessions for each 10 minute timeout interval up to 10 hours.
+ * Displays a profile of session lastAccessedTime listing number
+ * of sessions for each 10 minute interval up to 10 hours.
*
* @param writer Writer to render to
* @param path Context path of the application to list session information for
+ * @param idle Expire all sessions with idle time ≥ idle for this context
*/
- protected void sessions(PrintWriter writer, String path) {
+ protected void sessions(PrintWriter writer, String path, int idle) {
- if (debug >= 1)
+ if (debug >= 1) {
log("sessions: Session information for web application at '" + path + "'");
+ if (idle >= 0)
+ log("sessions: Session expiration for " + idle + " minutes '" + path + "'");
+ }
if ((path == null) || (!path.startsWith("/") && path.equals(""))) {
writer.println(sm.getString("managerServlet.invalidPath",
@@ -1108,37 +1115,56 @@
RequestUtil.filter(displayPath)));
return;
}
+ int maxCount = 60;
+ int maxInactiveInterval = context.getManager().getMaxInactiveInterval()/60;
+ int histoInterval = maxInactiveInterval / maxCount;
+ if ( histoInterval * maxCount < maxInactiveInterval )
+ histoInterval++;
+ maxCount = maxInactiveInterval / histoInterval;
+ if ( histoInterval * maxCount < maxInactiveInterval )
+ maxCount++;
+
writer.println(sm.getString("managerServlet.sessions", displayPath));
writer.println(sm.getString("managerServlet.sessiondefaultmax",
- "" + context.getManager().getMaxInactiveInterval()/60));
+ "" + maxInactiveInterval));
Session [] sessions = context.getManager().findSessions();
- int [] timeout = new int[60];
+ int [] timeout = new int[maxCount];
int notimeout = 0;
+ int expired = 0;
+ long now = System.currentTimeMillis();
for (int i = 0; i < sessions.length; i++) {
- int time = sessions[i].getMaxInactiveInterval()/(10*60);
+ int time = (int)((now-sessions[i].getLastAccessedTime())/1000);
+ if (idle >= 0 && time >= idle*60) {
+ sessions[i].expire();
+ idle++;
+ }
+ time=time/60/histoInterval;
if (time < 0)
notimeout++;
- else if (time >= timeout.length)
- timeout[timeout.length-1]++;
+ else if (time >= maxCount)
+ timeout[maxCount-1]++;
else
timeout[time]++;
}
if (timeout[0] > 0)
writer.println(sm.getString("managerServlet.sessiontimeout",
- "<10", "" + timeout[0]));
- for (int i = 1; i < timeout.length-1; i++) {
+ "<" + histoInterval, "" + timeout[0]));
+ for (int i = 1; i < maxCount-1; i++) {
if (timeout[i] > 0)
writer.println(sm.getString("managerServlet.sessiontimeout",
- "" + (i)*10 + " - <" + (i+1)*10,
+ "" + (i)*histoInterval + " - <" + (i+1)*histoInterval,
"" + timeout[i]));
}
- if (timeout[timeout.length-1] > 0)
+ if (timeout[maxCount-1] > 0)
writer.println(sm.getString("managerServlet.sessiontimeout",
- ">=" + timeout.length*10,
- "" + timeout[timeout.length-1]));
+ ">=" + maxCount*histoInterval,
+ "" + timeout[maxCount-1]));
if (notimeout > 0)
writer.println(sm.getString("managerServlet.sessiontimeout",
"unlimited","" + notimeout));
+ if (idle >= 0)
+ writer.println(sm.getString("managerServlet.sessiontimeout",
+ "" + idle,"expired " + expired));
} catch (Throwable t) {
log("ManagerServlet.sessions[" + displayPath + "]", t);
writer.println(sm.getString("managerServlet.exception",
@@ -1147,6 +1173,39 @@
}
+
+ /**
+ * Session information for the web application at the specified context path.
+ * Displays a profile of session lastAccessedTime listing number
+ * of sessions for each 10 minute interval up to 10 hours.
+ *
+ * @param writer Writer to render to
+ * @param path Context path of the application to list session information for
+ */
+ protected void sessions(PrintWriter writer, String path) {
+ sessions(writer, path, -1);
+ }
+
+
+ /**
+ *
+ * Extract the expiration request parameter
+ *
+ * @param path
+ * @param req
+ */
+ protected void expireSessions(PrintWriter writer, String path, HttpServletRequest req) {
+ int idle = -1;
+ String idleParam = req.getParameter("idle");
+ if (idleParam != null) {
+ try {
+ idle = Integer.parseInt(idleParam);
+ } catch (NumberFormatException e) {
+ log("Could not parse idle parameter to an int: " + idleParam);
+ }
+ }
+ sessions(writer, path, idle);
+ }
/**
* Start the web application at the specified context path.
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org