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/UserCount__Monitor.java
Revision: 1.6
Committed: Wed Feb 5 16:43:46 2003 UTC (21 years, 4 months ago) by tdb
Branch: MAIN
Changes since 1.5: +4 -4 lines
Log Message:
Changed the server to use the external util package. Quite a minor change,
but does affect a lot of files.

File Contents

# User Rev Content
1 tdb 1.4 /*
2     * i-scream central monitoring system
3 tdb 1.5 * http://www.i-scream.org.uk
4 tdb 1.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 tdb 1.1 //---PACKAGE DECLARATION---
22 tdb 1.3 package uk.org.iscream.cms.server.client.monitors;
23 tdb 1.1
24     //---IMPORTS---
25     import java.util.HashMap;
26 tdb 1.3 import uk.org.iscream.cms.server.client.*;
27     import uk.org.iscream.cms.server.core.*;
28 tdb 1.6 import uk.org.iscream.cms.util.*;
29 tdb 1.3 import uk.org.iscream.cms.server.componentmanager.*;
30 tdb 1.1
31     /**
32     * This Monitor watches the logged on user count for all machines
33     *
34 tdb 1.4 * @author $Author: tdb $
35 tdb 1.6 * @version $Id: UserCount__Monitor.java,v 1.5 2002/05/21 16:47:16 tdb Exp $
36 tdb 1.1 */
37     public class UserCount__Monitor extends MonitorSkeleton {
38    
39     //---FINAL ATTRIBUTES---
40    
41     /**
42     * The current CVS revision of this class
43     */
44 tdb 1.6 public final String REVISION = "$Revision: 1.5 $";
45 tdb 1.1
46 tdb 1.2 /**
47     * A description of this monitor
48     */
49 tdb 1.1 public final String DESC = "Monitors number of logged on users.";
50    
51     //---STATIC METHODS---
52    
53     //---CONSTRUCTORS---
54    
55     //---PUBLIC METHODS---
56 tdb 1.2
57     /**
58     * Analyse a packet of data, and generate an alert if
59     * necessary.
60     *
61     * @param packet the XMLPacket to analyse
62     */
63 tdb 1.1 public void analysePacket(XMLPacket packet) {
64     // what host are we looking at
65     String source = packet.getParam("packet.attributes.machine_name");
66    
67     // if we don't have an entry in our HashMap, make one
68     if (!_hosts.containsKey(source)) {
69     _hosts.put(source, new Register(source, _name));
70     }
71    
72     // get the Register for this host
73     Register reg = (Register) _hosts.get(source);
74    
75     // get some required bits of data
76     String currentCount = packet.getParam("packet.users.count");
77     String niceName = "User Count";
78     int newThreshold = checkAttributeThreshold(currentCount, reg);
79    
80     // process an alert
81     processAlert(newThreshold, niceName, reg, source, currentCount);
82     }
83    
84     /**
85     * Overrides the {@link java.lang.Object#toString() Object.toString()}
86     * method to provide clean logging (every class should have this).
87     *
88 tdb 1.6 * This uses the uk.org.iscream.cms.util.NameFormat class
89 tdb 1.1 * to format the toString()
90     *
91     * @return the name of this class and its CVS revision
92     */
93     public String toString() {
94     return FormatName.getName(
95     _name,
96     getClass().getName(),
97     REVISION);
98     }
99    
100     /**
101     * return the String representation of what the monitor does
102     */
103     public String getDescription(){
104     return DESC;
105     }
106    
107     //---PRIVATE METHODS---
108 tdb 1.2
109     /**
110     * Checks a piece of current data, and returns the
111     * threshold it breaches, if any.
112     *
113     * @param attributeString a String representing the current data value
114     * @param reg the Register for the host
115     * @return the threshold level breached, if any
116     */
117 tdb 1.1 private int checkAttributeThreshold(String attributeString, Register reg) {
118     for(int thresholdLevel = Alert.thresholdLevels.length - 1; thresholdLevel >= 0; thresholdLevel--) {
119     if (reg.getThreshold(thresholdLevel) != -1.0) {
120     if(attributeString != null) {
121     try {
122     double attribute = Double.parseDouble(attributeString);
123     if (reg.getThreshold(thresholdLevel) < attribute) return thresholdLevel;
124     } catch (NumberFormatException e) {
125     // we got some duff data in the packet, but we shouldn't have
126     _logger.write(toString(), Logger.DEBUG, "possible errenous packet data, should be double value - " + attributeString);
127     }
128     }
129     }
130     }
131     return Alert.thresholdNORMAL;
132     }
133    
134     //---ACCESSOR/MUTATOR METHODS---
135 tdb 1.2
136     /**
137     * Returns a reference to a specific Queue for this
138     * monitor. This Queue returns only the data packets
139     * (based on type) that we want too look at.
140     *
141     * @return a reference to a Queue
142     */
143 tdb 1.1 protected Queue getQueue() {
144     return MonitorManager.getInstance().getDataQueue();
145     }
146    
147     //---ATTRIBUTES---
148    
149     /**
150     * This is the friendly identifier of the
151     * component this class is running in.
152     * eg, a Filter may be called "filter1",
153     * If this class does not have an owning
154     * component, a name from the configuration
155     * can be placed here. This name could also
156     * be changed to null for utility classes.
157     */
158     private String _name = "UserCount";
159 tdb 1.2
160     /**
161     * A HashMap of Registers (or groups of Registers), one
162     * for each host we're monitoring.
163     */
164 tdb 1.1 private HashMap _hosts = new HashMap();
165    
166     //---STATIC ATTRIBUTES---
167    
168     }