Module: check_mk
Branch: master
Commit: 265323e8b449d8c2d24b4779e85fec2471ef72af
URL:
http://git.mathias-kettner.de/git/?p=check_mk.git;a=commit;h=265323e8b449d8…
Author: Simon Betz <si(a)mathias-kettner.de>
Date: Fri Oct 27 09:21:09 2017 +0200
5440 didactum_sensors_discrete: Discovers also smoke sensors
Change-Id: I2621e04a9b2791539df59bf7fcb215ec5c6fb5b2
---
.werks/5440 | 10 ++++++++++
checkman/didactum_sensors_discrete | 5 +++++
checks/didactum.include | 25 +++++++++++++------------
checks/didactum_sensors_discrete | 12 +++++++++---
4 files changed, 37 insertions(+), 15 deletions(-)
diff --git a/.werks/5440 b/.werks/5440
new file mode 100644
index 0000000..8821c78
--- /dev/null
+++ b/.werks/5440
@@ -0,0 +1,10 @@
+Title: didactum_sensors_discrete: Discovers also smoke sensors
+Level: 1
+Component: checks
+Compatible: compat
+Edition: cre
+Version: 1.5.0i1
+Date: 1509088657
+Class: feature
+
+
diff --git a/checkman/didactum_sensors_discrete b/checkman/didactum_sensors_discrete
index 44fe197..c9b31ec 100644
--- a/checkman/didactum_sensors_discrete
+++ b/checkman/didactum_sensors_discrete
@@ -7,6 +7,11 @@ description:
This check monitors discrete sensors of Didactum devices
which support the DIDACTUM-SYSTEM-MIB.
+ The check is OK if the device status is "normal" or "on",
+ it is WARN if the device status is "warning", "high warning"
+ or "low warning" and the check reports CRIT in case of
+ "alarm", "high alarm" or "low alarm", otherwise UNKNOWN.
+
item:
The discrete sensor identifier.
diff --git a/checks/didactum.include b/checks/didactum.include
index 8f337f9..9cdab2a 100644
--- a/checks/didactum.include
+++ b/checks/didactum.include
@@ -48,17 +48,7 @@ def parse_didactum_sensors(info):
parsed = {}
for line in info:
- ty, name, status, value_str = line[:4]
- parsed.setdefault(ty, {})
-
- if value_str.isdigit():
- value = int(value_str)
- else:
- try:
- value = float(value_str)
- except:
- value = value_str
-
+ ty, name, status = line[:3]
if status in map_states:
state = map_states[status]
state_readable = status
@@ -66,12 +56,23 @@ def parse_didactum_sensors(info):
state = 3
state_readable = "unknown[%s]" % status
+ parsed.setdefault(ty, {})
parsed[ty].setdefault(name, {
"state" : state,
"state_readable" : state_readable,
- "value" : value,
})
+ if len(line) >= 4:
+ value_str = line[3]
+ if value_str.isdigit():
+ value = int(value_str)
+ else:
+ try:
+ value = float(value_str)
+ except:
+ value = value_str
+ parsed[ty][name].update({"value": value})
+
if len(line) == 8:
crit_lower, warn_lower, warn, crit = line[4:]
parsed[ty][name].update({
diff --git a/checks/didactum_sensors_discrete b/checks/didactum_sensors_discrete
index c6af0ea..2a0d9a8 100644
--- a/checks/didactum_sensors_discrete
+++ b/checks/didactum_sensors_discrete
@@ -44,13 +44,20 @@
def inventory_didactum_sensors_discrete_dry(parsed):
- return inventory_didactum_sensors(parsed, "dry")
+ inventory = []
+ for discrete_sensort_type in ["dry", "smoke"]:
+ inventory += inventory_didactum_sensors(parsed, discrete_sensort_type)
+ return inventory
def check_didactum_sensors_discrete_dry(item, params, parsed):
if item in parsed.get("dry", {}):
data = parsed["dry"][item]
- return data["state"], "Status: %s" %
data["state_readable"]
+ elif item in parsed.get("smoke", {}):
+ data = parsed["smoke"][item]
+ else:
+ return 3, "Discrete sensor %s not found in SNMP data." % item
+ return data["state"], "Status: %s" %
data["state_readable"]
check_info['didactum_sensors_discrete'] = {
@@ -62,7 +69,6 @@ check_info['didactum_sensors_discrete'] = {
"4", #
DIDACTUM-SYSTEM-MIB::ctlInternalSensorsDiscretType
"5", #
DIDACTUM-SYSTEM-MIB::ctlInternalSensorsDiscretName
"6", #
DIDACTUM-SYSTEM-MIB::ctlInternalSensorsDiscretState
- "7", #
DIDACTUM-SYSTEM-MIB::ctlInternalSensorsDiscretValue
]),
'snmp_scan_function' : scan_didactum,
'includes' : [ 'didactum.include' ],