You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by co...@apache.org on 2001/03/23 03:14:17 UTC

cvs commit: jakarta-tomcat/src/admin/contextAdmin sessionExpire.jsp sessionState.jsp ctxDetail.jsp

costin      01/03/22 18:14:17

  Modified:    src/admin/WEB-INF admin.tld
               src/admin/WEB-INF/classes/tadm TomcatAdmin.java
                        TomcatAdminTEI.java TomcatIterateTEI.java
               src/admin/contextAdmin ctxDetail.jsp
  Added:       src/admin/WEB-INF/classes/tadm ContextAdmin.java
                        ModuleAdmin.java ModuleAdminTEI.java
               src/admin/contextAdmin sessionExpire.jsp sessionState.jsp
  Log:
  Added 2 pages and a tag to display informations about sessions.
  
  This was done to debug one of the bugs and to better monitor
  what was happening. You can see all active sessions for a context
  and invalidate individual sessions.
  ( of course, this is just better than nothing, a bit of HTML-formating
  and more details would be even better )
  
  Revision  Changes    Path
  1.9       +58 -0     jakarta-tomcat/src/admin/WEB-INF/admin.tld
  
  Index: admin.tld
  ===================================================================
  RCS file: /home/cvs/jakarta-tomcat/src/admin/WEB-INF/admin.tld,v
  retrieving revision 1.8
  retrieving revision 1.9
  diff -u -r1.8 -r1.9
  --- admin.tld	2001/01/29 06:46:17	1.8
  +++ admin.tld	2001/03/23 02:14:16	1.9
  @@ -55,6 +55,64 @@
       </attribute>
     </tag>
   
  +  <tag>
  +    <name>contextAdmin</name>
  +    <tagclass>tadm.ContextAdmin</tagclass>
  +    <info>
  +       Will set the "ctx" variable based on the ctxPathParam parameter
  +       and perform context actions. ( will replace adm:admin which 
  +       also declares the vars - so can't have multiple instances ).
  +    </info>
  +    <attribute>
  +      <name>action</name>
  +      <required>false</required>
  +    </attribute>
  +    <attribute>
  +      <name>ctxPathParam</name>
  +      <required>false</required>
  +    </attribute>
  +    <attribute>
  +      <name>docBaseParam</name>
  +      <required>false</required>
  +    </attribute>
  +    <attribute>
  +      <name>docBase</name>
  +      <required>false</required>
  +    </attribute>
  +    <attribute>
  +      <name>ctxPath</name>
  +      <required>false</required>
  +      <rtexprvalue>true</rtexprvalue>
  +    </attribute>
  +    <attribute>
  +      <name>ctxHost</name>
  +      <required>false</required>
  +      <rtexprvalue>true</rtexprvalue>
  +    </attribute>
  +    <attribute>
  +      <name>value</name>
  +      <required>false</required>
  +    </attribute>
  +  </tag>
  +
  +  <tag>
  +    <name>moduleAdmin</name>
  +    <tagclass>tadm.ModuleAdmin</tagclass>
  +    <teiclass>tadm.ModuleAdminTEI</teiclass>
  +    <info>
  +      Will set the "module" variable and perform module actions.
  +    </info>
  +    <attribute>
  +      <name>type</name>
  +      <required>true</required>
  +    </attribute>
  +    <attribute>
  +      <name>var</name>
  +      <required>true</required>
  +    </attribute>
  +  </tag>
  +
  +
     <!-- this is a "generic" tag, should be moved in a separate tld -->  
     <tag>
       <name>iterate</name>
  
  
  
  1.12      +16 -15    jakarta-tomcat/src/admin/WEB-INF/classes/tadm/TomcatAdmin.java
  
  Index: TomcatAdmin.java
  ===================================================================
  RCS file: /home/cvs/jakarta-tomcat/src/admin/WEB-INF/classes/tadm/TomcatAdmin.java,v
  retrieving revision 1.11
  retrieving revision 1.12
  diff -u -r1.11 -r1.12
  --- TomcatAdmin.java	2001/03/02 05:26:01	1.11
  +++ TomcatAdmin.java	2001/03/23 02:14:16	1.12
  @@ -9,7 +9,7 @@
   import javax.servlet.jsp.tagext.*;
   import org.apache.tomcat.core.*;
   import org.apache.tomcat.util.log.*;
  -import org.apache.tomcat.util.qlog.*;
  +//import org.apache.tomcat.util.qlog.*;
   
   /**
    * A context administration class. Contexts can be
  @@ -54,6 +54,7 @@
   		    // XXX virtual host
   		    if( ctxPath.equals( ctx.getPath())) {
   			pageContext.setAttribute("ctx", ctx);
  +			System.out.println("Found " + ctx );
   			break;
   		    }
   		}
  @@ -133,21 +134,21 @@
       private void setLogFile( Context ctx, String dest )
   	throws TomcatException
       {
  -	try {
  -	    QueueLogger logger=new QueueLogger();
  -	    System.out.println("Setting logger " + dest );
  -	    logger.setPath( dest );
  -	    logger.open();
  -	    LogManager logManager=(LogManager)ctx.getContextManager().
  -		getNote("tc.LogManager");
  +// 	try {
  +// 	    QueueLogger logger=new QueueLogger();
  +// 	    System.out.println("Setting logger " + dest );
  +// 	    logger.setPath( dest );
  +// 	    logger.open();
  +// 	    LogManager logManager=(LogManager)ctx.getContextManager().
  +// 		getNote("tc.LogManager");
   	    
  -	    logManager.addChannel("temp.log", logger );
  -	    Log log=Log.getLog( "temp.log", ctx );
  -	    ctx.setLog( log );
  -	    ctx.setServletLog( log );
  -	} catch( Exception ex ) {
  -	    ex.printStackTrace();
  -	}
  +// 	    logManager.addChannel("temp.log", logger );
  +// 	    Log log=Log.getLog( "temp.log", ctx );
  +// 	    ctx.setLog( log );
  +// 	    ctx.setServletLog( log );
  +// 	} catch( Exception ex ) {
  +// 	    ex.printStackTrace();
  +// 	}
       }
   
       private void addContext( ContextManager cm, String host, String path,
  
  
  
  1.5       +3 -0      jakarta-tomcat/src/admin/WEB-INF/classes/tadm/TomcatAdminTEI.java
  
  Index: TomcatAdminTEI.java
  ===================================================================
  RCS file: /home/cvs/jakarta-tomcat/src/admin/WEB-INF/classes/tadm/TomcatAdminTEI.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- TomcatAdminTEI.java	2000/12/31 15:39:15	1.4
  +++ TomcatAdminTEI.java	2001/03/23 02:14:16	1.5
  @@ -23,6 +23,9 @@
   	    new VariableInfo("cm", "org.apache.tomcat.core.ContextManager",
   			     true,  VariableInfo.AT_BEGIN),
   	    new VariableInfo("ctx", "org.apache.tomcat.core.Context",
  +			     true,  VariableInfo.AT_BEGIN),
  +	    new VariableInfo("module",
  +			     "org.apache.tomcat.core.BaseInterceptor",
   			     true,  VariableInfo.AT_BEGIN)
   	});
   
  
  
  
  1.5       +0 -3      jakarta-tomcat/src/admin/WEB-INF/classes/tadm/TomcatIterateTEI.java
  
  Index: TomcatIterateTEI.java
  ===================================================================
  RCS file: /home/cvs/jakarta-tomcat/src/admin/WEB-INF/classes/tadm/TomcatIterateTEI.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- TomcatIterateTEI.java	2000/12/31 15:39:15	1.4
  +++ TomcatIterateTEI.java	2001/03/23 02:14:16	1.5
  @@ -24,9 +24,6 @@
   			     data.getAttributeString( "type" ),
   			     true,
   			     VariableInfo.NESTED ), 
  -			     
  -	    new VariableInfo("ctx2", "org.apache.tomcat.core.Context",
  -			     true,  VariableInfo.NESTED)
   	});
   
       }
  
  
  
  1.1                  jakarta-tomcat/src/admin/WEB-INF/classes/tadm/ContextAdmin.java
  
  Index: ContextAdmin.java
  ===================================================================
  package tadm;
  import java.util.Vector;
  import java.util.Enumeration;
  import java.io.*;
  import java.net.URL;
  import javax.servlet.http.*;
  
  import javax.servlet.jsp.*;
  import javax.servlet.jsp.tagext.*;
  import org.apache.tomcat.core.*;
  import org.apache.tomcat.util.log.*;
  
  /**
   * A context administration class. Contexts can be
   * viewed, added, and removed from the context manager.
   *
   */
  public class ContextAdmin extends TagSupport {
      private ContextManager cm;
      String ctxPath;
      String docBase;
      String ctxPathParam;
      String docBaseParam;
      String action;
      String host;
      String value;
      //    PageContext pageContext;
      
      public ContextAdmin() {}
  
      public int doStartTag() throws JspException {
  	try {
  	    HttpServletRequest req=(HttpServletRequest)pageContext.
  		getRequest();
  
  	    cm=(ContextManager)pageContext.getAttribute("cm");
  	    if( cm==null )
  		throw new JspException( "Can't find context manager" );
  
  	    Context ctx=null;
  	    if( ctxPath==null && ctxPathParam!=null ) {
  		ctxPath=req.getParameter( ctxPathParam );
  	    }
  
  	    if( docBase==null &&  docBaseParam!=null) {
  		docBase=req.getParameter( docBaseParam );
  	    }
  	    
  	    if( ctxPath != null ) {
  		if( debug>0 ) log("Finding " + ctxPath );
  		Enumeration en=cm.getContexts();
  		while( en.hasMoreElements() ) {
  		    ctx=(Context)en.nextElement();
  		    // XXX virtual host
  		    if( ctxPath.equals( ctx.getPath())) {
  			pageContext.setAttribute("ctx", ctx);
  			break;
  		    }
  		}
  	    }
  	    if( ctx==null ) {
  		throw new JspException("Can't find context " + ctxPath );
  	    }
  	    if("removeContext".equals( action ) )
  		removeContext( cm , ctx);
  	    if("setLogger".equals( action ) )
  		setLogFile(  ctx, value );
  	    if("addContext".equals( action ) )
  		addContext( cm, host, ctxPath, docBase );
  	} catch (Exception ex ) {
  	    ex.printStackTrace();
  	}
  	return EVAL_BODY_INCLUDE;
      }
  
      public int doEndTag() throws JspException {
  	return EVAL_PAGE;
      }
      
      public void setParent( Tag parent ) {
  	super.setParent( parent);
      }
  
      // -------------------- Properties --------------------
      
      public void setCtxPath( String ctx ) {
  	ctxPath=ctx;
      }
  
      public void setCtxPathParam( String ctx ) {
  	ctxPathParam=ctx;
      }
      
      public void setDocBaseParam( String ctx ) {
  	docBaseParam=ctx;
      }
  
      public void setCtxHost( String host ) {
  	this.host=host;
      }
  
      public void setAction( String action ) {
  	this.action=action;
      }
  
      public void setDocBase( String docBase ) {
  	this.docBase=docBase;
      }
  
      public void setValue( String s ) {
  	this.value=s;
      }
  
      
      private void removeContext( ContextManager cm, Context ctx)
  	throws TomcatException
      {
  	if( debug > 0 ) log("Removing " + ctx );
  	cm.removeContext( ctx );
      }
  
      private void setLogFile( Context ctx, String dest )
  	throws TomcatException
      {
  // 	try {
  // 	    QueueLogger logger=new QueueLogger();
  // 	    if( debug > 0 ) log ("Setting logger " + dest );
  // 	    logger.setPath( dest );
  // 	    logger.open();
  // 	    LogManager logManager=(LogManager)ctx.getContextManager().
  // 		getNote("tc.LogManager");
  	    
  // 	    logManager.addChannel("temp.log", logger );
  // 	    Log log=Log.getLog( "temp.log", ctx );
  // 	    ctx.setLog( log );
  // 	    ctx.setServletLog( log );
  // 	} catch( Exception ex ) {
  // 	    ex.printStackTrace();
  // 	}
      }
  
      private void addContext( ContextManager cm, String host, String path,
  			     String docBase)
  	throws TomcatException
      {
  	if( ! docBase.startsWith("/") ) {
  	    docBase=cm.getHome() + "/" + docBase;
  	}
  	if( debug > 0 )
  	    log("Adding " + path + " " + docBase);
  	Context context = new Context();
  	context.setContextManager(cm);
  	context.setPath(path);
  	context.setDocBase(docBase);
  
  	cm.addContext(context);
  	context.init();
      }
  
      // --------------------
      private static int debug=0;
      
      private void log(String s ) {
  	System.out.println(s );
      }
  }
  
  
  
  1.1                  jakarta-tomcat/src/admin/WEB-INF/classes/tadm/ModuleAdmin.java
  
  Index: ModuleAdmin.java
  ===================================================================
  package tadm;
  import java.util.Vector;
  import java.util.Enumeration;
  import java.io.*;
  import java.net.URL;
  import javax.servlet.http.*;
  
  import javax.servlet.jsp.*;
  import javax.servlet.jsp.tagext.*;
  import org.apache.tomcat.core.*;
  import org.apache.tomcat.util.log.*;
  
  /**
   * A context administration class. Contexts can be
   * viewed, added, and removed from the context manager.
   *
   */
  public class ModuleAdmin extends TagSupport {
      private ContextManager cm;
  
      String var;
      String moduleName;
      
      public ModuleAdmin() {}
  
      /** Will set the "module" attribute, with the instance of the
       *  named interceptor. If "ctx" attribute is set, look in that
       *  context
       */
      public int doStartTag() throws JspException {
  	try {
  	    cm=(ContextManager)pageContext.getAttribute("cm");
  	    if( cm==null )
  		throw new JspException( "Can't find context manager" );
  
  	    Context ctx=(Context)pageContext.getAttribute("ctx");
  
  	    Container ct=(ctx==null)? cm.getContainer():ctx.getContainer();
  	    BaseInterceptor bi[]=ct.getInterceptors();
  	    BaseInterceptor found=null;
  	    for( int i=0; i<bi.length; i++ ) {
  		String cn=bi[i].getClass().getName();
  		if( cn.equals( moduleName )) {
  		    found=bi[i];
  		    pageContext.setAttribute( var,bi[i],
  					      PageContext.PAGE_SCOPE );
  		    break;
  		}
  	    }
  	    if( found==null )
  		throw new JspException("Can't find module " + moduleName +
  				       " in " + ctx );
  	} catch (Exception ex ) {
  	    ex.printStackTrace();
  	}
  	return EVAL_BODY_INCLUDE;
      }
  
      // -------------------- Properties --------------------
      
      public void setVar(String m) {
  	var=m;
      }
  
      public void setType( String m ) {
  	moduleName=m;
      }
  
      // --------------------
      private static int debug=0;
      
      private void log(String s ) {
  	System.out.println(s );
      }
  }
  
  
  
  1.1                  jakarta-tomcat/src/admin/WEB-INF/classes/tadm/ModuleAdminTEI.java
  
  Index: ModuleAdminTEI.java
  ===================================================================
  package tadm;
  import java.util.Vector;
  import java.util.Enumeration;
  import java.io.File;
  import java.net.URL;
  import javax.servlet.http.*;
  
  import javax.servlet.jsp.*;
  import javax.servlet.jsp.tagext.*;
  import org.apache.tomcat.core.Request;
  import org.apache.tomcat.core.Context;
  import org.apache.tomcat.core.ContextManager;
  
  
  import javax.servlet.jsp.tagext.TagData;
  import javax.servlet.jsp.tagext.TagExtraInfo;
  import javax.servlet.jsp.tagext.VariableInfo;
  
  public class ModuleAdminTEI extends TagExtraInfo {
  
      public VariableInfo[] getVariableInfo(TagData data) {
  	return (new VariableInfo[] {
  	    new VariableInfo(data.getAttributeString( "var" ),
  			     data.getAttributeString( "type" ),
  			     true,
  			     VariableInfo.AT_BEGIN ), 
  	});
  
      }
  
  
  }
  
  
  
  1.3       +2 -1      jakarta-tomcat/src/admin/contextAdmin/ctxDetail.jsp
  
  Index: ctxDetail.jsp
  ===================================================================
  RCS file: /home/cvs/jakarta-tomcat/src/admin/contextAdmin/ctxDetail.jsp,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- ctxDetail.jsp	2000/12/27 21:41:31	1.2
  +++ ctxDetail.jsp	2001/03/23 02:14:17	1.3
  @@ -9,7 +9,7 @@
   
   <body bgcolor="white">
   
  -<adm:admin ctxPath='<%= request.getParameter("ctx") %>' />
  +<adm:admin ctxPathParam="ctx" />
   
   <%
     if( ctx==null ) {
  @@ -17,6 +17,7 @@
     <h1>Error, no context for <%= request.getParameter( "ctx" ) %> </h1>
   <% } else { %>
   
  +  <a href="sessionState.jsp?ctx=<%= request.getParameter( "ctx" ) %>">Session info</a>
     <table border="0" cellpad="2" >
     <tr bgcolor="#e1e1e1">
   
  
  
  
  1.1                  jakarta-tomcat/src/admin/contextAdmin/sessionExpire.jsp
  
  Index: sessionExpire.jsp
  ===================================================================
  <html>
  <%@ taglib uri="http://jakarta.apache.org/taglibs/tomcat_admin-1.0" 
             prefix="adm" %>
  <head>
      <title>Session info</title>
  </head>
  
  <body bgcolor="white">
  
  <adm:admin ctxPathParam="ctx"/>
  <adm:moduleAdmin var="store" 
  		 type="org.apache.tomcat.modules.session.SimpleSessionStore" />
  
    <h3>Invalidate <%= request.getParameter("id" ) %></h3>
  
  <% org.apache.tomcat.core.ServerSession s=store.findSession( ctx, 
               request.getParameter("id" ));
     s.setState( org.apache.tomcat.core.ServerSession.STATE_EXPIRED );
  %>
  
  </body>
  </html>
  
  
  
  1.1                  jakarta-tomcat/src/admin/contextAdmin/sessionState.jsp
  
  Index: sessionState.jsp
  ===================================================================
  <html>
  <%@ taglib uri="http://jakarta.apache.org/taglibs/tomcat_admin-1.0" 
             prefix="adm" %>
  <head>
      <title>Session info</title>
  </head>
  
  <body bgcolor="white">
  
  <adm:admin ctxPathParam="ctx"/>
  <adm:moduleAdmin var="store" 
  		 type="org.apache.tomcat.modules.session.SimpleSessionStore" />
  
    <h3>Session store info</h3>
  
    <ul>
      <li>Context: <%= ctx %>
      <li>Default timeout: <%= ctx.getSessionTimeOut() %>
      <li>Active sessions: <%= store.getSessionCount(ctx) %>
      <li>Recycled sessions: <%= store.getRecycledCount(ctx) %>
    <ul>
  
      <table border>
        <tr>
  	  <th>Id</th>
  	  <th>Attrs</th>
  	  <th>St</th>
  	  <th>Creation</th>
  	  <th>Access</th>
  	  <th>Exp</th>
  	  <th>New</th>
        </tr>
       <adm:iterate name="sS" 
                    enumeration="<%= store.getSessions(ctx) %>" 
                    type="org.apache.tomcat.core.ServerSession" >
        <tr>
  	  <td><%= sS.getId().toString() %></td>
  	  <td><%= sS.getAttributeCount() %></td>
  	  <td><a href="sessionExpire.jsp?ctx=<%= request.getParameter("ctx") %>&id=<%= sS.getId().toString() %>" >
                <%= sS.getState() %></td>
  	      </a>
  	  <td><%= sS.getTimeStamp().getCreationTime() %></td>
  	  <td><%= sS.getTimeStamp().getLastAccessedTime() %></td>
  	  <td><%= sS.getTimeStamp().getMaxInactiveInterval() %></td>
  	  <td><%= sS.getTimeStamp().isNew() %></td>
        </tr>
       </adm:iterate>
      </table>
  
  </body>
  </html>