sylvain     01/12/06 05:13:47

  Modified:    .        changes.xml
               src/org/apache/cocoon/components/store StoreJanitor.java
                        StoreJanitorImpl.java
               src/org/apache/cocoon/generation StatusGenerator.java
               webapp/stylesheets/system status2html.xsl
  Log:
  StatusGenerator outputs detailed information on cache contents
  Submitted by: Sebastien Koechlin <[EMAIL PROTECTED]>
  
  Revision  Changes    Path
  1.53      +5 -1      xml-cocoon2/changes.xml
  
  Index: changes.xml
  ===================================================================
  RCS file: /home/cvs/xml-cocoon2/changes.xml,v
  retrieving revision 1.52
  retrieving revision 1.53
  diff -u -r1.52 -r1.53
  --- changes.xml       2001/11/28 11:45:38     1.52
  +++ changes.xml       2001/12/06 13:13:47     1.53
  @@ -4,7 +4,7 @@
   
   <!--
     History of Cocoon changes
  -  $Id: changes.xml,v 1.52 2001/11/28 11:45:38 cziegeler Exp $
  +  $Id: changes.xml,v 1.53 2001/12/06 13:13:47 sylvain Exp $
   -->
   
   <changes title="History of Changes">
  @@ -27,6 +27,10 @@
    </devs>
   
    <release version="2.1-dev" date="@date@">
  +  <action dev="SW" type="add">
  +    Status generator outputs a detailed description of what's in the cache. Patch 
submitted by
  +    Sebastien Koechlin [[EMAIL PROTECTED]]
  +  </action>
     <action dev="CZ" type="update">
       Applied patch adding advanced error handling to SQLTransformer plus 
escape-string element
       from Peter Seiderer [[EMAIL PROTECTED]]
  
  
  
  1.5       +4 -0      
xml-cocoon2/src/org/apache/cocoon/components/store/StoreJanitor.java
  
  Index: StoreJanitor.java
  ===================================================================
  RCS file: 
/home/cvs/xml-cocoon2/src/org/apache/cocoon/components/store/StoreJanitor.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- StoreJanitor.java 2001/11/22 10:21:11     1.4
  +++ StoreJanitor.java 2001/12/06 13:13:47     1.5
  @@ -8,6 +8,7 @@
   package org.apache.cocoon.components.store;
   
   import org.apache.avalon.framework.component.Component;
  +import java.util.Iterator;
   
   /**
    * Interface for the StoreJanitors
  @@ -23,4 +24,7 @@
   
       /** unregister method for the stores */
       void unregister(Store store);
  +    
  +    /** get an iterator to list registered stores */
  +    Iterator iterator();
   }
  
  
  
  1.8       +17 -0     
xml-cocoon2/src/org/apache/cocoon/components/store/StoreJanitorImpl.java
  
  Index: StoreJanitorImpl.java
  ===================================================================
  RCS file: 
/home/cvs/xml-cocoon2/src/org/apache/cocoon/components/store/StoreJanitorImpl.java,v
  retrieving revision 1.7
  retrieving revision 1.8
  diff -u -r1.7 -r1.8
  --- StoreJanitorImpl.java     2001/11/22 10:02:42     1.7
  +++ StoreJanitorImpl.java     2001/12/06 13:13:47     1.8
  @@ -16,6 +16,7 @@
   import org.apache.avalon.framework.thread.ThreadSafe;
   
   import java.util.ArrayList;
  +import java.util.Iterator;
   
   /**
    * This class is a implentation of a StoreJanitor. Store classes
  @@ -170,6 +171,22 @@
           }
       }
   
  +    /**
  +     * This method return a java.util.Iterator of every registered stores
  +     * 
  +     * <i>The iterators returned is fail-fast: if list is structurally
  +     * modified at any time after the iterator is created, in any way, the
  +     * iterator will throw a ConcurrentModificationException.  Thus, in the
  +     * face of concurrent modification, the iterator fails quickly and
  +     * cleanly, rather than risking arbitrary, non-deterministic behavior at
  +     * an undetermined time in the future.</i>
  +     *
  +     * @return a java.util.Iterator
  +     */
  +    public Iterator iterator() {
  +        return this.getStoreList().iterator();
  +     }
  +     
       /**
        * Round Robin alghorithm for freeing the registerd caches.
        */
  
  
  
  1.8       +77 -5     
xml-cocoon2/src/org/apache/cocoon/generation/StatusGenerator.java
  
  Index: StatusGenerator.java
  ===================================================================
  RCS file: 
/home/cvs/xml-cocoon2/src/org/apache/cocoon/generation/StatusGenerator.java,v
  retrieving revision 1.7
  retrieving revision 1.8
  diff -u -r1.7 -r1.8
  --- StatusGenerator.java      2001/10/11 07:28:21     1.7
  +++ StatusGenerator.java      2001/12/06 13:13:47     1.8
  @@ -7,7 +7,15 @@
   *****************************************************************************/
   package org.apache.cocoon.generation;
   
  +import org.apache.avalon.framework.component.ComponentException;
  +import org.apache.avalon.framework.component.ComponentManager;
  +import org.apache.avalon.framework.component.Composable;
  +
   import org.apache.avalon.excalibur.pool.Recyclable;
  +
  +import org.apache.cocoon.components.store.StoreJanitor;
  +import org.apache.cocoon.components.store.Store;
  +
   import org.xml.sax.Attributes;
   import org.xml.sax.ContentHandler;
   import org.xml.sax.SAXException;
  @@ -16,10 +24,7 @@
   import java.net.InetAddress;
   import java.net.UnknownHostException;
   import java.text.DateFormat;
  -import java.util.ArrayList;
  -import java.util.Date;
  -import java.util.List;
  -import java.util.StringTokenizer;
  +import java.util.*;
   
   /** Generates an XML representation of the current status of Cocoon.
    * Potted DTD:
  @@ -47,10 +52,14 @@
    *
    * @author <a href="mailto:[EMAIL PROTECTED]";>Paul Russell</a> (Luminas Limited)
    * @author <a href="mailto:[EMAIL PROTECTED]";>Stefano Mazzocchi</a>
  - * @version CVS $Revision: 1.7 $ $Date: 2001/10/11 07:28:21 $
  + * @version CVS $Revision: 1.8 $ $Date: 2001/12/06 13:13:47 $
    */
   public class StatusGenerator extends ComposerGenerator implements Recyclable {
   
  +    /** The StoreJanitor used to get cache statistics
  +     */
  +    protected StoreJanitor storejanitor;
  +
       /** The XML namespace for the output document.
        */
       protected static final String namespace =
  @@ -61,6 +70,20 @@
       protected static final String xlinkNamespace =
           "http://www.w3.org/1999/xlink";;
   
  +    /**
  +     * Set the current <code>ComponentManager</code> instance used by this
  +     * <code>Composable</code>.
  +     * Need to get statistics about cache hits
  +     */
  +    public void compose(ComponentManager manager) throws ComponentException {
  +        super.compose(manager);
  +        try {
  +            this.storejanitor = (StoreJanitor)manager.lookup(StoreJanitor.ROLE);
  +        } catch(ComponentException ce) {
  +            getLogger().info("StoreJanitor is not available. Sorry, no cache 
statistics");
  +        }
  +    }
  +
       /** Generate the status information in XML format.
        * @throws SAXException
        *         when there is a problem creating the output SAX events.
  @@ -149,6 +172,55 @@
               paths.add(tokenizer.nextToken());
           }
           addMultilineValue(ch, "classpath", paths);
  +        // END ClassPath
  +
  +        // BEGIN Cache
  +        startGroup(ch, "Store-Janitor");
  +
  +        // For each element in StoreJanitor
  +        Iterator i = this.storejanitor.iterator();
  +        while( i.hasNext() ) {
  +            Store store = (Store) i.next();
  +            startGroup(ch, store.getClass().getName()+" (hash = 
"+store.hashCode()+")" );
  +            int size = 0;
  +            atts.addAttribute(namespace, "name", "name", "CDATA", "cached");
  +            ch.startElement(namespace, "value", "value", atts);
  +            // For each element in Store
  +            Enumeration e = store.keys();
  +            List cachelist = new ArrayList();
  +            while( e.hasMoreElements() ) {
  +                size++;
  +                atts.clear();
  +
  +                ch.startElement(namespace, "line", "line", atts);
  +                
  +                Object o = e.nextElement();
  +                String value = 
  +                        o.toString() + " (hash: " +
  +                        o.hashCode() + " | class: " +
  +                        o.getClass().getName() +
  +                        ")" ;
  +
  +                ch.characters(value.toCharArray(), 0, value.length());
  +                ch.endElement(namespace, "line", "line");
  +
  +            };
  +    
  +            if (size == 0) {
  +                atts.clear();
  +                ch.startElement(namespace, "line", "line", atts);
  +                String value = "[empty]";
  +                ch.characters(value.toCharArray(), 0, value.length());
  +                ch.endElement(namespace, "line", "line");
  +            }
  +            
  +            ch.endElement(namespace, "value", "value");
  +                
  +            addValue(ch, "size", String.valueOf(size) + " items in cache");
  +            endGroup(ch);
  +        };
  +        endGroup(ch);
  +        // END Cache    
   
           // BEGIN OS info
           endGroup(ch);
  
  
  
  1.4       +40 -2     xml-cocoon2/webapp/stylesheets/system/status2html.xsl
  
  Index: status2html.xsl
  ===================================================================
  RCS file: /home/cvs/xml-cocoon2/webapp/stylesheets/system/status2html.xsl,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- status2html.xsl   2001/11/14 08:37:10     1.3
  +++ status2html.xsl   2001/12/06 13:13:47     1.4
  @@ -71,7 +71,7 @@
   
     </xsl:template>
   
  -  <xsl:template match="status:value">
  +  <!--xsl:template match="status:value">
       <tr>
         <td bgcolor="#0086b2" valign="top" align="left">
          <FONT face="arial,helvetica,sanserif" color="#ffffff">
  @@ -85,8 +85,46 @@
         </td>
       </tr>
   
  -  </xsl:template>
  +  </xsl:template-->
   
  +       <xsl:template match="status:value[count(status:line) &lt;= 1]">
  +               <tr>
  +                       <td bgcolor="#0086b2" valign="top" align="left">
  +                               <font face="arial,helvetica,sanserif" 
color="#ffffff">
  +                                       <xsl:value-of select="@status:name"/>
  +                               </font>
  +                       </td>
  +                       <td bgcolor="ffffff" width="100%">
  +                               <font face="arial,helvetica,sanserif">
  +                                       <xsl:value-of select="status:line" />
  +                               </font>
  +                       </td>
  +               </tr>
  +       </xsl:template>
  +
  +       <xsl:template match="status:value[count(status:line) &gt; 1]">
  +               <tr>
  +                       <td bgcolor="#0086b2" valign="top" align="left">
  +                               <font face="arial,helvetica,sanserif" 
color="#ffffff">
  +                                       <xsl:value-of select="@status:name"/>
  +                               </font>
  +                       </td>
  +                       <td bgcolor="ffffff" width="100%">
  +                               <ul>
  +                                       <xsl:apply-templates />
  +                               </ul>
  +                       </td>
  +               </tr>
  +       </xsl:template>
  +
  +
  +       <xsl:template match="status:line">
  +               <li>
  +                       <font face="arial,helvetica,sanserif">
  +                               <xsl:value-of select="." />
  +                       </font>
  +               </li>
  +       </xsl:template>
   
        <xsl:template match="status:value[../@status:name='memory' and ( 
@status:name='total' or @status:name='free')]">
                <tr>
  
  
  

----------------------------------------------------------------------
In case of troubles, e-mail:     [EMAIL PROTECTED]
To unsubscribe, e-mail:          [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to