ViewVC Help
View File | Revision Log | Show Annotations | Revision Graph | Root Listing
root/i-scream/projects/cms/source/server/uk/org/iscream/cms/server/client/MonitorManager.java
(Generate patch)

Comparing projects/cms/source/server/uk/org/iscream/cms/server/client/MonitorManager.java (file contents):
Revision 1.10 by tdb, Thu Mar 22 17:54:43 2001 UTC vs.
Revision 1.20 by tdb, Fri Jul 25 14:35:29 2003 UTC

# Line 1 | Line 1
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.client;
22 > package uk.org.iscream.cms.server.client;
23  
24   //---IMPORTS---
25 < import uk.org.iscream.componentmanager.*;
26 < import uk.org.iscream.core.*;
27 < import uk.org.iscream.util.*;
25 > import uk.org.iscream.cms.server.componentmanager.*;
26 > import uk.org.iscream.cms.server.core.*;
27 > import uk.org.iscream.cms.util.*;
28   import java.util.*;
29  
30   /**
31   * A manager for the Monitors.
32   *
33 + * This class starts by loading all the monitors as specificed in the configuration.
34 + * These monitors should implement the PluginMonitor interface.
35 + *
36 + * This class then takes the feed of data coming in over CORBA from
37 + * the ClientServant queue.  This data is then looked at to determine
38 + * type.  It then places it into either a data queue, or an other
39 + * queue, and all data in the the all queue.
40 + *
41 + * Monitors then read the data off the queue that they are interested in
42 + * and process the data accordingly.
43 + *
44   * @author  $Author$
45   * @version $Id$
46   */
47 < class MonitorManager extends Thread {
47 > public class MonitorManager extends Thread {
48  
49   //---FINAL ATTRIBUTES---
50  
# Line 28 | Line 59 | class MonitorManager extends Thread {
59       * Return a reference to the single class.
60       * Construct it if it does not already exist, otherwise just return the reference.
61       */
62 <    public static MonitorManager getInstance() {
62 >    public synchronized static MonitorManager getInstance() {
63          if (_instance == null){
64              _instance = new MonitorManager();
65          }
# Line 37 | Line 68 | class MonitorManager extends Thread {
68  
69   //---CONSTRUCTORS---
70  
71 +    /**
72 +     * Constructs a new MonitorManager.
73 +     * This initialises all the queues and loads
74 +     * all the Monitors that have been specified in the configuration
75 +     */
76      private MonitorManager() {
77          // set our name
78          setName("client.MonitorManager");
# Line 57 | Line 93 | class MonitorManager extends Thread {
93              String queueRemoveAlgorithm = cp.getProperty(_name, "Queue.RemoveAlgorithm");
94              int algorithm = StringUtils.getStringPos(queueRemoveAlgorithm, Queue.algorithms);
95              if(algorithm != -1) {
96 <                _logger.write(toString(), Logger.DEBUG, "Starting 4 Queues with size limit of "+queueSizeLimit+", using remove algorithm "+queueRemoveAlgorithm);
96 >                _logger.write(toString(), Logger.DEBUG, "Starting 3 Queues with size limit of "+queueSizeLimit+", using remove algorithm "+queueRemoveAlgorithm);
97                  // we have valid values, so lets start it.
98                  _dataQueue = new Queue(queueSizeLimit, algorithm);
63                _heartbeatQueue = new Queue(queueSizeLimit, algorithm);
99                  _otherQueue = new Queue(queueSizeLimit, algorithm);
100                  _allQueue = new Queue(queueSizeLimit, algorithm);
101              }
# Line 68 | Line 103 | class MonitorManager extends Thread {
103                  _logger.write(toString(), Logger.WARNING, "Bad Queue Algorithm configuration, not known: "+queueRemoveAlgorithm);
104                  // just don't activate a limit
105                  _dataQueue = new Queue();
71                _heartbeatQueue = new Queue();
106                  _otherQueue = new Queue();
107                  _allQueue = new Queue();
108              }
# Line 76 | Line 110 | class MonitorManager extends Thread {
110              _logger.write(toString(), Logger.DEBUG, "Optional config not set: "+e);
111              // just don't activate a limit
112              _dataQueue = new Queue();
79            _heartbeatQueue = new Queue();
113              _otherQueue = new Queue();
114              _allQueue = new Queue();
115          } catch (NumberFormatException e) {
116              _logger.write(toString(), Logger.WARNING, "Bad Queue SizeLimit configuration: "+e);
117              // just don't activate a limit
118              _dataQueue = new Queue();
86            _heartbeatQueue = new Queue();
119              _otherQueue = new Queue();
120              _allQueue = new Queue();
121          }
# Line 93 | Line 125 | class MonitorManager extends Thread {
125              // try to get the interval, if this fails, we won't start up the monitor
126              int queueMonitorInterval = Integer.parseInt(cp.getProperty(_name, "Queue.MonitorInterval"));
127              _dataQueue.startMonitor(queueMonitorInterval*1000, ClientMain._monitorQueue, _name + " DataQueue");
96            _heartbeatQueue.startMonitor(queueMonitorInterval*1000, ClientMain._monitorQueue, _name + " HeartbeatQueue");
128              _otherQueue.startMonitor(queueMonitorInterval*1000, ClientMain._monitorQueue, _name + " OtherQueue");
129              _allQueue.startMonitor(queueMonitorInterval*1000, ClientMain._monitorQueue, _name + " AllQueue");
130          } catch (PropertyNotFoundException e) {
# Line 139 | Line 170 | class MonitorManager extends Thread {
170  
171   //---PUBLIC METHODS---
172      
173 +    /**
174 +     * Runs the MonitorManager.  This reads data from the
175 +     * inbound queue (from the ClientServant).  And passes
176 +     * it into the appropriate queue for processing by the monitor
177 +     * threads.
178 +     */
179      public void run() {
143        // construct now, and use multiple times
144        XMLPacketMaker xmlPacketMaker = new XMLPacketMaker();
145        
180          boolean run=true;
181          
182          // keep these out here, saves recreating the object
# Line 159 | Line 193 | class MonitorManager extends Thread {
193              XMLPacket packet = null;
194              
195              try {
196 <                packet = xmlPacketMaker.createXMLPacket(xml);
196 >                packet = _xmlCache.getXMLPacket(xml);
197              } catch(InvalidXMLException e) {
198                  _logger.write(toString(), Logger.ERROR, "Invalid XML: "+e);
199                  // skip the rest of this loop iteration
200                  continue;
201              }
202 +
203 +            if(packet == null) {
204 +                _logger.write(toString(), Logger.WARNING, "Got a null packet when parsing: "+xml);
205 +                // skip to next packet
206 +                continue;
207 +            }
208              
209              // examine the packet and place it in the relevant outgoing queue
210 <            if(packet.getParam("packet.attributes.type").equals("data")) {
210 >            if(packet.getParam("packet.attributes.type") != null &&
211 >               packet.getParam("packet.attributes.type").equals("data")) {
212                  _dataQueue.add(packet);
213              }
173            else if(packet.getParam("packet.attributes.type").equals("heartbeat")) {
174                _heartbeatQueue.add(packet);
175            }
214              else {
215                  _otherQueue.add(packet);
216              }
# Line 185 | Line 223 | class MonitorManager extends Thread {
223       * Overrides the {@link java.lang.Object#toString() Object.toString()}
224       * method to provide clean logging (every class should have this).
225       *
226 <     * This uses the uk.org.iscream.util.FormatName class
226 >     * This uses the uk.org.iscream.cms.util.FormatName class
227       * to format the toString()
228       *
229       * @return the name of this class and its CVS revision
# Line 201 | Line 239 | class MonitorManager extends Thread {
239  
240   //---ACCESSOR/MUTATOR METHODS---
241      
242 +    /**
243 +     * Allows Monitors to obtain
244 +     * the queue of data packets
245 +     */
246      public Queue getDataQueue() {
247          return _dataQueue;
248      }
249      
250 <    public Queue getHeartbeatQueue() {
251 <        return _heartbeatQueue;
252 <    }
253 <    
250 >    /**
251 >     * Allows Monitors to obtain
252 >     * the queue of all other packets
253 >     */
254      public Queue getOtherQueue() {
255          return _otherQueue;
256      }
257      
258 +    /**
259 +     * In case a Monitor wants more
260 +     * than one type of packet,
261 +     * this queue can be obtained.
262 +     */
263      public Queue getAllQueue() {
264          return _allQueue;
265      }
# Line 267 | Line 314 | class MonitorManager extends Thread {
314      private Queue _dataQueue;
315      
316      /**
270     * Outgoing heartbeat Queue
271     */
272    private Queue _heartbeatQueue;
273    
274    /**
317       * Outgoing other Queue
318       */
319      private Queue _otherQueue;
# Line 280 | Line 322 | class MonitorManager extends Thread {
322       * Outgoing ALL Queue
323       */
324      private Queue _allQueue;
325 +    
326 +    /**
327 +     * A reference to the XMLCache in use
328 +     */
329 +    private XMLCache _xmlCache = XMLCache.getInstance();
330      
331   //---STATIC ATTRIBUTES---
332  

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines