Module: check_mk
Branch: master
Commit: c4638bd3e606cefd07b35e7071dea1b48d3c570f
URL:
http://git.mathias-kettner.de/git/?p=check_mk.git;a=commit;h=c4638bd3e606ce…
Author: Simon Betz <si(a)mathias-kettner.de>
Date: Wed Feb 8 11:54:43 2017 +0100
4340 FIX blade_bays: cleanup and some improvements
Some devices send duplicate bay names.
The check plugin now detects all bays.
Change-Id: I984e2a67e5eb7d80f48852712e59aecbe2d547da
---
.werks/4340 | 11 +++++
ChangeLog | 1 +
checks/blade_bays | 117 ++++++++++++++++++++++++++++++------------------------
3 files changed, 77 insertions(+), 52 deletions(-)
diff --git a/.werks/4340 b/.werks/4340
new file mode 100644
index 0000000..3089822
--- /dev/null
+++ b/.werks/4340
@@ -0,0 +1,11 @@
+Title: blade_bays: cleanup and some improvements
+Level: 1
+Component: checks
+Class: fix
+Compatible: compat
+State: unknown
+Version: 1.4.0i4
+Date: 1486550914
+
+Some devices send duplicate bay names.
+The check plugin now detects all bays.
diff --git a/ChangeLog b/ChangeLog
index 9ba84c1..011a333 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -97,6 +97,7 @@
* 4325 FIX: check_cpu_peaks: Make the check working with current Check_MK APi
* 4339 FIX: fixed AtrributeError in oracle sessions ruleset
* 4191 FIX: esx_vsphere_hostsystem.cpu_usage: Fixed wrong total GHz...
+ * 4340 FIX: blade_bays: cleanup and some improvements...
Multisite:
* 4169 View action: Default values of sticky, notification and persistent options can
now be configured via global settings....
diff --git a/checks/blade_bays b/checks/blade_bays
index 981c104..f5f8fdc 100644
--- a/checks/blade_bays
+++ b/checks/blade_bays
@@ -24,61 +24,74 @@
# to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
# Boston, MA 02110-1301 USA.
-blade_bays_module_state = {
- 0: 'standby',
- 1: 'on',
- 2: 'notPresent',
- 255: 'notApplicable',
-}
-def blade_bays_make_item(line):
- # "3.IO Module 5"
- pd, name = line[0].split(".", 1)
- if pd == '2':
- power_domain = 1
- else:
- power_domain = 2
- return "PD%d %s" % (power_domain, name)
+def parse_blade_bays(info):
+ map_states = {
+ "0" : (0, 'standby'),
+ "1" : (0, 'on'),
+ "2" : (1, 'not present'),
+ "3" : (1, 'switched off'),
+ "255" : (2, 'not applicable'), }
+
+ parsed = {}
+ for pd_oidend, name, state, ty, identifier, \
+ power_str, power_max_str in info:
+ pd, oid = pd_oidend.split(".", 1)
+ if pd == '2':
+ power_domain = 1
+ else:
+ power_domain = 2
+
+ itemname = "PD%d %s" % (power_domain, name)
+ if itemname in parsed:
+ itemname = "%s %s" % (itemname, oid)
+
+ try:
+ power = int(power_str.rstrip("W"))
+ power_max = int(power_max_str.rstrip("W"))
+ except ValueError:
+ power = 0
+
+ parsed.setdefault(itemname, {
+ "_type_" : ty.split("(")[0],
+ "_id_" : identifier,
+ "_power_max_" : power_max,
+ "device_state" : map_states.get(state, (3,
"unhandled[%s]" % state)),
+ "power" : power,
+ })
+ return parsed
+
+
+def inventory_blade_bays(parsed):
+ for entry, attrs in parsed.items():
+ if attrs["device_state"][1] in [ "standby", "on"
]:
+ yield entry, {}
+
+
+def check_blade_bays(item, params, parsed):
+ if item not in parsed:
+ yield 3, "No data for '%s' in SNMP info" % item
+ return
+
+ for res in check_elphase(item, params, parsed):
+ yield res
-def inventory_blade_bays(info):
- # find only modules that are present and switched on or standby
- inventory = []
- for line in info:
- if line[1] in [ '0', '1' ]:
- item = blade_bays_make_item(line)
- inventory.append((item, None))
- return inventory
+ data = parsed[item]
+ yield 0, "Max. power: %s W, Type: %s, ID: %s" % \
+ (data["_power_max_"], data["_type_"],
data["_id_"])
-def check_blade_bays(item, _no_params, info):
- for line in info:
- if item == blade_bays_make_item(line):
- state = saveint(line[1])
- type = line[2].split('(')[0]
- power_current, power_max = map(lambda x: saveint(x.rstrip('W')),
line[4:6])
- perfdata = [('power', '%dW' % power_current, None, None, 0,
power_max)]
- if state == 1:
- return (0, "State %s (Type: %s, ID: %s), Power %dW (%dW max)"
%
- (blade_bays_module_state.get(state, 'Unhandled'), type,
line[3], power_current, power_max), perfdata)
- elif state == 2:
- return (1, "Not present")
- elif state == 3:
- return (1, "Device is switched off", perfdata)
- elif state == 0:
- return (1, "Device is in standby", perfdata)
- else:
- return (2, "invalid state %d" % state)
- return (3, "no data for '%s' in SNMP info" % item)
check_info["blade_bays"] = {
- 'check_function': check_blade_bays,
- 'inventory_function': inventory_blade_bays,
- 'service_description': 'BAY %s',
- 'has_perfdata': True,
- 'snmp_info': (
- ".1.3.6.1.4.1.2.3.51.2.2.10", [
- "2", # powerDomain1
- "3", # powerDomain2
- ], [ "1.1.5", "1.1.6", "1.1.2", "1.1.1",
"1.1.7", "1.1.8" ] ), # BLADE-MIB
- 'snmp_scan_function': \
- lambda oid: re.match('(BladeCenter|BladeCenter Advanced|IBM Flex Chassis)
Management Module', oid(".1.3.6.1.2.1.1.1.0")) != None,
+ 'parse_function' : parse_blade_bays,
+ 'inventory_function' : inventory_blade_bays,
+ 'check_function' : check_blade_bays,
+ 'service_description' : 'BAY %s',
+ 'has_perfdata' : True,
+ 'snmp_info' : ( ".1.3.6.1.4.1.2.3.51.2.2.10", [
+ "2", # powerDomain1
+ "3", # powerDomain2
+ ], [ OID_END, "1.1.5", "1.1.6",
"1.1.2", "1.1.1", "1.1.7", "1.1.8" ] ), #
BLADE-MIB
+ 'snmp_scan_function' : lambda oid: \
+ re.match('(BladeCenter|BladeCenter Advanced|IBM Flex Chassis) Management
Module', oid(".1.3.6.1.2.1.1.1.0")) != None,
+ 'includes' : [ 'elphase.include' ],
}