Module: check_mk
Branch: master
Commit: 2864732dc9414894c045bcf147b853d21eb18cb4
URL:
http://git.mathias-kettner.de/git/?p=check_mk.git;a=commit;h=2864732dc94148…
Author: Götz Golla <gg(a)mathias-kettner.de>
Date: Wed Aug 14 16:41:19 2013 +0200
more verbose infotext for apc_symmetra check
---
checks/apc_symmetra | 3 +-
checks/apc_symmetra_test | 148 ++++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 150 insertions(+), 1 deletion(-)
diff --git a/checks/apc_symmetra b/checks/apc_symmetra
index 7c2ee3e..a06f959 100644
--- a/checks/apc_symmetra
+++ b/checks/apc_symmetra
@@ -72,7 +72,8 @@ def check_apc(item, params, info):
6:"software bypass", 7:"off",
8:"rebooting", 9:"switched bypass",
10:"hardware failure bypass", 11:"sleeping until power
return",
12:"on smart trim" }
- infotxt = "output status: %s" % (status_text.get(BasicOutputStatus))
+ calib_text = { 1:"", 2:"/calibration invalid",
3:"/calibration in progress" }
+ infotxt = "output status: %s%s" % (status_text.get(BasicOutputStatus),
calib_text.get(AdvTestCalibrationResults))
if BasicOutputStatus not in [2, 4, 12] and AdvTestCalibrationResults != 3:
state = 2
infotxt += "(!!)"
diff --git a/checks/apc_symmetra_test b/checks/apc_symmetra_test
new file mode 100644
index 0000000..e9597e7
--- /dev/null
+++ b/checks/apc_symmetra_test
@@ -0,0 +1,148 @@
+#!/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.
+
+# We use the following OIDs:
+
+
+# PowerNet-MIB::upsAdvTestDiagnosticsResults .1.3.6.1.4.1.318.1.1.1.7.2.3
+# upsAdvTestDiagnosticsResults OBJECT-TYPE
+# SYNTAX INTEGER {
+# ok(1),
+# failed(2),
+# invalidTest(3),
+# testInProgress(4)
+# }
+# ACCESS read-only
+# STATUS mandatory
+# DESCRIPTION
+# "The results of the last UPS diagnostics test performed."
+# ::= { upsAdvTest 3 }
+
+# PowerNet-MIB::upsAdvTestLastDiagnosticsDate .1.3.6.1.4.1.318.1.1.1.7.2.4
+# upsAdvTestLastDiagnosticsDate OBJECT-TYPE
+# SYNTAX DisplayString
+# ACCESS read-only
+# STATUS mandatory
+# DESCRIPTION
+# "The date the last UPS diagnostics test was performed in
+# mm/dd/yy format."
+# ::= { upsAdvTest 4 }
+#
+
+# PowerNet-MIB::upsAdvTestCalibrationResults .1.3.6.1.4.1.318.1.1.1.7.2.6
+# upsAdvTestCalibrationResults OBJECT-TYPE
+# SYNTAX INTEGER {
+# ok(1),
+# invalidTest(2),
+# calibrationInProgress(3)
+# }
+# ACCESS read-only
+# STATUS mandatory
+# DESCRIPTION
+# "The results of the last runtime calibration.
+#
+# Value ok(1) means a successful runtime calibration.
+#
+# Value invalidTest(2) indicates last calibration did
+# not take place since the battery capacity was below
+# 100%.
+#
+# Value calibrationInProgress(3) means a calibration
+# is occurring now. "
+# ::= { upsAdvTest 6 }
+
+# PowerNet-MIB::upsAdvTestCalibrationDate .1.3.6.1.4.1.318.1.1.1.7.2.7
+# upsAdvTestCalibrationDate OBJECT-TYPE
+# SYNTAX DisplayString
+# ACCESS read-only
+# STATUS mandatory
+# DESCRIPTION
+# "The date the last UPS runtime calibration was
+# performed in mm/dd/yy format."
+# ::= { upsAdvTest 7 }
+
+
+
+# levels refer to the apc_symentra group which has 6 values,
+# only the last two are needed in this test
+# the others belong to the apc_symmetra check
+
+import datetime
+
+apc_test_default_levels = ( 0, 0, 0, 0, 0, 0 )
+
+def check_apc_test(item, params, info):
+ warn, crit = params[4:]
+ line = info[0]
+ DiagnosticsResults, CalibrationResults = map(saveint, line[0:2])
+ LastDiagnosticsDate, TestCalibrationDate = line[2:4]
+
+ month, day, year = map(saveint, LastDiagnosticsDate.split('/'))
+ last_diag_date = datetime.date( year, month, day)
+ today = datetime.date.today()
+ diag_diff = today - last_diag_date
+ dcrit = datetime.timedelta(days=crit)
+ dwarn = datetime.timedelta(days=warn)
+
+ diagnostic_status_text = { 1:"OK", 2:"failed",
3:"invalid", 4:"in progress" }
+ calibration_status_text = { 1:"OK", 2:"invalid", 3:"in
progress" }
+
+ state = 0
+ diag_label = ""
+ if DiagnosticsResults == 2:
+ state = 2
+ diag_label = "(!!)"
+ elif DiagnosticsResults == 3:
+ state = 1
+ diag_label = "(!)"
+
+ time_label = ""
+ if crit != 0 and diag_diff >= dcrit:
+ state = 2
+ time_label = "(!!)"
+ elif warn != 0 and diag_diff >= dwarn:
+ state = max(state, 1)
+ time_label = "(!)"
+
+ ResultsDetail = "Result of self test: %s%s, Date of last test: %s%s" \
+ % (diagnostic_status_text.get(DiagnosticsResults), diag_label,
LastDiagnosticsDate, time_label)
+
+ return (state, ResultsDetail )
+
+def inventory_apc_test(info):
+ if len(info) > 0:
+ return [(None, "apc_test_default_levels")]
+
+
+check_info['apc_symmetra_test'] = {
+ "inventory_function" : inventory_apc_test,
+ "check_function" : check_apc_test,
+ "service_description" : "APC Symmetra Test Status",
+ "has_perfdata" : False,
+ "group" : "apc_symentra",
+ "snmp_scan_function" : lambda oid:
oid(".1.3.6.1.2.1.1.2.0").startswith(".1.3.6.1.4.1.318.1.3"),
+ "snmp_info" : (".1.3.6.1.4.1.318.1.1.1.7.2", [ 3,6,4,7 ]
)
+}