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.4
Committed: Sat May 18 18:16:00 2002 UTC (22 years ago) by tdb
Branch: MAIN
Changes since 1.3: +22 -3 lines
Log Message:
i-scream is now licensed under the GPL. I've added the GPL headers to every
source file, and put a full copy of the license in the appropriate places.
I think I've covered everything. This is going to be a mad commit ;)

File Contents

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