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.8
Committed: Thu Jan 15 14:10:13 2004 UTC (20 years, 4 months ago) by tdb
Branch: MAIN
Changes since 1.7: +3 -3 lines
Log Message:
OK - I can still program Java, I just can't remember how this works :-)

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 logged on user count for all machines
33 *
34 * @author $Author: tdb $
35 * @version $Id: UserCount__Monitor.java,v 1.7 2004/01/15 13:41:48 tdb Exp $
36 */
37 public class UserCount__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.7 $";
45
46 /**
47 * A description of this monitor
48 */
49 public final String DESC = "Monitors number of logged on users.";
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 // what host are we looking at
65 String source = packet.getParam("packet.attributes.machine_name");
66 if(!checkBooleanConfig("Host." + source, "Monitor." + _name + ".enable")) {
67 return;
68 }
69
70 // if we don't have an entry in our HashMap, make one
71 if (!_hosts.containsKey(source)) {
72 _hosts.put(source, new Register(source, _name));
73 }
74
75 // get the Register for this host
76 Register reg = (Register) _hosts.get(source);
77
78 // get some required bits of data
79 String currentCount = packet.getParam("packet.users.count");
80 String niceName = "User Count";
81 int newThreshold = checkAttributeThreshold(currentCount, reg);
82
83 // process an alert
84 processAlert(newThreshold, niceName, reg, source, currentCount);
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 double attribute = Double.parseDouble(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 //---ACCESSOR/MUTATOR METHODS---
138
139 /**
140 * Returns a reference to a specific Queue for this
141 * monitor. This Queue returns only the data packets
142 * (based on type) that we want too look at.
143 *
144 * @return a reference to a Queue
145 */
146 protected Queue getQueue() {
147 return MonitorManager.getInstance().getDataQueue();
148 }
149
150 //---ATTRIBUTES---
151
152 /**
153 * This is the friendly identifier of the
154 * component this class is running in.
155 * eg, a Filter may be called "filter1",
156 * If this class does not have an owning
157 * component, a name from the configuration
158 * can be placed here. This name could also
159 * be changed to null for utility classes.
160 */
161 private String _name = "UserCount";
162
163 /**
164 * A HashMap of Registers (or groups of Registers), one
165 * for each host we're monitoring.
166 */
167 private HashMap _hosts = new HashMap();
168
169 //---STATIC ATTRIBUTES---
170
171 }