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/Memory__Monitor.java
(Generate patch)

Comparing projects/cms/source/server/uk/org/iscream/cms/server/client/monitors/Memory__Monitor.java (file contents):
Revision 1.8 by tdb, Tue May 29 17:02:34 2001 UTC vs.
Revision 1.13 by tdb, Wed Feb 5 16:43:45 2003 UTC

# Line 1 | Line 1
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  
# Line 6 | Line 26 | import java.util.HashMap;
26   import java.text.NumberFormat;
27   import uk.org.iscream.cms.server.client.*;
28   import uk.org.iscream.cms.server.core.*;
29 < import uk.org.iscream.cms.server.util.*;
29 > import uk.org.iscream.cms.util.*;
30   import uk.org.iscream.cms.server.componentmanager.*;
31  
32   /**
# Line 49 | Line 69 | public class Memory__Monitor extends MonitorSkeleton {
69  
70          Register reg = (Register) _hosts.get(source);
71  
52        // find out the threshold level we're at
53        String attributeName = "Memory In Use %";
54
72          // get the packet data
73 <        double memoryTotal, memoryFree;
73 >        double memoryTotal, memoryFree, memoryCache;
74          try {
75              String total = packet.getParam("packet.memory.total");
76              String free = packet.getParam("packet.memory.free");
77              if(total==null || free==null) {
78 <                throw new NumberFormatException("Memory data invalid");
78 >                throw new NumberFormatException("Memory data invalid or not supplied");
79              }
80              memoryTotal = Double.parseDouble(total);
81              memoryFree = Double.parseDouble(free);
82 +            // get hold of the cache data.. default to 0
83 +            memoryCache = 0.0;
84 +            String cache = packet.getParam("packet.memory.cache");
85 +            if(cache != null) {
86 +                memoryCache = Double.parseDouble(cache);
87 +            }
88          } catch (NumberFormatException e) {
89              _logger.write(this.toString(), Logger.WARNING, "Received packet from "+source+" with bad memory information: "+e);
90              // don't try to continue and process
# Line 73 | Line 96 | public class Memory__Monitor extends MonitorSkeleton {
96             String option = _cp.getProperty("Host." + source, "Monitor." + _name + ".thresholdMeasure");
97             if (option.equals("VALUE")) {
98                 useValue = true;
99 <           }                            
99 >           }
100          } catch (PropertyNotFoundException e) {
101              // we default to percentage
102          }
103 <
103 >        
104 >        boolean useCache = false;
105 >        try {
106 >           int useCacheAsFree = Integer.parseInt(_cp.getProperty("Host." + source, "Monitor." + _name + ".useCacheAsFree"));
107 >           useCache = (useCacheAsFree == 1);
108 >        } catch (PropertyNotFoundException e) {
109 >            // we default to false
110 >        } catch (NumberFormatException e) {
111 >            // we default to false
112 >        }
113 >        
114          // this  bit determines if the memory check is a % check
115          // or a kb check
116 <        double memoryInUse;
116 >        String type;
117 >        double curValue;
118 >        int newThreshold;
119          if(useValue) {
120 <            // kb memory in use
121 <            memoryInUse = memoryTotal - memoryFree;
120 >            // kb memory available
121 >            if(useCache) {
122 >                // NOTE: we take cache as being "probably free" for this check
123 >                curValue = memoryFree + memoryCache;
124 >            } else {
125 >                curValue = memoryFree;
126 >            }
127 >            // negate check
128 >            newThreshold = checkAttributeThreshold(curValue, reg, true);
129 >            type = "kb";
130          } else {
131              // % memory in use
132 <            memoryInUse = (1-(memoryFree / memoryTotal)) * 100;
132 >            if(useCache) {
133 >                // NOTE: we take cache as being "probably free" for this check
134 >                curValue = (1 - ((memoryFree + memoryCache) / memoryTotal)) * 100;
135 >            } else {
136 >                curValue = (1 - (memoryFree / memoryTotal)) * 100;
137 >            }
138 >            // normal check
139 >            newThreshold = checkAttributeThreshold(curValue, reg, false);
140 >            type = "%";
141          }
142  
92        int newThreshold = checkAttributeThreshold(memoryInUse, reg);
93
143          // format the memoryInUse to a String
144          NumberFormat nf = NumberFormat.getInstance();
145          nf.setMaximumFractionDigits(2);
146          nf.setMinimumFractionDigits(2);
147 <        String strMemoryInUse = nf.format(memoryInUse);
148 <
149 <        processAlert(newThreshold, attributeName, reg, source, strMemoryInUse);
147 >        String strCurValue = nf.format(curValue);
148 >        
149 >        // set the attributeName nicely
150 >        String attributeName = type + " Memory in use";
151 >        if(useCache) {
152 >            attributeName += " (ex. cache)";
153 >        }
154 >        
155 >        processAlert(newThreshold, attributeName, reg, source, strCurValue);
156      }
157  
158      /**
159       * Overrides the {@link java.lang.Object#toString() Object.toString()}
160       * method to provide clean logging (every class should have this).
161       *
162 <     * This uses the uk.org.iscream.cms.server.util.NameFormat class
162 >     * This uses the uk.org.iscream.cms.util.NameFormat class
163       * to format the toString()
164       *
165       * @return the name of this class and its CVS revision
# Line 129 | Line 184 | public class Memory__Monitor extends MonitorSkeleton {
184       * Checks a piece of current data, and returns the
185       * threshold it breaches, if any.
186       *
187 <     * @param attributeString a String representing the current data value
187 >     * The option to negate the check can be used in
188 >     * situations where being *below* the threshold
189 >     * is an 'alertable' situation. In this specific
190 >     * case, we'd do this with kb disk checks.
191 >     *
192 >     * @param value the current value
193       * @param reg the Register for the host
194 +     * @param negateCheck whether to negate the check
195       * @return the threshold level breached, if any
196       */
197 <    private int checkAttributeThreshold(double memoryInUse, Register reg) {
197 >    private int checkAttributeThreshold(double value, Register reg, boolean negateCheck) {
198          for(int thresholdLevel = Alert.thresholdLevels.length - 1; thresholdLevel >= 0; thresholdLevel--) {
199              if (reg.getThreshold(thresholdLevel) != -1.0) {
200 <                if(((double) reg.getThreshold(thresholdLevel)) < memoryInUse) {
201 <                    return thresholdLevel;
200 >                if(!negateCheck) {
201 >                    // normal check - has the value gone *over* the threshold
202 >                    if(((double) reg.getThreshold(thresholdLevel)) < value) {
203 >                        return thresholdLevel;
204 >                    }
205 >                }
206 >                else {
207 >                    // negated check - has the value gone *under* the threshold
208 >                    if(((double) reg.getThreshold(thresholdLevel)) > value) {
209 >                        return thresholdLevel;
210 >                    }
211                  }
212              }
213          }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines