320 lines
		
	
	
		
			8.8 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
		
		
			
		
	
	
			320 lines
		
	
	
		
			8.8 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
|  | <%-- | ||
|  |  Licensed to the Apache Software Foundation (ASF) under one | ||
|  |  or more contributor license agreements.  See the NOTICE file | ||
|  |  distributed with this work for additional information | ||
|  |  regarding copyright ownership.  The ASF licenses this file | ||
|  |  to you under the Apache License, Version 2.0 (the | ||
|  |  "License"); you may not use this file except in compliance | ||
|  |  with the License.  You may obtain a copy of the License at | ||
|  | 
 | ||
|  |    http://www.apache.org/licenses/LICENSE-2.0 | ||
|  | 
 | ||
|  |  Unless required by applicable law or agreed to in writing, | ||
|  |  software distributed under the License is distributed on an | ||
|  |  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY | ||
|  |  KIND, either express or implied.  See the License for the | ||
|  |  specific language governing permissions and limitations | ||
|  |  under the License. | ||
|  | --%> | ||
|  | <%@ page import="java.util.HashMap" %> | ||
|  | <%@ page import="java.util.List" %> | ||
|  | <%@ page import="java.util.Iterator" %> | ||
|  | <%@ page import="org.apache.jcs.admin.*" %> | ||
|  | <%@ page import="org.apache.jcs.*" %> | ||
|  | 
 | ||
|  | <jsp:useBean id="jcsBean" scope="request" class="org.apache.jcs.admin.JCSAdminBean" /> | ||
|  | 
 | ||
|  | <html> | ||
|  | 
 | ||
|  | <head> | ||
|  | 
 | ||
|  | <SCRIPT LANGUAGE="Javascript"> | ||
|  |   function decision( message, url ) | ||
|  |   { | ||
|  |     if( confirm(message) ) | ||
|  |     { | ||
|  |       location.href = url; | ||
|  |     } | ||
|  |   } | ||
|  | </SCRIPT> | ||
|  | 
 | ||
|  | <title> JCS Admin Servlet </title> | ||
|  | 
 | ||
|  | </head> | ||
|  | 
 | ||
|  | <body> | ||
|  | 
 | ||
|  | <% | ||
|  | 			String CACHE_NAME_PARAM = "cacheName"; | ||
|  | 			String ACTION_PARAM = "action"; | ||
|  | 		 	String CLEAR_ALL_REGIONS_ACTION = "clearAllRegions"; | ||
|  | 		 	String CLEAR_REGION_ACTION = "clearRegion"; | ||
|  | 		 	String REMOVE_ACTION = "remove"; | ||
|  | 		 	String DETAIL_ACTION = "detail"; | ||
|  | 		 	String REGION_SUMMARY_ACTION = "regionSummary"; | ||
|  | 		 	String ITEM_ACTION = "item"; | ||
|  | 			String KEY_PARAM = "key"; | ||
|  | 			String SILENT_PARAM = "silent"; | ||
|  | 
 | ||
|  |      		String DEFAULT_TEMPLATE_NAME = "DEFAULT"; | ||
|  |      		String REGION_DETAIL_TEMPLATE_NAME = "DETAIL"; | ||
|  |      		String ITEM_TEMPLATE_NAME = "ITEM"; | ||
|  |      		String REGION_SUMMARY_TEMPLATE_NAME = "SUMMARY"; | ||
|  | 
 | ||
|  | 			String templateName = DEFAULT_TEMPLATE_NAME; | ||
|  | 
 | ||
|  | 			HashMap context = new HashMap(); | ||
|  | 
 | ||
|  | 			// Get cacheName for actions from request (might be null) | ||
|  | 			String cacheName = request.getParameter( CACHE_NAME_PARAM ); | ||
|  | 
 | ||
|  | 			if ( cacheName != null ) | ||
|  | 			{ | ||
|  | 			    cacheName = cacheName.trim(); | ||
|  | 			} | ||
|  | 
 | ||
|  | 			// If an action was provided, handle it | ||
|  | 			String action = request.getParameter( ACTION_PARAM ); | ||
|  | 
 | ||
|  | 			if ( action != null ) | ||
|  | 			{ | ||
|  | 				if ( action.equals( CLEAR_ALL_REGIONS_ACTION ) ) | ||
|  | 				{ | ||
|  | 					jcsBean.clearAllRegions(); | ||
|  | 				} | ||
|  | 				else if ( action.equals( CLEAR_REGION_ACTION ) ) | ||
|  | 				{ | ||
|  | 					if ( cacheName == null ) | ||
|  | 					{ | ||
|  | 						// Not Allowed | ||
|  | 					} | ||
|  | 					else | ||
|  | 					{ | ||
|  | 						jcsBean.clearRegion( cacheName ); | ||
|  | 					} | ||
|  | 				} | ||
|  | 				else if ( action.equals( REMOVE_ACTION ) ) | ||
|  | 				{ | ||
|  | 					String[] keys = request.getParameterValues( KEY_PARAM ); | ||
|  | 
 | ||
|  | 					for ( int i = 0; i < keys.length; i++ ) | ||
|  | 					{ | ||
|  | 						jcsBean.removeItem( cacheName, keys[ i ] ); | ||
|  | 					} | ||
|  | 
 | ||
|  | 					templateName = REGION_DETAIL_TEMPLATE_NAME; | ||
|  | 				} | ||
|  | 				else if ( action.equals( DETAIL_ACTION ) ) | ||
|  | 				{ | ||
|  | 					templateName = REGION_DETAIL_TEMPLATE_NAME; | ||
|  | 				} | ||
|  | 				else if ( action.equals( ITEM_ACTION ) ) | ||
|  | 				{ | ||
|  | 					templateName = ITEM_TEMPLATE_NAME; | ||
|  | 				} | ||
|  | 				else if ( action.equals( REGION_SUMMARY_ACTION ) ) | ||
|  | 				{ | ||
|  | 					templateName = REGION_SUMMARY_TEMPLATE_NAME; | ||
|  | 				} | ||
|  | 			} | ||
|  | 
 | ||
|  | 			if ( request.getParameter( SILENT_PARAM ) != null ) | ||
|  | 			{ | ||
|  | 				// If silent parameter was passed, no output should be produced. | ||
|  | 				//return null; | ||
|  | 			} | ||
|  | 			else | ||
|  | 			{ | ||
|  | 				// Populate the context based on the template | ||
|  | 				if ( templateName == REGION_DETAIL_TEMPLATE_NAME ) | ||
|  | 				{ | ||
|  | 					//context.put( "cacheName", cacheName ); | ||
|  | 					context.put( "elementInfoRecords", jcsBean.buildElementInfo( cacheName ) ); | ||
|  | 				} | ||
|  | 				else if ( templateName == DEFAULT_TEMPLATE_NAME ) | ||
|  | 				{ | ||
|  | 					context.put( "cacheInfoRecords", jcsBean.buildCacheInfo() ); | ||
|  | 				} | ||
|  | 			} | ||
|  | 
 | ||
|  | /////////////////////////////////////////////////////////////////////////////////// | ||
|  | 			//handle display | ||
|  | 
 | ||
|  | 			if ( templateName == ITEM_TEMPLATE_NAME ) | ||
|  | 			{ | ||
|  | 			    String key = request.getParameter( KEY_PARAM ); | ||
|  | 
 | ||
|  | 			    if ( key != null ) | ||
|  | 			    { | ||
|  | 			        key = key.trim(); | ||
|  | 			    } | ||
|  | 
 | ||
|  | 			    JCS cache = JCS.getInstance( cacheName ); | ||
|  | 
 | ||
|  | 				org.apache.jcs.engine.behavior.ICacheElement element = cache.getCacheElement( key ); | ||
|  | %> | ||
|  | <h1> Item for key [<%=key%>] in region [<%=cacheName%>] </h1> | ||
|  | 
 | ||
|  | <a href="JCSAdmin.jsp?action=detail&cacheName=<%=cacheName%>">Region Detail</a> | ||
|  | | <a href="JCSAdmin.jsp">All Regions</a> | ||
|  | 
 | ||
|  |   <pre> | ||
|  | 	<%=element%> | ||
|  |   </pre> | ||
|  | <% | ||
|  | 			} | ||
|  | 			else | ||
|  | 			if ( templateName == REGION_SUMMARY_TEMPLATE_NAME ) | ||
|  | 			{ | ||
|  | %> | ||
|  | 
 | ||
|  | <h1> Summary for region [<%=cacheName%>] </h1> | ||
|  | 
 | ||
|  | <a href="JCSAdmin.jsp">All Regions</a> | ||
|  | 
 | ||
|  | <% | ||
|  |     JCS cache = JCS.getInstance( cacheName ); | ||
|  |     String stats = cache.getStats(); | ||
|  | %> | ||
|  | 
 | ||
|  |     <br> | ||
|  | <b> Stats for region [<%=cacheName%>] </b> | ||
|  | 
 | ||
|  |     <pre> | ||
|  |     	<%=stats%> | ||
|  |     </pre> | ||
|  | 
 | ||
|  | <% | ||
|  | 			} | ||
|  | 			else | ||
|  | 			if ( templateName == REGION_DETAIL_TEMPLATE_NAME ) | ||
|  | 			{ | ||
|  | %> | ||
|  | 
 | ||
|  | <h1> Detail for region [<%=cacheName%>] </h1> | ||
|  | 
 | ||
|  | <a href="JCSAdmin.jsp">All Regions</a> | ||
|  | 
 | ||
|  | <table border="1" cellpadding="5" > | ||
|  |     <tr> | ||
|  |         <th> Key </th> | ||
|  |         <th> Eternal? </th> | ||
|  |         <th> Create time </th> | ||
|  |         <th> Max Life (s) </th> | ||
|  |         <th> Till Expiration (s) </th> | ||
|  |     </tr> | ||
|  | <% | ||
|  | 	List list = (List)context.get( "elementInfoRecords" ); | ||
|  |     Iterator it = list.iterator(); | ||
|  |     while ( it.hasNext() ) { | ||
|  |     	CacheElementInfo element = (CacheElementInfo)it.next(); | ||
|  | %> | ||
|  |         <tr> | ||
|  |             <td> <%=element.getKey()%> </td> | ||
|  |             <td> <%=element.isEternal()%> </td> | ||
|  |             <td> <%=element.getCreateTime()%> </td> | ||
|  |             <td> <%=element.getMaxLifeSeconds()%> </td> | ||
|  |             <td> <%=element.getExpiresInSeconds()%> </td> | ||
|  |             <td> | ||
|  |              <a href="JCSAdmin.jsp?action=item&cacheName=<%=cacheName%>&key=<%=element.getKey()%>"> View </a> | ||
|  |             | <a href="JCSAdmin.jsp?action=remove&cacheName=<%=cacheName%>&key=<%=element.getKey()%>"> Remove </a> | ||
|  |             </td> | ||
|  |         </tr> | ||
|  | <% | ||
|  |     } | ||
|  | 
 | ||
|  |     JCS cache = JCS.getInstance( cacheName ); | ||
|  |     String stats = cache.getStats(); | ||
|  | %> | ||
|  |     </table> | ||
|  | 
 | ||
|  |     <br> | ||
|  | <b> Stats for region [<%=cacheName%>] </b> | ||
|  | 
 | ||
|  |     <pre> | ||
|  |     	<%=stats%> | ||
|  |     </pre> | ||
|  | <% | ||
|  |   } | ||
|  |   else | ||
|  |   { | ||
|  | %> | ||
|  | 
 | ||
|  | <h1> Cache Regions </h1> | ||
|  | 
 | ||
|  | <p> | ||
|  | These are the regions which are currently defined in the cache. 'Items' and | ||
|  | 'Bytes' refer to the elements currently in memory (not spooled). You can clear | ||
|  | all items for a region by selecting 'Remove all' next to the desired region | ||
|  | below. You can also <a href="javascript:decision('Clicking OK will clear all the data from all regions!','JCSAdmin.jsp?action=clearAllRegions')">Clear all regions</a> | ||
|  | which empties the entire cache. | ||
|  | </p> | ||
|  | <p> | ||
|  | 	<form action="JCSAdmin.jsp"> | ||
|  | 		<input type="hidden" name="action" value="item"> | ||
|  | 		Retrieve (key) <input type="text" name="key">   | ||
|  | 		(region) <select name="cacheName"> | ||
|  | <% | ||
|  |   List listSelect = (List)context.get( "cacheInfoRecords" ); | ||
|  |   Iterator itSelect = listSelect.iterator(); | ||
|  |   while ( itSelect.hasNext() ) | ||
|  |   { | ||
|  | 	CacheRegionInfo record = (CacheRegionInfo)itSelect.next(); | ||
|  | 	%> | ||
|  |     <option value="<%=record.getCache().getCacheName()%>"><%=record.getCache().getCacheName()%></option> | ||
|  | 	<% | ||
|  |   } | ||
|  | %> | ||
|  | 				</select> | ||
|  | 		<input type="submit"> | ||
|  | 	</form> | ||
|  | </p> | ||
|  | 
 | ||
|  | <table border="1" cellpadding="5" > | ||
|  |     <tr> | ||
|  |         <th> Cache Name </th> | ||
|  |         <th> Items </th> | ||
|  |         <th> Bytes </th> | ||
|  |         <th> Status </th> | ||
|  |         <th> Memory Hits </th> | ||
|  |         <th> Aux Hits </th> | ||
|  |         <th> Not Found Misses </th> | ||
|  |         <th> Expired Misses </th> | ||
|  |     </tr> | ||
|  | 
 | ||
|  | <% | ||
|  | 	List list = (List)context.get( "cacheInfoRecords" ); | ||
|  |     Iterator it = list.iterator(); | ||
|  |     while (it.hasNext() ) | ||
|  |     { | ||
|  |     	CacheRegionInfo record = (CacheRegionInfo)it.next(); | ||
|  | 
 | ||
|  | %> | ||
|  |         <tr> | ||
|  |             <td> <%=record.getCache().getCacheName()%> </td> | ||
|  |             <td> <%=record.getCache().getSize()%> </td> | ||
|  |             <td> <%=record.getByteCount()%> </td> | ||
|  |             <td> <%=record.getStatus()%> </td> | ||
|  |             <td> <%=record.getCache().getHitCountRam()%> </td> | ||
|  |             <td> <%=record.getCache().getHitCountAux()%> </td> | ||
|  |             <td> <%=record.getCache().getMissCountNotFound()%> </td> | ||
|  |             <td> <%=record.getCache().getMissCountExpired()%> </td> | ||
|  |             <td> | ||
|  |                 <a href="JCSAdmin.jsp?action=regionSummary&cacheName=<%=record.getCache().getCacheName()%>"> Summary </a> | ||
|  |                 | <a href="JCSAdmin.jsp?action=detail&cacheName=<%=record.getCache().getCacheName()%>"> Detail </a> | ||
|  |                 | <a href="javascript:decision('Clicking OK will remove all the data from the region [<%=record.getCache().getCacheName()%>]!','JCSAdmin.jsp?action=clearRegion&cacheName=<%=record.getCache().getCacheName()%>')"> Clear </a> | ||
|  |             </td> | ||
|  |         </tr> | ||
|  | <% | ||
|  |     } | ||
|  | %> | ||
|  |     </table> | ||
|  | <% | ||
|  |   } | ||
|  | %> | ||
|  | 
 | ||
|  | 
 | ||
|  | </body> | ||
|  | 
 | ||
|  | </html> |