Module: check_mk
Branch: master
Commit: 077b659c53e9a8c438282ed7aa1abf83f7bb576c
URL:
http://git.mathias-kettner.de/git/?p=check_mk.git;a=commit;h=077b659c53e9a8…
Author: Götz Golla <gg(a)mathias-kettner.de>
Date: Mon Nov 25 19:59:26 2013 +0100
preliminary versions of two new cisco checks
---
checks/cisco_fru_power | 102 ++++++++++++++++++++++++++++++++++++++++++++++++
checks/cisco_sys_mem | 62 +++++++++++++++++++++++++++++
2 files changed, 164 insertions(+)
diff --git a/checks/cisco_fru_power b/checks/cisco_fru_power
new file mode 100644
index 0000000..33b9ba6
--- /dev/null
+++ b/checks/cisco_fru_power
@@ -0,0 +1,102 @@
+#!/usr/bin/python
+# -*- encoding: utf-8; py-indent-offset: 4 -*-
+# +------------------------------------------------------------------+
+# | ____ _ _ __ __ _ __ |
+# | / ___| |__ ___ ___| | __ | \/ | |/ / |
+# | | | | '_ \ / _ \/ __| |/ / | |\/| | ' / |
+# | | |___| | | | __/ (__| < | | | | . \ |
+# | \____|_| |_|\___|\___|_|\_\___|_| |_|_|\_\ |
+# | |
+# | Copyright Mathias Kettner 2013 mk(a)mathias-kettner.de |
+# +------------------------------------------------------------------+
+#
+# This file is part of Check_MK.
+# The official homepage is at
http://mathias-kettner.de/check_mk.
+#
+# check_mk is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by
+# the Free Software Foundation in version 2. check_mk is distributed
+# in the hope that it will be useful, but WITHOUT ANY WARRANTY; with-
+# out even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE. See the GNU General Public License for more de-
+# ails. You should have received a copy of the GNU General Public
+# License along with GNU Make; see the file COPYING. If not, write
+# 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
+
+# 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
+#
+
+power_oper_type = ('', 'offEnvOther', 'on', 'offAdmin',
'offDenied',
+ 'offEnvPower', 'offEnvTemp', 'offEnvFan',
'failed',
+ 'onButFanFail', 'offCooling',
'offConnectorRating',
+ 'onButInlinePowerFail' )
+
+power_admin_type = ( '', 'on', 'off', 'inlineAuto',
'inlineOn', 'powercycle')
+
+def inventory_cisco_fru_power(info):
+ return [ (line[0], None ) for line in info ]
+
+def check_cisco_fru_power(item, params, info):
+ for line in info:
+ if line[0] == item:
+ admin_state, oper_state = map(saveint, line[1:3])
+ output = 'Admin-State: %s, Oper-State: %s' %
(power_admin_type[admin_state],
+ 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 = "(!)"
+ return (state, "Admin-State: %s%s, Oper-State: %s%s" % \
+
(power_admin_type[admin_state],admin_sym,power_oper_type[oper_state],oper_sym))
+
+ 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(),
+}
diff --git a/checks/cisco_sys_mem b/checks/cisco_sys_mem
new file mode 100644
index 0000000..e202981
--- /dev/null
+++ b/checks/cisco_sys_mem
@@ -0,0 +1,62 @@
+#!/usr/bin/python
+# -*- encoding: utf-8; py-indent-offset: 4 -*-
+# +------------------------------------------------------------------+
+# | ____ _ _ __ __ _ __ |
+# | / ___| |__ ___ ___| | __ | \/ | |/ / |
+# | | | | '_ \ / _ \/ __| |/ / | |\/| | ' / |
+# | | |___| | | | __/ (__| < | | | | . \ |
+# | \____|_| |_|\___|\___|_|\_\___|_| |_|_|\_\ |
+# | |
+# | Copyright Mathias Kettner 2013 mk(a)mathias-kettner.de |
+# +------------------------------------------------------------------+
+#
+# This file is part of Check_MK.
+# The official homepage is at
http://mathias-kettner.de/check_mk.
+#
+# check_mk is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by
+# the Free Software Foundation in version 2. check_mk is distributed
+# in the hope that it will be useful, but WITHOUT ANY WARRANTY; with-
+# out even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE. See the GNU General Public License for more de-
+# ails. You should have received a copy of the GNU General Public
+# License along with GNU Make; see the file COPYING. If not, write
+# to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+# Boston, MA 02110-1301 USA.
+
+# cseSysMemoryUtilization .1.3.6.1.4.1.9.9.305.1.1.2.0
+#
+
+cisco_mem_default_levels = (80.0, 90.0)
+
+def inventory_cisco_sys_mem(info):
+ if info:
+ return [ (None, "cisco_mem_default_levels") ]
+ else:
+ return (3, "no snmp data found")
+
+def check_cisco_sys_mem(item, params, info):
+ warn, crit = params
+ if info[0][0]:
+ mem_used = float(info[0][0])
+ perfdata = [("mem_used", mem_used, warn, crit, 0, 100)]
+ infotext = "%2.1f%% of supervisor memory used" % mem_used
+ if type(warn) == int or type(crit) == int:
+ return (3, infotext + "no limits applied, must be given in precent",
perfdata)
+ if mem_used >= crit:
+ return (2, infotext + " (critical at %2.1f%% MB)" % crit, perfdata)
+ elif mem_used >= warn:
+ return (1, infotext + " (warning at %2.1f%% MB)" % warn, perfdata)
+ else:
+ return (0, infotext, perfdata)
+
+
+check_info["cisco_sys_mem"] = {
+ "check_function" : check_cisco_sys_mem,
+ "inventory_function" : inventory_cisco_sys_mem,
+ "service_description" : "Supervisor Mem Used",
+ "has_perfdata" : True,
+ "group" : "cisco_sys_mem",
+ "snmp_scan_function" : lambda oid:
oid(".1.3.6.1.4.1.9.9.305.1.1.2.0"),
+ "snmp_info" : ( ".1.3.6.1.4.1.9.9.305.1.1.2", "0"
),
+}