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/Process__Monitor.java
Revision: 1.2
Committed: Thu Mar 22 17:57:06 2001 UTC (23 years, 2 months ago) by ajm
Branch: MAIN
Changes since 1.1: +23 -20 lines
Log Message:
Modified to use the new style queuing in the local client

File Contents

# User Rev Content
1 tdb 1.1 //---PACKAGE DECLARATION---
2     package uk.org.iscream.client.monitors;
3    
4     //---IMPORTS---
5     import java.util.HashMap;
6     import uk.org.iscream.client.*;
7     import uk.org.iscream.core.*;
8     import uk.org.iscream.util.*;
9     import uk.org.iscream.componentmanager.*;
10    
11     /**
12     * This Monitor watches the Process Counts for all machines
13     *
14 ajm 1.2 * @author $Author: tdb1 $
15     * @version $Id: Process__Monitor.java,v 1.1 2001/03/22 00:52:48 tdb1 Exp $
16 tdb 1.1 */
17     public class Process__Monitor extends MonitorSkeleton {
18    
19     //---FINAL ATTRIBUTES---
20    
21     /**
22     * The current CVS revision of this class
23     */
24 ajm 1.2 public final String REVISION = "$Revision: 1.1 $";
25 tdb 1.1
26     public final String DESC = "Monitors Process Counts.";
27    
28     //---STATIC METHODS---
29    
30     //---CONSTRUCTORS---
31    
32     //---PUBLIC METHODS---
33    
34     public void analysePacket(XMLPacket packet) {
35    
36 ajm 1.2 String source = packet.getParam("packet.attributes.machine_name");
37     if (!_hosts.containsKey(source)) {
38     HashMap attributeRegisters = new HashMap();
39     initAttributeRegsiters(source, attributeRegisters);
40     _hosts.put(source, attributeRegisters);
41     }
42    
43     HashMap attributeRegisters = (HashMap) _hosts.get(source);
44     for(int attributeNum = 0; attributeNum < _attributes.length; attributeNum++) {
45     Register reg = (Register) attributeRegisters.get(_attributes[attributeNum]);
46     // find out the threshold level we're at
47     String attribute = _attributes[attributeNum];
48     String attributeName = _attributeNames[attributeNum];
49     String currentValue = packet.getParam(attribute);
50     int newThreshold = checkAttributeThreshold(currentValue, reg);
51     processAlert(newThreshold, attributeName, reg, source, currentValue);
52 tdb 1.1 }
53     }
54    
55     /**
56     * Overrides the {@link java.lang.Object#toString() Object.toString()}
57     * method to provide clean logging (every class should have this).
58     *
59     * This uses the uk.org.iscream.util.NameFormat class
60     * to format the toString()
61     *
62     * @return the name of this class and its CVS revision
63     */
64     public String toString() {
65     return FormatName.getName(
66     _name,
67     getClass().getName(),
68     REVISION);
69     }
70    
71     /**
72     * return the String representation of what the monitor does
73     */
74     public String getDescription(){
75     return DESC;
76     }
77    
78     //---PRIVATE METHODS---
79    
80     private int checkAttributeThreshold(String attributeString, Register reg) {
81     for(int thresholdLevel = Alert.thresholdLevels.length - 1; thresholdLevel >= 0; thresholdLevel--) {
82     if (reg.getThreshold(thresholdLevel) != -1.0) {
83     if(attributeString != null) {
84     try {
85     double attribute = Double.parseDouble(attributeString);
86     if (reg.getThreshold(thresholdLevel) < attribute) return thresholdLevel;
87     } catch (NumberFormatException e) {
88     // we got some duff data in the packet, but we shouldn't have
89     _logger.write(toString(), Logger.DEBUG, "possible errenous packet data, should be double value - " + attributeString);
90     }
91     }
92     }
93     }
94     return Alert.thresholdNORMAL;
95     }
96    
97     private void initAttributeRegsiters(String source, HashMap attributeRegisters) {
98     for(int attributeNum = 0; attributeNum < _attributes.length; attributeNum++) {
99     String attributeName = _attributes[attributeNum].substring(_attributes[attributeNum].lastIndexOf(".") + 1);
100     attributeRegisters.put(_attributes[attributeNum], new Register(source, _name, attributeName));
101     }
102     }
103    
104     //---ACCESSOR/MUTATOR METHODS---
105 ajm 1.2
106     protected Queue getQueue() {
107     return MonitorManager.getInstance().getDataQueue();
108     }
109 tdb 1.1
110     //---ATTRIBUTES---
111    
112     /**
113     * This is the friendly identifier of the
114     * component this class is running in.
115     * eg, a Filter may be called "filter1",
116     * If this class does not have an owning
117     * component, a name from the configuration
118     * can be placed here. This name could also
119     * be changed to null for utility classes.
120     */
121     private String _name = "Process";
122    
123     /**
124     * A reference to the configuration proxy in use
125     */
126     private ConfigurationProxy _cp = ConfigurationProxy.getInstance();
127    
128     private HashMap _hosts = new HashMap();
129    
130     private String[] _attributes = { "packet.processes.total", "packet.processes.cpu", "packet.processes.sleeping", "packet.processes.stopped", "packet.processes.zombie" };
131     private String[] _attributeNames = {"Total Processes", "on CPU Processes", "Sleeping Processes", "Stopped Processes", "Zombie Processes"};
132    
133     //---STATIC ATTRIBUTES---
134    
135     }