Package org.w3c.jigsaw.status

Source Code of org.w3c.jigsaw.status.ThreadStatFrame

// ThreadStatFrame.java
// $Id: ThreadStatFrame.java,v 1.8 2000/08/16 21:37:48 ylafon Exp $
// (c) COPYRIGHT MIT and INRIA, 1996.
// Please first read the full copyright statement in file COPYRIGHT.html

package org.w3c.jigsaw.status ;

import java.util.Hashtable ;

import org.w3c.tools.resources.Attribute;
import org.w3c.tools.resources.AttributeRegistry;
import org.w3c.tools.resources.FramedResource;
import org.w3c.tools.resources.IntegerAttribute;
import org.w3c.tools.resources.Resource;
import org.w3c.tools.resources.ResourceFrame;

import org.w3c.www.http.HTTP;

import org.w3c.jigsaw.http.HTTPException;
import org.w3c.jigsaw.http.Reply;
import org.w3c.jigsaw.http.Request;

import org.w3c.jigsaw.frames.HTTPFrame;

import org.w3c.jigsaw.html.HtmlGenerator ;

/**
* The server thread status.
* This ought to be the client status, it will shortly (FIXME). It should uses
* a two frame display, one listing the clients, and the other one listing per
* client informations.
* <p>By the Way, this uses the nasty refresh stuff from netscape. It should
* perhaps be a servlet.
*/

public class ThreadStatFrame extends HTTPFrame {
    protected static Integer REFRESH_DEFAULT = new Integer(5) ;

    /**
     * Attribute index - Our refresh interval.
     */
    protected static int ATTR_REFRESH = -1 ;

    static {
  Attribute a   = null ;
  Class     cls = null ;
  try {
      cls = Class.forName("org.w3c.jigsaw.status.ThreadStatFrame");
  } catch (Exception ex) {
      ex.printStackTrace() ;
      System.exit(1) ;
  }
  // The refresh interval attribute:
  a = new IntegerAttribute("refresh"
         , new Integer(5)
         , Attribute.EDITABLE) ;
  ATTR_REFRESH = AttributeRegistry.registerAttribute(cls, a) ;
    }

    Runtime runtime = null ;

    public void registerResource(FramedResource resource) {
  super.registerOtherResource(resource);
    }

    /**
     * Dump the currenr threads into an HTML page.
     * @param request The request we are to reply to.
     */
    public Reply listThreads (Request request) {
  // enumerate all thread, and return a full thread listing:
  int    tcount   = Thread.activeCount() ;
  HtmlGenerator g = new HtmlGenerator ("Thread status") ;
  g.meta ("Refresh", getValue(ATTR_REFRESH, REFRESH_DEFAULT).toString());
  addStyleSheet(g);
  // Dump thread informations:
  Thread tarray[] = new Thread[tcount] ;
  Thread.enumerate (tarray) ;
  g.append ("<h1>Thread dump</h1>") ;
  g.append ("<ul>") ;
  String rname = getResource().getIdentifier();
  for (int i = 0 ; i < tcount ; i++) {
      String name = tarray[i].getName() ;
      g.append ("<li>"
          + "<a href=\""+rname+"?" + name + "\">" + name + "</a>"
          + (tarray[i].isDaemon() ? "D " : "  ")
          + (tarray[i].isAlive()  ? "R " : "  ")
          + " Prio: " +(tarray[i].getPriority())) ;
  }
  g.append ("</ul>") ;
  // Dark features:
  g.append ("<p>To kill a thread, add a <b>?</b><em>thread-name</em> "
      + "to the current URL.</p>") ;
  // Add global java process informations:
  g.append ("<h2>Misc informations</h2>") ;
  g.append ("<p>Total free memory: " + runtime.freeMemory());
  g.append ("<p>Toal memory      : " + runtime.totalMemory()) ;
  g.close() ;
  // Reply back:
  Reply  reply = request.makeReply(HTTP.OK) ;
  reply.setStream (g) ;
  return reply ;
    }

    protected Reply dumpThread (Request request)
  throws HTTPException
    {
  // enumerate all thread, and return a full thread listing:
  int    tcount   = Thread.activeCount() ;
  Thread tarray[] = new Thread[tcount] ;
  Thread.enumerate (tarray) ;
  // Find ZE thread
  String tname   = request.getQueryString () ;
  Thread queried = null ;
  for (int i = 0 ; i < tcount ; i++) {
      if ( tarray[i].getName().equals (tname) ) {
    queried = tarray[i] ;
    break ;
      }
  }
  if ( queried == null ) {
      Reply reply = request.makeReply(HTTP.NOT_FOUND);
      reply.setContent ("Thread " + tname + " not found.") ;
      return reply ;
  }
  // Default to killing the thread
  queried.destroy() ;
  return listThreads (request) ;
    }

    /**
     * Get the threads.
     * If a search string is present, kill the indicated thread, otherwise
     * list the currently running threads.
     * @param request The request to handle.
     * @exception HTTPException If processing the request failed.
     */
    public Reply get (Request request)
  throws HTTPException
    {
  if ( request.hasQueryString() ) {
      return dumpThread (request) ;
  } else {
      return listThreads (request) ;
  }
    }

    /**
     * Initialize the thread lister.
     * Just get a pointer to our runtime object.
     * @param values The default attribute values.
     */
    public void initialize(Object values[]) {
  super.initialize(values) ;
  runtime = Runtime.getRuntime() ;
    }
}
TOP

Related Classes of org.w3c.jigsaw.status.ThreadStatFrame

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.