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/monitors/Queue__Monitor.java
(Generate patch)

Comparing projects/cms/source/server/uk/org/iscream/cms/server/client/monitors/Queue__Monitor.java (file contents):
Revision 1.2 by ajm, Thu Mar 22 01:55:18 2001 UTC vs.
Revision 1.15 by tdb, Tue May 21 16:47:16 2002 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.monitors;
22 > package uk.org.iscream.cms.server.client.monitors;
23  
24   //---IMPORTS---
25   import java.util.HashMap;
# Line 7 | Line 27 | import java.util.ArrayList;
27   import java.util.Set;
28   import java.util.Iterator;
29   import java.text.NumberFormat;
30 < import uk.org.iscream.client.*;
31 < import uk.org.iscream.core.*;
32 < import uk.org.iscream.util.*;
33 < import uk.org.iscream.componentmanager.*;
30 > import uk.org.iscream.cms.server.client.*;
31 > import uk.org.iscream.cms.server.core.*;
32 > import uk.org.iscream.cms.server.util.*;
33 > import uk.org.iscream.cms.server.componentmanager.*;
34  
35   /**
36   * This Monitor watches the internal server queues.
# Line 28 | Line 48 | public class Queue__Monitor extends MonitorSkeleton {
48       */
49      public final String REVISION = "$Revision$";
50      
51 +    /**
52 +     * A description of this monitor
53 +     */
54      public final String DESC = "Who watches the watchmen?";
55      
56 +    private final String SOURCE = "i-scream-server";
57 +    
58   //---STATIC METHODS---
59  
60   //---CONSTRUCTORS---
61  
62   //---PUBLIC METHODS---
63 <
63 >    
64 >    /**
65 >     * Analyse a packet of data, and generate an alert if
66 >     * necessary.
67 >     *
68 >     * @param packet the XMLPacket to analyse
69 >     */
70      public void analysePacket(XMLPacket packet) {
71 <        if (packet.getParam("packet.attributes.type").equals("data")) {
72 <            String source = packet.getParam("packet.attributes.machine_name");
71 >        if (packet.getParam("packet.attributes.type").equals("queueStat")) {
72 >            String source = packet.getParam("packet.attributes.hashCode");
73              if (!_hosts.containsKey(source)) {
74                  _hosts.put(source, new HashMap());
75              }
# Line 57 | Line 88 | public class Queue__Monitor extends MonitorSkeleton {
88                  String dataKey = (String) i.next();
89                  if(dataKey.startsWith("packet.queue.attributes.queue")) {
90                      String queueSize = packet.getParam(dataKey);
91 +                    
92 +                    // silently ignore these
93 +                    // they're generated by the queueMonitor for deleted queues
94 +                    if(queueSize.equals("[deleted]")) {
95 +                        break;
96 +                    }
97  
98                      // *** now process this queue ***
99  
100                      // check if we've seen this queue before on a previous run
101                      // if not, we need to create a register for it
102                      if(!queueRegisters.containsKey(dataKey)) {
103 <                        queueRegisters.put(dataKey, new Register(source, _name));
103 >                        queueRegisters.put(dataKey, new Register(_name, _name));
104                      }
105  
106                      // get the register for this disk
# Line 86 | Line 123 | public class Queue__Monitor extends MonitorSkeleton {
123                      
124                      boolean useValue = false;
125                      try {
126 <                        String option = _cp.getProperty("Host." + source, "Monitor." + _name + ".thresholdMeasure");
126 >                        String option = _cp.getProperty(_name, "Monitor." + _name + ".thresholdMeasure");
127                          if (option.equals("VALUE")) {
128                              useValue = true;
129                          }                            
# Line 94 | Line 131 | public class Queue__Monitor extends MonitorSkeleton {
131                          // we default to percentage
132                      }
133                      
134 <                    // this  bit determines if the disk check is a % check
135 <                    // or a kb check
134 >                    // this  bit determines if the queue check is a % check
135 >                    // or a literal value check
136                      double checkValue;
137                      String type;
138                      if(useValue) {
139 <                        // kb disk in use
139 >                        // queue count
140                          checkValue = qSize;
141                          type = "count";
142                      } else {
143 <                        // % disk in use
143 >                        // % of queue
144                          checkValue = (qSize / qMax) * 100;
145                          type = "%";
146                      }
147                      
111                    
112                    
148                      int newThreshold = checkAttributeThreshold(checkValue, reg);
149          
150                      // format the checkValue to a String
# Line 119 | Line 154 | public class Queue__Monitor extends MonitorSkeleton {
154                      String strCheckValue = nf.format(checkValue);
155  
156                      // say which disk had the problem
157 <                    String attributeName = "Size of queue " + type + " in " + queueName;
157 >                    String attributeName = "Size of queue " + type + " in " + queueName + " " + dataKey.substring(dataKey.lastIndexOf('.')+1);
158                                              
159 <                    processAlert(newThreshold, attributeName, reg, source, strCheckValue);
159 >                    processAlert(newThreshold, attributeName, reg, SOURCE, strCheckValue);
160                    
161                  }
162              }
# Line 132 | Line 167 | public class Queue__Monitor extends MonitorSkeleton {
167       * Overrides the {@link java.lang.Object#toString() Object.toString()}
168       * method to provide clean logging (every class should have this).
169       *
170 <     * This uses the uk.org.iscream.util.NameFormat class
170 >     * This uses the uk.org.iscream.cms.server.util.NameFormat class
171       * to format the toString()
172       *
173       * @return the name of this class and its CVS revision
# Line 152 | Line 187 | public class Queue__Monitor extends MonitorSkeleton {
187      }
188  
189   //---PRIVATE METHODS---
190 <
190 >    
191 >    /**
192 >     * Checks a piece of current data, and returns the
193 >     * threshold it breaches, if any.
194 >     *
195 >     * @param qSize the size of a queue
196 >     * @param reg the Register for the host
197 >     * @return the threshold level breached, if any
198 >     */
199      private int checkAttributeThreshold(double qSize, Register reg) {
200          for(int thresholdLevel = Alert.thresholdLevels.length - 1; thresholdLevel >= 0; thresholdLevel--) {
201              if (reg.getThreshold(thresholdLevel) != -1.0) {
# Line 165 | Line 208 | public class Queue__Monitor extends MonitorSkeleton {
208      }
209  
210   //---ACCESSOR/MUTATOR METHODS---
211 +    
212 +    /**
213 +     * Returns a reference to a specific Queue for this
214 +     * monitor. This Queue returns only the data packets
215 +     * (based on type) that we want too look at.
216 +     *
217 +     * @return a reference to a Queue
218 +     */
219 +    protected Queue getQueue() {
220 +        return MonitorManager.getInstance().getOtherQueue();
221 +    }
222  
223 +
224   //---ATTRIBUTES---
225  
226      /**
# Line 183 | Line 238 | public class Queue__Monitor extends MonitorSkeleton {
238       * A reference to the configuration proxy in use
239       */
240      private ConfigurationProxy _cp = ConfigurationProxy.getInstance();
241 <
241 >    
242 >    /**
243 >     * A HashMap of Registers (or groups of Registers), one
244 >     * for each host we're monitoring.
245 >     */
246      private HashMap _hosts = new HashMap();
247  
248   //---STATIC ATTRIBUTES---

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines