Module: check_mk
Branch: master
Commit: 2a598f5cc6ef52f1dadeef88cc6b4d3aae73d474
URL:
http://git.mathias-kettner.de/git/?p=check_mk.git;a=commit;h=2a598f5cc6ef52…
Author: Mathias Kettner <mk(a)mathias-kettner.de>
Date: Thu Feb 13 17:13:27 2014 +0100
cisco_fru_power: Cleaned up implementation
---
checkman/cisco_fru_power | 14 +++---
checks/cisco_fru_power | 125 +++++++++++++++++++++-------------------------
2 files changed, 63 insertions(+), 76 deletions(-)
diff --git a/checkman/cisco_fru_power b/checkman/cisco_fru_power
index 6218210..e10f686 100644
--- a/checkman/cisco_fru_power
+++ b/checkman/cisco_fru_power
@@ -6,15 +6,15 @@ distribution: check_mk
description:
This check monitors the administrative and operational status of field
replaceable unit (FRU) power supplies of Cisco switches. The check is
- {OK} when the administrative and operational state is {on}. The check is
- {CRIT} when the administrative state is {off} or the operational state
- is {offDenied}, {offEnvPower}, {offEnvTemp}, {offEnvFan}. {failed},
- {onButInlinePowerFail}. The check is {WARN} otherwise.
+ OK when the administrative and operational state is {on}. The check is
+ CRIT when the administrative state is {off} or the operational state
+ is {offDenied}, {offEnvPower}, {offEnvTemp}, {offEnvFan}, {failed},
+ or {onButInlinePowerFail}. The check is WARN otherwise.
item:
- The index of the power supply from the list of OIDs for the device.
+ The index of the power supply from the list of OIDs for the device, usually
+ starting with {1}.
inventory:
One check is created for each FRU power supply unit. Units are only included
- if they are not in the operational state {offEnvOther} and {offEnvPower}
-
+ if they are not in the operational state {offEnvOther} and {offEnvPower}.
diff --git a/checks/cisco_fru_power b/checks/cisco_fru_power
index f8188f0..2eba333 100644
--- a/checks/cisco_fru_power
+++ b/checks/cisco_fru_power
@@ -24,82 +24,69 @@
# to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
# Boston, MA 02110-1301 USA.
-# .1.3.6.1.4.1.9.9.13.1.5.1.2.1 "removed"
-# .1.3.6.1.4.1.9.9.13.1.5.1.2.2 "AC Power Supply"
-# .1.3.6.1.4.1.9.9.13.1.5.1.3.1 5
-# .1.3.6.1.4.1.9.9.13.1.5.1.3.2 1
-# .1.3.6.1.4.1.9.9.13.1.5.1.4.1 1
-# .1.3.6.1.4.1.9.9.13.1.5.1.4.2 2
-
# FRU = Field Replacable Unit
-# OID 1.3.6.1.4.1.9.9.117.1.1.2.1.2
-# Type PowerOperType
-# 1:offEnvOther
-# 2:on
-# 3:offAdmin
-# 4:offDenied
-# 5:offEnvPower
-# 6:offEnvTemp
-# 7:offEnvFan
-# 8:failed
-# 9:onButFanFail
-# 10:offCooling
-# 11:offConnectorRating
-# 12:onButInlinePowerFail
-#
-# OID 1.3.6.1.4.1.9.9.117.1.1.2.1.1
-# Type PowerAdminType
-# 1:on
-# 2:off
-# 3:inlineAuto
-# 4:inlineOn
-# 5:powerCycle
-#
+cisco_fru_poweradmin_types = {
+ '1': ( 'on', 0 ),
+ '2': ( 'off', 2 ),
+ '3': ( 'inlineAuto', 1 ),
+ '4': ( 'inlineOn', 1 ),
+ '5': ( 'powerCycle', 1 ),
+}
+
+cisco_fru_poweroper_types = {
+ '1' : ('offEnvOther', 1 ),
+ '2' : ('on', 0 ),
+ '3' : ('offAdmin', 1 ),
+ '4' : ('offDenied', 2 ),
+ '5' : ('offEnvPower', 2 ),
+ '6' : ('offEnvTemp', 2 ),
+ '7' : ('offEnvFan', 2 ),
+ '8' : ('failed', 2 ),
+ '9' : ('onButFanFail', 1 ),
+ '10': ('offCooling', 1 ),
+ '11': ('offConnectorRating', 1 ),
+ '12': ('onButInlinePowerFail', 2 ),
+}
+
+
+def inventory_cisco_fru_power(info):
+ # Monitor all devices that are not
+ # - with incomplete SNMP data
+ # - in state 1:offEnvOther
+ # - in state 5:offEnvPower
+ return [ (line[0], None)
+ for line in info
+ if line[2] not in ('', '1', '5') ]
+
+
+def check_cisco_fru_power(item, _no_params, info):
+ for oid_end, admin_state, oper_state in info:
+ if oid_end == item:
+ worst_state = 0
+ infotexts = []
+ for (name, state), title in [
+ ( cisco_fru_poweroper_types[oper_state], "Operational state"
),
+ ( cisco_fru_poweradmin_types[admin_state], "Administrative state"
)]:
-def inventory_cisco_fru_power(info):
- return [ (line[0], None ) for line in info if saveint(line[2]) not in [ 0, 1, 5 ]
]
+ text = title + ": " + name
+ worst_state = max(state, worst_state)
+ if state == 1:
+ text += '(!)'
+ elif state == 2:
+ text += '(!!)'
+ infotexts.append(text)
-def check_cisco_fru_power(item, params, info):
- for line in info:
- if line[0] == item:
- power_oper_type = ('', 'offEnvOther', 'on',
'offAdmin', 'offDenied',
- 'offEnvPower', 'offEnvTemp',
'offEnvFan', 'failed',
- 'onButFanFail', 'offCooling',
'offConnectorRating',
- 'onButInlinePowerFail' )
- power_admin_type = ( '', 'on', 'off',
'inlineAuto', 'inlineOn', 'powercycle')
+ return worst_state, ", ".join(infotexts)
- admin_state, oper_state = map(saveint, line[1:3])
- admin_state_txt = power_admin_type[admin_state]
- oper_state_txt = power_oper_type[oper_state]
- admin_sym = ""
- oper_sym = ""
- if admin_state == 1 and oper_state == 2:
- state = 0
- elif admin_state == 2 or oper_state in ( 4,5,6,7,8,12):
- state = 2
- if admin_state == 2:
- admin_sym = "(!!)"
- if oper_state in ( 4,5,6,7,8,12):
- oper_sym = "(!!)"
- else:
- state = 1
- if admin_state not in (1,2):
- admin_sym = "(!)"
- if oper_state not in (2,4,5,6,7,8,12):
- oper_sym = "(!)"
- infotext = "Admin-State: %s%s, Oper-State: %s%s" % \
- (admin_state_txt, admin_sym, oper_state_txt, oper_sym)
- return (state, infotext)
+ return 3, "No FRU with this id found"
- return (3, "item not found in SNMP data")
check_info["cisco_fru_power"] = {
- 'check_function': check_cisco_fru_power,
- 'inventory_function': inventory_cisco_fru_power,
- 'service_description': 'FRU Power %s',
- 'snmp_info': ('.1.3.6.1.4.1.9.9.117.1.1.2.1', [
OID_END, '1', '2'] ),
- 'snmp_scan_function': \
- lambda oid: "cisco" in oid(".1.3.6.1.2.1.1.1.0").lower(),
+ 'check_function' : check_cisco_fru_power,
+ 'inventory_function' : inventory_cisco_fru_power,
+ 'service_description' : 'FRU Power %s',
+ 'snmp_info' : ('.1.3.6.1.4.1.9.9.117.1.1.2.1', [
OID_END, 1, 2 ] ),
+ 'snmp_scan_function' : lambda oid: "cisco" in
oid(".1.3.6.1.2.1.1.1.0").lower(),
}