mp/naf: Allow units for warn/crit thresholds and ranges

Signed-off-by: Sven Velt <sven@velt.de>
This commit is contained in:
Sven Velt 2011-08-30 12:13:17 +02:00
parent 2a9c069e9d
commit 2ee9428885
2 changed files with 20 additions and 10 deletions

View file

@ -633,8 +633,8 @@ class CheckNAF(SNMPMonitoringPlugin):
fs_pctused = float(fs_used) / float(fs_total) * 100.0
warn = self.range_dehumanize(warn, fs_total)
crit = self.range_dehumanize(crit, fs_total)
warn = self.range_dehumanize(warn, fs_total, unit=['b',])
crit = self.range_dehumanize(crit, fs_total, unit=['b',])
returncode = self.value_wc_to_returncode(fs_used, warn, crit)
output = volume + ': Used ' + self.value_to_human_binary(fs_used, 'B')
@ -662,8 +662,8 @@ class CheckNAF(SNMPMonitoringPlugin):
sn_used = long(self.SNMPGET(self.OID['df_FS_kBUsed'], sn_idx)) * 1024L
# sn_avail = long(self.SNMPGET(self.OID['df_FS_kBAvail'], sn_idx)) * 1024L
warn = self.range_dehumanize(warn, sn_total)
crit = self.range_dehumanize(crit, sn_total)
warn = self.range_dehumanize(warn, sn_total, unit=['b',])
crit = self.range_dehumanize(crit, sn_total, unit=['b',])
if sn_total != 0:
# Snap reserve
sn_pctused = float(sn_used) / float(sn_total) * 100.0

View file

@ -300,10 +300,20 @@ class MonitoringPlugin(object):
return datetime.timedelta(seconds=long(seconds))
def human_to_number(self, value, total=None):
def human_to_number(self, value, total=None, unit=['',]):
if total:
if not self.is_float(total):
total = self.human_to_number(total)
total = self.human_to_number(total, unit=unit)
if type(unit) == list:
unit = [u.lower() for u in unit]
elif type(unit) == str:
unit = [unit.lower(),]
else:
unit = ['',]
if value.lower()[-1] in unit:
value = value[0:-1]
if self.is_float(value):
return float(value)
@ -323,7 +333,7 @@ class MonitoringPlugin(object):
return value
def range_dehumanize(self, range, total=None):
def range_dehumanize(self, range, total=None, unit=['',]):
newrange = ''
if len(range):
@ -332,10 +342,10 @@ class MonitoringPlugin(object):
range = range[1:]
parts = range.split(':')
newrange += ('%f' % self.human_to_number(parts[0], total)).rstrip('0').rstrip('.')
newrange += ('%s' % self.human_to_number(parts[0], total, unit)).rstrip('0').rstrip('.')
if len(parts) > 1:
newrange += ':' + ('%f' % self.human_to_number(parts[1], total)).rstrip('0').rstrip('.')
newrange += ':' + ('%s' % self.human_to_number(parts[1], total, unit)).rstrip('0').rstrip('.')
if range != newrange:
self.verbose(3, 'Changed range/thresold from "' + range + '" to "' + newrange + '"')