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.1 by ajm, Thu Mar 22 01:51:51 2001 UTC vs.
Revision 1.18 by tdb, Sun Aug 1 10:40:45 2004 UTC

# Line 1 | Line 1
1 + /*
2 + * i-scream central monitoring system
3 + * http://www.i-scream.org
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.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(!checkBooleanConfig("Queue", "Monitor." + _name + ".enable")) {
72 >            return;
73 >        }
74 >        if (packet.getParam("packet.attributes.type").equals("queueStat")) {
75 >            String source = packet.getParam("packet.attributes.hashCode");
76              if (!_hosts.containsKey(source)) {
77                  _hosts.put(source, new HashMap());
78              }
# Line 56 | Line 90 | public class Queue__Monitor extends MonitorSkeleton {
90              while (i.hasNext()) {
91                  String dataKey = (String) i.next();
92                  if(dataKey.startsWith("packet.queue.attributes.queue")) {
93 <                    queueSize = packet.getParam(datakey);
93 >                    String queueSize = packet.getParam(dataKey);
94 >                    
95 >                    // silently ignore these
96 >                    // they're generated by the queueMonitor for deleted queues
97 >                    if(queueSize.equals("[deleted]")) {
98 >                        break;
99 >                    }
100  
101                      // *** now process this queue ***
102  
103                      // check if we've seen this queue before on a previous run
104                      // if not, we need to create a register for it
105                      if(!queueRegisters.containsKey(dataKey)) {
106 <                        queueRegisters.put(dataKey, new Register(source, _name));
106 >                        queueRegisters.put(dataKey, new Register(_name, _name));
107                      }
108  
109                      // get the register for this disk
110 <                    Register reg = (Register) diskRegisters.get(data);
110 >                    Register reg = (Register) queueRegisters.get(dataKey);
111  
112                      // get the packet data
113 <                    double qMax, qSize
113 >                    double qMax, qSize;
114                      try {
115              
116 <                        if(total==null || avail==null) {
116 >                        if(maxQueueSize==null || queueSize==null) {
117                              throw new NumberFormatException("Queue data invalid");
118                          }
119                          qMax = Double.parseDouble(maxQueueSize);
# Line 86 | Line 126 | public class Queue__Monitor extends MonitorSkeleton {
126                      
127                      boolean useValue = false;
128                      try {
129 <                        String option = _cp.getProperty("Host." + source, "Monitor." + _name + ".thresholdMeasure");
129 >                        String option = _cp.getProperty(_name, "Monitor." + _name + ".thresholdMeasure");
130                          if (option.equals("VALUE")) {
131                              useValue = true;
132                          }                            
# Line 94 | Line 134 | public class Queue__Monitor extends MonitorSkeleton {
134                          // we default to percentage
135                      }
136                      
137 <                    // this  bit determines if the disk check is a % check
138 <                    // or a kb check
137 >                    // this  bit determines if the queue check is a % check
138 >                    // or a literal value check
139                      double checkValue;
140                      String type;
141                      if(useValue) {
142 <                        // kb disk in use
142 >                        // queue count
143                          checkValue = qSize;
144                          type = "count";
145                      } else {
146 <                        // % disk in use
146 >                        // % of queue
147                          checkValue = (qSize / qMax) * 100;
148                          type = "%";
149                      }
150                      
111                    
112                    
151                      int newThreshold = checkAttributeThreshold(checkValue, reg);
152          
153                      // format the checkValue to a String
# Line 119 | Line 157 | public class Queue__Monitor extends MonitorSkeleton {
157                      String strCheckValue = nf.format(checkValue);
158  
159                      // say which disk had the problem
160 <                    String attributeName = "Size of queue " + type + " in " + queueName;
160 >                    String attributeName = "Size of queue " + type + " in " + queueName + " " + dataKey.substring(dataKey.lastIndexOf('.')+1);
161                                              
162 <                    processAlert(newThreshold, attributeName, reg, source, strCheckValue);
162 >                    processAlert(newThreshold, attributeName, reg, SOURCE, strCheckValue);
163                    
164                  }
165              }
# Line 132 | Line 170 | public class Queue__Monitor extends MonitorSkeleton {
170       * Overrides the {@link java.lang.Object#toString() Object.toString()}
171       * method to provide clean logging (every class should have this).
172       *
173 <     * This uses the uk.org.iscream.util.NameFormat class
173 >     * This uses the uk.org.iscream.cms.util.NameFormat class
174       * to format the toString()
175       *
176       * @return the name of this class and its CVS revision
# Line 152 | Line 190 | public class Queue__Monitor extends MonitorSkeleton {
190      }
191  
192   //---PRIVATE METHODS---
193 <
193 >    
194 >    /**
195 >     * Checks a piece of current data, and returns the
196 >     * threshold it breaches, if any.
197 >     *
198 >     * @param qSize the size of a queue
199 >     * @param reg the Register for the host
200 >     * @return the threshold level breached, if any
201 >     */
202      private int checkAttributeThreshold(double qSize, Register reg) {
203          for(int thresholdLevel = Alert.thresholdLevels.length - 1; thresholdLevel >= 0; thresholdLevel--) {
204              if (reg.getThreshold(thresholdLevel) != -1.0) {
# Line 165 | Line 211 | public class Queue__Monitor extends MonitorSkeleton {
211      }
212  
213   //---ACCESSOR/MUTATOR METHODS---
214 +    
215 +    /**
216 +     * Returns a reference to a specific Queue for this
217 +     * monitor. This Queue returns only the data packets
218 +     * (based on type) that we want too look at.
219 +     *
220 +     * @return a reference to a Queue
221 +     */
222 +    protected Queue getQueue() {
223 +        return MonitorManager.getInstance().getOtherQueue();
224 +    }
225  
226 +
227   //---ATTRIBUTES---
228  
229      /**
# Line 183 | Line 241 | public class Queue__Monitor extends MonitorSkeleton {
241       * A reference to the configuration proxy in use
242       */
243      private ConfigurationProxy _cp = ConfigurationProxy.getInstance();
244 <
244 >    
245 >    /**
246 >     * A HashMap of Registers (or groups of Registers), one
247 >     * for each host we're monitoring.
248 >     */
249      private HashMap _hosts = new HashMap();
250  
251   //---STATIC ATTRIBUTES---

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines