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/CPU__Monitor.java
Revision: 1.4
Committed: Fri Mar 2 01:01:41 2001 UTC (23 years, 3 months ago) by ajm
Branch: MAIN
Changes since 1.3: +6 -3 lines
Log Message:
Now catches configuration errors and handles properly

File Contents

# User Rev Content
1 tdb 1.1 //---PACKAGE DECLARATION---
2     package uk.ac.ukc.iscream.client.monitors;
3    
4     //---IMPORTS---
5     import uk.ac.ukc.iscream.client.*;
6     import uk.ac.ukc.iscream.core.*;
7     import uk.ac.ukc.iscream.util.*;
8     import uk.ac.ukc.iscream.componentmanager.*;
9    
10     /**
11     * This Monitor watches the CPU load for all machines
12     *
13 ajm 1.4 * @author $Author: tdb1 $
14     * @version $Id: CPU__Monitor.java,v 1.3 2001/03/02 00:35:52 tdb1 Exp $
15 tdb 1.1 */
16     public class CPU__Monitor implements Monitor {
17    
18     //---FINAL ATTRIBUTES---
19    
20     /**
21     * The current CVS revision of this class
22     */
23 ajm 1.4 public final String REVISION = "$Revision: 1.3 $";
24 tdb 1.1
25     public final String DESC = "Monitors CPU.";
26    
27     //---STATIC METHODS---
28    
29     //---CONSTRUCTORS---
30    
31 ajm 1.2 public CPU__Monitor() {
32     _alerterQueue = ClientMain._alerterQueue;
33     // get the configuration for this plug-in
34     Configuration config = _refman.getCM().getConfiguration(_name);
35     _levels = new double[(Alert.alerts).length];
36     for (int x = 0; x < Alert.alerts.length; x++) {
37     try {
38     _levels[x] = Double.parseDouble(config.getProperty("Monitor.CPU.level." + x));
39     } catch (NumberFormatException e) {
40     _levels[x] = -1;
41 ajm 1.4 } catch (org.omg.CORBA.MARSHAL e2) {
42     _levels[x] = -1;
43 ajm 1.2 }
44 ajm 1.4
45 ajm 1.2 }
46     }
47 tdb 1.1 //---PUBLIC METHODS---
48    
49     public void analysePacket(XMLPacket packet) {
50 tdb 1.3 String source = packet.getParam("packet.attributes.hostname");
51 ajm 1.2 for(int x=0; x < _levels.length; x++) {
52     if (_levels[x] != -1) {
53     double idle = Double.parseDouble(packet.getParam("packet.cpu.idle"));
54 tdb 1.3 if (_levels[x] < idle) fireAlert(x, source, idle, "idle");
55 ajm 1.2 double user = Double.parseDouble(packet.getParam("packet.cpu.user"));
56 tdb 1.3 if (_levels[x] < user) fireAlert(x, source, user, "user");
57 ajm 1.2 double kernel = Double.parseDouble(packet.getParam("packet.cpu.kernel"));
58 tdb 1.3 if (_levels[x] < kernel) fireAlert(x, source, kernel, "kernel");
59 ajm 1.2 double iowait = Double.parseDouble(packet.getParam("packet.cpu.iowait"));
60 tdb 1.3 if (_levels[x] < iowait) fireAlert(x, source, iowait, "iowait");
61 ajm 1.2 double swap = Double.parseDouble(packet.getParam("packet.cpu.swap"));
62 tdb 1.3 if (_levels[x] < swap) fireAlert(x, source, swap, "swap");
63 ajm 1.2 }
64     }
65 tdb 1.1 }
66    
67     /**
68     * Overrides the {@link java.lang.Object#toString() Object.toString()}
69     * method to provide clean logging (every class should have this).
70     *
71     * This uses the uk.ac.ukc.iscream.util.NameFormat class
72     * to format the toString()
73     *
74     * @return the name of this class and its CVS revision
75     */
76     public String toString() {
77     return FormatName.getName(
78     _name,
79     getClass().getName(),
80     REVISION);
81     }
82    
83     /**
84     * return the String representation of what the filter does
85     */
86     public String getDescription(){
87     return DESC;
88     }
89    
90     //---PRIVATE METHODS---
91    
92 tdb 1.3 private void fireAlert(int alertLevel, String source, double currentValue, String type) {
93 ajm 1.2 String value = Double.toString(currentValue);
94     String thresholdValue = Double.toString(_levels[alertLevel]);
95     String attributeName = "CPU " + type;
96 tdb 1.3 Alert alert = new Alert(alertLevel, source, thresholdValue, value, attributeName);
97 ajm 1.2 _alerterQueue.add(alert);
98     }
99    
100 tdb 1.1 //---ACCESSOR/MUTATOR METHODS---
101    
102     //---ATTRIBUTES---
103    
104     /**
105     * This is the friendly identifier of the
106     * component this class is running in.
107     * eg, a Filter may be called "filter1",
108     * If this class does not have an owning
109     * component, a name from the configuration
110     * can be placed here. This name could also
111     * be changed to null for utility classes.
112     */
113     private String _name = ClientMain.NAME;
114    
115     /**
116     * This holds a reference to the
117     * system logger that is being used.
118     */
119     private Logger _logger = ReferenceManager.getInstance().getLogger();
120 ajm 1.2
121     private double[] _levels;
122    
123     private Queue _alerterQueue;
124    
125     /**
126     * A reference to the reference manager in use
127     */
128     private ReferenceManager _refman = ReferenceManager.getInstance();
129 tdb 1.1
130     //---STATIC ATTRIBUTES---
131    
132     }