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.11
Committed: Wed Feb 5 14:27:59 2003 UTC (21 years, 2 months ago) by tdb
Branch: MAIN
Changes since 1.10: +4 -4 lines
Log Message:
Util package has been pulled out of the server. Next step will be to modify
the server and conient (and anything else?) to use this instead. New
package name is uk.org.iscream.cms.util. All the java files were moved with
a repo copy, so they retain their history.

File Contents

# Content
1 /*
2 * i-scream central monitoring system
3 * http://www.i-scream.org.uk
4 * Copyright (C) 2000-2002 i-scream
5 *
6 * This program is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU General Public License
8 * as published by the Free Software Foundation; either version 2
9 * of the License, or (at your option) any later version.
10 *
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, write to the Free Software
18 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
19 */
20
21 //---PACKAGE DECLARATION---
22 package uk.org.iscream.cms.util;
23
24 //---IMPORTS---
25 //import uk.org.iscream.cms.util.*;
26
27 /**
28 * This class monitors a given Queue at regular intervals,
29 * reporting back to a Queue with XML - this could be the
30 * same Queue being monitored.
31 *
32 * @author $Author: tdb $
33 * @version $Id: QueueMonitor.java,v 1.10 2002/05/21 16:47:19 tdb Exp $
34 */
35 class QueueMonitor extends Thread {
36
37 //---FINAL ATTRIBUTES---
38
39 /**
40 * The current CVS revision of this class
41 */
42 public static final String REVISION = "$Revision: 1.10 $";
43
44 //---STATIC METHODS---
45
46 //---CONSTRUCTORS---
47
48 /**
49 * Construct a new QueueMonitor.
50 *
51 * @param sourceQueue The Queue to monitor
52 * @param destQueue The Queue to monitor to
53 * @param interval The interval, in milliseconds, at which to sample
54 * @param name A name to identify the source Queue with
55 */
56 public QueueMonitor (Queue sourceQueue, Queue destQueue, long interval, String name) {
57 // set the Thread name
58 setName("util.QueueMonitor");
59
60 _sourceQueue = sourceQueue;
61 _destQueue = destQueue;
62 _interval = interval;
63 _srcName = name;
64 }
65
66 //---PUBLIC METHODS---
67
68 /**
69 * Loops continuosly polling our source Queue at
70 * the given interval, and then logging the results
71 * in the destination Queue.
72 */
73 public void run() {
74 _run = true;
75 // so we can stop this thread...
76 while(_run) {
77 // first sleep for our interval
78 try { Thread.sleep(_interval); } catch(Exception e) {}
79 // check the Queue
80 String status = _sourceQueue.xmlStatus();
81 // get a hash of our Queue (for identification)
82 String hashCode = String.valueOf(_sourceQueue.hashCode());
83 // create some XML
84 String date = new Long(System.currentTimeMillis()/((long) 1000)).toString();
85 String xml = "<packet type=\"queueStat\" date=\""+date+"\" name=\""+_srcName+"\" hashCode=\""+hashCode+"\">" + status + "</packet>";
86 // write XML to destination Queue
87 _destQueue.add(xml);
88 }
89 }
90
91 /**
92 * Shuts down this QueueMonitor
93 */
94 public void shutdown() {
95 // this will stop the main loop
96 _run = false;
97 // get a hash of our Queue (for identification)
98 String hashCode = String.valueOf(_sourceQueue.hashCode());
99 // create some XML
100 String date = new Long(System.currentTimeMillis()/((long) 1000)).toString();
101 String xml = "<packet type=\"queueStat\" date=\""+date+"\" name=\""+_srcName+"\" hashCode=\""+hashCode+"\" shutdown=\"true\"></packet>";
102 // write XML to destination Queue
103 _destQueue.add(xml);
104 }
105
106 /**
107 * Overrides the {@link java.lang.Object#toString() Object.toString()}
108 * method to provide clean logging (every class should have this).
109 *
110 * This uses the uk.org.iscream.cms.server.util.FormatName class
111 * to format the toString()
112 *
113 * @return the name of this class and its CVS revision
114 */
115 public String toString() {
116 return FormatName.getName(
117 _name,
118 getClass().getName(),
119 REVISION);
120 }
121
122 //---PRIVATE METHODS---
123
124 //---ACCESSOR/MUTATOR METHODS---
125
126 //---ATTRIBUTES---
127
128 /**
129 * This is the friendly identifier of the
130 * component this class is running in.
131 * eg, a Filter may be called "filter1",
132 * If this class does not have an owning
133 * component, a name from the configuration
134 * can be placed here. This name could also
135 * be changed to null for utility classes.
136 */
137 private String _name = null;
138
139 /**
140 * The Queue we're monitoring.
141 */
142 private Queue _sourceQueue;
143
144 /**
145 * The Queue we'll output results to.
146 */
147 private Queue _destQueue;
148
149 /**
150 * The interval at which we'll check the
151 * sourceQueue status.
152 */
153 private long _interval;
154
155 /**
156 * The name to identify the source Queue
157 */
158 private String _srcName;
159
160 /**
161 * Allows us to stop the main loop cleanly.
162 */
163 private boolean _run;
164
165 //---STATIC ATTRIBUTES---
166
167 }