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
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

# User Rev Content
1 tdb 1.1 /*
2     * i-scream central monitoring system
3 tdb 1.5 * http://www.i-scream.org
4 tdb 1.1 * 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 tdb 1.2 * @author $Author: tdb $
35 tdb 1.5 * @version $Id: Paging__Monitor.java,v 1.4 2004/01/15 14:10:13 tdb Exp $
36 tdb 1.1 */
37     public class Paging__Monitor extends MonitorSkeleton {
38    
39     //---FINAL ATTRIBUTES---
40    
41     /**
42     * The current CVS revision of this class
43     */
44 tdb 1.5 public final String REVISION = "$Revision: 1.4 $";
45 tdb 1.1
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 tdb 1.4 if(!checkBooleanConfig("Host." + source, "Monitor." + _name + ".enable")) {
66 tdb 1.3 return;
67     }
68 tdb 1.1 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 tdb 1.2 private String[] _attributes = { "packet.pages.pageins", "packet.pages.pageouts" };
191 tdb 1.1
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     }