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/Process__Monitor.java
Revision: 1.10
Committed: Sun Aug 1 10:40:45 2004 UTC (19 years, 9 months ago) by tdb
Branch: MAIN
CVS Tags: HEAD
Changes since 1.9: +3 -3 lines
Log Message:
Catch a lot of old URL's and update them. Also remove a couple of old files
that aren't used.

File Contents

# Content
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.cms.server.client.monitors;
23
24 //---IMPORTS---
25 import java.util.HashMap;
26 import uk.org.iscream.cms.server.client.*;
27 import uk.org.iscream.cms.server.core.*;
28 import uk.org.iscream.cms.util.*;
29 import uk.org.iscream.cms.server.componentmanager.*;
30
31 /**
32 * This Monitor watches the Process Counts for all machines
33 *
34 * @author $Author: tdb $
35 * @version $Id: Process__Monitor.java,v 1.9 2004/01/15 14:10:13 tdb Exp $
36 */
37 public class Process__Monitor extends MonitorSkeleton {
38
39 //---FINAL ATTRIBUTES---
40
41 /**
42 * The current CVS revision of this class
43 */
44 public final String REVISION = "$Revision: 1.9 $";
45
46 /**
47 * A description of this monitor
48 */
49 public final String DESC = "Monitors Process Counts.";
50
51 //---STATIC METHODS---
52
53 //---CONSTRUCTORS---
54
55 //---PUBLIC METHODS---
56
57 /**
58 * Analyse a packet of data, and generate an alert if
59 * necessary.
60 *
61 * @param packet the XMLPacket to analyse
62 */
63 public void analysePacket(XMLPacket packet) {
64 String source = packet.getParam("packet.attributes.machine_name");
65 if(!checkBooleanConfig("Host." + source, "Monitor." + _name + ".enable")) {
66 return;
67 }
68 if (!_hosts.containsKey(source)) {
69 HashMap attributeRegisters = new HashMap();
70 initAttributeRegsiters(source, attributeRegisters);
71 _hosts.put(source, attributeRegisters);
72 }
73
74 HashMap attributeRegisters = (HashMap) _hosts.get(source);
75 for(int attributeNum = 0; attributeNum < _attributes.length; attributeNum++) {
76 Register reg = (Register) attributeRegisters.get(_attributes[attributeNum]);
77 // find out the threshold level we're at
78 String attribute = _attributes[attributeNum];
79 String attributeName = _attributeNames[attributeNum];
80 String currentValue = packet.getParam(attribute);
81 int newThreshold = checkAttributeThreshold(currentValue, reg);
82 processAlert(newThreshold, attributeName, reg, source, currentValue);
83 }
84 }
85
86 /**
87 * Overrides the {@link java.lang.Object#toString() Object.toString()}
88 * method to provide clean logging (every class should have this).
89 *
90 * This uses the uk.org.iscream.cms.util.NameFormat class
91 * to format the toString()
92 *
93 * @return the name of this class and its CVS revision
94 */
95 public String toString() {
96 return FormatName.getName(
97 _name,
98 getClass().getName(),
99 REVISION);
100 }
101
102 /**
103 * return the String representation of what the monitor does
104 */
105 public String getDescription(){
106 return DESC;
107 }
108
109 //---PRIVATE METHODS---
110
111 /**
112 * Checks a piece of current data, and returns the
113 * threshold it breaches, if any.
114 *
115 * @param attributeString a String representing the current data value
116 * @param reg the Register for the host
117 * @return the threshold level breached, if any
118 */
119 private int checkAttributeThreshold(String attributeString, Register reg) {
120 for(int thresholdLevel = Alert.thresholdLevels.length - 1; thresholdLevel >= 0; thresholdLevel--) {
121 if (reg.getThreshold(thresholdLevel) != -1.0) {
122 if(attributeString != null) {
123 try {
124 double attribute = Double.parseDouble(attributeString);
125 if (reg.getThreshold(thresholdLevel) < attribute) return thresholdLevel;
126 } catch (NumberFormatException e) {
127 // we got some duff data in the packet, but we shouldn't have
128 _logger.write(toString(), Logger.DEBUG, "possible errenous packet data, should be double value - " + attributeString);
129 }
130 }
131 }
132 }
133 return Alert.thresholdNORMAL;
134 }
135
136 /**
137 * Initialises a HashMap of Registers with the current list
138 * of attributes. This is only used if we are looking at more
139 * than one distinct attribute.
140 *
141 * @param source the host we are looking at
142 * @param attributeRegisters a HashMap to put the new Registers in
143 */
144 private void initAttributeRegsiters(String source, HashMap attributeRegisters) {
145 for(int attributeNum = 0; attributeNum < _attributes.length; attributeNum++) {
146 String attributeName = _attributes[attributeNum].substring(_attributes[attributeNum].lastIndexOf(".") + 1);
147 attributeRegisters.put(_attributes[attributeNum], new Register(source, _name, attributeName));
148 }
149 }
150
151 //---ACCESSOR/MUTATOR METHODS---
152
153 /**
154 * Returns a reference to a specific Queue for this
155 * monitor. This Queue returns only the data packets
156 * (based on type) that we want too look at.
157 *
158 * @return a reference to a Queue
159 */
160 protected Queue getQueue() {
161 return MonitorManager.getInstance().getDataQueue();
162 }
163
164 //---ATTRIBUTES---
165
166 /**
167 * This is the friendly identifier of the
168 * component this class is running in.
169 * eg, a Filter may be called "filter1",
170 * If this class does not have an owning
171 * component, a name from the configuration
172 * can be placed here. This name could also
173 * be changed to null for utility classes.
174 */
175 private String _name = "Process";
176
177 /**
178 * A HashMap of Registers (or groups of Registers), one
179 * for each host we're monitoring.
180 */
181 private HashMap _hosts = new HashMap();
182
183 /**
184 * An array of attributes which we will be checking.
185 */
186 private String[] _attributes = { "packet.processes.total", "packet.processes.cpu", "packet.processes.sleeping", "packet.processes.stopped", "packet.processes.zombie" };
187
188 /**
189 * An array of "nice names" for the attributes in _attributes.
190 */
191 private String[] _attributeNames = {"Total Processes", "on CPU Processes", "Sleeping Processes", "Stopped Processes", "Zombie Processes"};
192
193 //---STATIC ATTRIBUTES---
194
195 }