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