ViewVC Help
View File | Revision Log | Show Annotations | Revision Graph | Root Listing
root/i-scream/projects/cms/source/util/uk/org/iscream/cms/util/QueueMonitor.java
Revision: 1.1
Committed: Mon Feb 12 02:20:23 2001 UTC (23 years, 2 months ago) by tdb
Branch: MAIN
Log Message:
Initial checkin of the class to monitor a Queue.

File Contents

# User Rev Content
1 tdb 1.1 //---PACKAGE DECLARATION---
2     package uk.ac.ukc.iscream.util;
3    
4     //---IMPORTS---
5     import uk.ac.ukc.iscream.util.*;
6     import uk.ac.ukc.iscream.componentmanager.*;
7    
8     /**
9     * This class monitors a given Queue at regular intervals,
10     * reporting back to a Queue with XML - this could be the
11     * same Queue being monitored.
12     *
13     * @author $Author$
14     * @version $Id$
15     */
16     class QueueMonitor extends Thread {
17    
18     //---FINAL ATTRIBUTES---
19    
20     /**
21     * The current CVS revision of this class
22     */
23     public static final String REVISION = "$Revision: 1.1 $";
24    
25     //---STATIC METHODS---
26    
27     //---CONSTRUCTORS---
28    
29     /**
30     * Construct a new QueueMonitor.
31     *
32     * @param sourceQueue The Queue to monitor
33     * @param destQueue The Queue to monitor to
34     * @param interval The interval, in milliseconds, at which to sample
35     * @param name A name to identify the source Queue with
36     */
37     public QueueMonitor (Queue sourceQueue, Queue destQueue, long interval, String name) {
38     _sourceQueue = sourceQueue;
39     _destQueue = destQueue;
40     _interval = interval;
41     _srcName = name;
42     }
43    
44     //---PUBLIC METHODS---
45    
46     /**
47     * Loops continuosly polling our source Queue at
48     * the given interval, and then logging the results
49     * in the destination Queue.
50     */
51     public void run() {
52     _run = true;
53     // so we can stop this thread...
54     while(_run) {
55     // first sleep for our interval
56     try { Thread.sleep(_interval); } catch(Exception e) {}
57     // check the Queue
58     String status = _sourceQueue.xmlStatus();
59     // create some XML
60     String date = new Long(System.currentTimeMillis()/((long) 1000)).toString();
61     String xml = "<packet type=\"queueStat\" date=\""+date+"\" name=\""+_srcName+"\">" + status + "</packet>";
62     // write XML to destination Queue
63     _destQueue.add(xml);
64     }
65     }
66    
67     /**
68     * Shuts down this QueueMonitor
69     */
70     public void shutdown() {
71     // this will stop the main loop
72     _run = false;
73     }
74    
75     /**
76     * Overrides the {@link java.lang.Object#toString() Object.toString()}
77     * method to provide clean logging (every class should have this).
78     *
79     * This uses the uk.ac.ukc.iscream.util.FormatName class
80     * to format the toString()
81     *
82     * @return the name of this class and its CVS revision
83     */
84     public String toString() {
85     return FormatName.getName(
86     _name,
87     getClass().getName(),
88     REVISION);
89     }
90    
91     //---PRIVATE METHODS---
92    
93     //---ACCESSOR/MUTATOR METHODS---
94    
95     //---ATTRIBUTES---
96    
97     /**
98     * This is the friendly identifier of the
99     * component this class is running in.
100     * eg, a Filter may be called "filter1",
101     * If this class does not have an owning
102     * component, a name from the configuration
103     * can be placed here. This name could also
104     * be changed to null for utility classes.
105     */
106     private String _name = null;
107    
108     /**
109     * The Queue we're monitoring.
110     */
111     private Queue _sourceQueue;
112    
113     /**
114     * The Queue we'll output results to.
115     */
116     private Queue _destQueue;
117    
118     /**
119     * The interval at which we'll check the
120     * sourceQueue status.
121     */
122     private long _interval;
123    
124     /**
125     * The name to identify the source Queue
126     */
127     private String _srcName;
128    
129     /**
130     * Allows us to stop the main loop cleanly.
131     */
132     private boolean _run;
133    
134     //---STATIC ATTRIBUTES---
135    
136     }