Bladeren bron

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

Signed-off-by: Sven Velt <sven@velt.de>
Sven Velt 13 jaren geleden
bovenliggende
commit
2ee9428885
2 gewijzigde bestanden met toevoegingen van 20 en 10 verwijderingen
  1. 4 4
      check_naf.py
  2. 16 6
      monitoringplugin.py

+ 4 - 4
check_naf.py

@@ -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

+ 16 - 6
monitoringplugin.py

@@ -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 + '"')