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/Paging__Monitor.java
Revision: 1.2
Committed: Sun Mar 9 23:51:52 2003 UTC (21 years, 2 months ago) by tdb
Branch: MAIN
Changes since 1.1: +3 -3 lines
Log Message:
ihost will (soon) be sending paging information with a different name. This
commit is updating the server and conient to know about this new name.

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.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 Paging activity for all machines
33 *
34 * @author $Author: tdb $
35 * @version $Id: Paging__Monitor.java,v 1.1 2003/03/09 21:49:13 tdb Exp $
36 */
37 public class Paging__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.1 $";
45
46 /**
47 * A description of this monitor
48 */
49 public final String DESC = "Monitors Paging activity.";
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
65 String source = packet.getParam("packet.attributes.machine_name");
66 if (!_hosts.containsKey(source)) {
67 HashMap attributeRegisters = new HashMap();
68 initAttributeRegsiters(source, attributeRegisters);
69 _hosts.put(source, attributeRegisters);
70 }
71
72 HashMap attributeRegisters = (HashMap) _hosts.get(source);
73 for(int attributeNum = 0; attributeNum < _attributes.length; attributeNum++) {
74 Register reg = (Register) attributeRegisters.get(_attributes[attributeNum]);
75 // find out the threshold level we're at
76 String attribute = _attributes[attributeNum];
77 String attributeName = _attributeNames[attributeNum];
78 String currentValue = packet.getParam(attribute);
79 // find out our new threshold
80 int newThreshold = checkAttributeThreshold(currentValue, reg);
81 // process this data to generate an alert
82 processAlert(newThreshold, attributeName, reg, source, currentValue);
83 }
84
85 }
86
87 /**
88 * Overrides the {@link java.lang.Object#toString() Object.toString()}
89 * method to provide clean logging (every class should have this).
90 *
91 * This uses the uk.org.iscream.cms.util.NameFormat class
92 * to format the toString()
93 *
94 * @return the name of this class and its CVS revision
95 */
96 public String toString() {
97 return FormatName.getName(
98 _name,
99 getClass().getName(),
100 REVISION);
101 }
102
103 /**
104 * return the String representation of what the monitor does
105 */
106 public String getDescription(){
107 return DESC;
108 }
109
110 //---PRIVATE METHODS---
111
112 /**
113 * Checks a piece of current data, and returns the
114 * threshold it breaches, if any.
115 *
116 * @param attributeString a String representing the current data value
117 * @param reg the Register for the host
118 * @return the threshold level breached, if any
119 */
120 private int checkAttributeThreshold(String attributeString, Register reg) {
121 for(int thresholdLevel = Alert.thresholdLevels.length - 1; thresholdLevel >= 0; thresholdLevel--) {
122 if (reg.getThreshold(thresholdLevel) != -1.0) {
123 if(attributeString != null) {
124 try {
125 int attribute = Integer.parseInt(attributeString);
126 if (reg.getThreshold(thresholdLevel) < attribute) return thresholdLevel;
127 } catch (NumberFormatException e) {
128 // we got some duff data in the packet, but we shouldn't have
129 _logger.write(toString(), Logger.DEBUG, "possible errenous packet data, should be double value - " + attributeString);
130 }
131 }
132 }
133 }
134 return Alert.thresholdNORMAL;
135 }
136
137 /**
138 * Initialises a HashMap of Registers with the current list
139 * of attributes. This is only used if we are looking at more
140 * than one distinct attribute.
141 *
142 * @param source the host we are looking at
143 * @param attributeRegisters a HashMap to put the new Registers in
144 */
145 private void initAttributeRegsiters(String source, HashMap attributeRegisters) {
146 for(int attributeNum = 0; attributeNum < _attributes.length; attributeNum++) {
147 String attributeName = _attributes[attributeNum].substring(_attributes[attributeNum].lastIndexOf(".") + 1);
148 attributeRegisters.put(_attributes[attributeNum], new Register(source, _name, attributeName));
149 }
150 }
151
152 //---ACCESSOR/MUTATOR METHODS---
153
154 /**
155 * Returns a reference to a specific Queue for this
156 * monitor. This Queue returns only the data packets
157 * (based on type) that we want too look at.
158 *
159 * @return a reference to a Queue
160 */
161 protected Queue getQueue() {
162 return MonitorManager.getInstance().getDataQueue();
163 }
164
165
166 //---ATTRIBUTES---
167
168 /**
169 * This is the friendly identifier of the
170 * component this class is running in.
171 * eg, a Filter may be called "filter1",
172 * If this class does not have an owning
173 * component, a name from the configuration
174 * can be placed here. This name could also
175 * be changed to null for utility classes.
176 */
177 private String _name = "Paging";
178
179 /**
180 * A HashMap of Registers (or groups of Registers), one
181 * for each host we're monitoring.
182 */
183 private HashMap _hosts = new HashMap();
184
185 /**
186 * An array of attributes which we will be checking.
187 */
188 private String[] _attributes = { "packet.pages.pageins", "packet.pages.pageouts" };
189
190 /**
191 * An array of "nice names" for the attributes in _attributes.
192 */
193 private String[] _attributeNames = {"Pages in", "Pages out"};
194
195 //---STATIC ATTRIBUTES---
196
197 }