Module: check_mk
Branch: master
Commit: 6e680ce53c18bf739f59017e91d3b8b588809366
URL:
http://git.mathias-kettner.de/git/?p=check_mk.git;a=commit;h=6e680ce53c18bf…
Author: Sebastian Herbord <sh(a)mathias-kettner.de>
Date: Fri Apr 1 10:43:57 2016 +0200
3110 FIX ewon: Various improvements to snmp proxy functionality
Added configurable O2 levels and disabled the crit status when the N2 outlet is open.
Also fixed incompatibility with nagios core.
Unfortunately these changes make a re-discovery of the device necessary.
---
.werks/3110 | 13 +++++++
ChangeLog | 2 ++
checks/ewon | 65 ++++++++++++++++++++--------------
web/plugins/wato/check_parameters.py | 39 +++++++++++++++++++-
4 files changed, 91 insertions(+), 28 deletions(-)
diff --git a/.werks/3110 b/.werks/3110
new file mode 100644
index 0000000..9851816
--- /dev/null
+++ b/.werks/3110
@@ -0,0 +1,13 @@
+Title: ewon: Various improvements to snmp proxy functionality
+Level: 1
+Component: checks
+Class: fix
+Compatible: incomp
+State: unknown
+Version: 1.2.9i1
+Date: 1459499897
+
+Added configurable O2 levels and disabled the crit status when the N2 outlet is open.
+Also fixed incompatibility with nagios core.
+
+Unfortunately these changes make a re-discovery of the device necessary.
diff --git a/ChangeLog b/ChangeLog
index 6a93ee0..9f0e2f4 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -115,6 +115,8 @@
* 3309 FIX: zpool_status: fixed wrong error handling...
* 3014 FIX: windows_tasks.ps1: fixed incorrect text encoding for tasks with umlauts
* 3015 FIX: Dump host (cmk -D): fixed exception with service descriptions containing
umlauts
+ * 3110 FIX: ewon: Various improvements to snmp proxy functionality...
+ NOTE: Please refer to the migration notes!
Multisite:
* 3187 notification view: new filter for log command via regex
diff --git a/checks/ewon b/checks/ewon
index 61d1717..a546e13 100644
--- a/checks/ewon
+++ b/checks/ewon
@@ -55,7 +55,7 @@ oxyreduct_tag_map = {
"incident", "O2 high", "O2 low",
"alarms",
]},
- 5: {"flags": "00??????00000101",
+ 5: {"flags": "00??????0000?101",
"flag_names": [
"recovery", "maintenance", "",
"",
"", "", "",
"",
@@ -73,7 +73,7 @@ oxyreduct_tag_map = {
]},
8: {"same_as": 6},
9: {"same_as": 7},
- 10: {"name": "O2 average", "levels": (16, 17, 14, 13),
"scale": 0.01, "unit": "%",
+ 10: {"name": "O2 average", "levels_name":
"o2_levels", "levels": (16, 17, 14, 13), "scale": 0.01,
"unit": "%",
"perfvar": "o2_percentage"},
11: {"name": "O2 target", "scale": 0.01,
"unit": "%"},
12: {"name": "O2 for N2-in", "scale": 0.01,
"unit": "%"},
@@ -118,7 +118,7 @@ def inventory_oxyreduct(parsed):
yield name, {}
-def check_oxyreduct(item, param, parsed):
+def check_oxyreduct(item, params, parsed):
def to_binary(n):
return ''.join(str(1 & int(n) >> i) for i in range(16)[::-1])
@@ -151,17 +151,28 @@ def check_oxyreduct(item, param, parsed):
if "scale" in tag_params:
value = float(value) * tag_params["scale"]
- if "levels" in tag_params:
+ if "levels_name" in tag_params and
tag_params["levels_name"] in params:
+ warn, crit, warn_lower, crit_lower =
params[tag_params["levels_name"]]
+
+ elif "levels" in tag_params:
warn, crit, warn_lower, crit_lower = tag_params["levels"]
+ if warn and crit and warn_lower and crit_lower:
if (value >= crit) or (value <= crit_lower):
status = 2
elif (value >= warn) or (value <= warn_lower):
status = 1
+
+ levels_text = ""
+ if status != 0:
+ levels_text = " (warn/crit at %s%s/%s%s and below
%s%s/%s%s)" %\
+ (warn, unit, crit, unit, warn_lower, unit, crit_lower, unit)
+
perfdata = []
if "perfvar" in tag_params:
- perfdata.append((tag_params["perfvar"], value))
- yield status, "%s%s %s" % (value, unit,
tag_params["name"]), perfdata
+ perfdata.append((tag_params["perfvar"], value, warn,
crit))
+ yield status, "%s%s %s%s" %\
+ (value, unit, tag_params["name"], levels_text), perfdata
returned = True
# if it's a bitmask, try to determine if they are good flags
@@ -200,37 +211,37 @@ def inventory_ewon(parsed):
if settings:
deviceName = settings[0]
- yield "eWON Status", [deviceName]
+ yield "eWON Status", {"device": deviceName}
if deviceName:
for res in globals()["inventory_%s" % deviceName](parsed):
- yield res
+ item, params = res
+ params["device"] = deviceName
+ yield item, params
-def check_ewon(item, param, parsed):
+def check_ewon(item, params, parsed):
if item == "eWON Status":
- if not param:
+ if params["device"] is None:
return 1, "This device requires configuration. Plese pick the device
type."
else:
- return 0, "Configured for %s" % param[0]
-
- settings = host_extra_conf(g_hostname, ewon_discovery_rules)
-
- if settings:
- return globals()["check_%s" % settings[0]](item, param, parsed)
+ return 0, "Configured for %s" % params["device"]
+ if params["device"]:
+ return globals()["check_%s" % params["device"]](item,
params[params["device"]], parsed)
check_info["ewon"] = {
- "check_function" : check_ewon,
- "inventory_function" : inventory_ewon,
- "parse_function" : parse_ewon,
- "service_description" : "%s",
- "has_perfdata" : True,
- "snmp_scan_function" : lambda oid: oid(".1.3.6.1.2.1.1.2.0")
== ".1.3.6.1.4.1.8284.2.1",
- "snmp_info" : (".1.3.6.1.4.1.8284.2.1.3.1.11.1", [2,
#tagCfgId
- 4, #tagValue
- 16, #undocumented name
field
- ]
- )
+ "check_function" : check_ewon,
+ "inventory_function" : inventory_ewon,
+ "parse_function" : parse_ewon,
+ "service_description" : "%s",
+ "has_perfdata" : True,
+ "snmp_scan_function" : lambda oid: oid(".1.3.6.1.2.1.1.2.0") ==
".1.3.6.1.4.1.8284.2.1",
+ "snmp_info" : (".1.3.6.1.4.1.8284.2.1.3.1.11.1", [2,
#tagCfgId
+ 4, #tagValue
+ 16, #undocumented name
field
+ ]
+ ),
+ "group" : "ewon"
}
diff --git a/web/plugins/wato/check_parameters.py b/web/plugins/wato/check_parameters.py
index 09fe92e..12b8b7f 100644
--- a/web/plugins/wato/check_parameters.py
+++ b/web/plugins/wato/check_parameters.py
@@ -191,7 +191,7 @@ register_rule(group + '/' + subgroup_inventory,
register_rule(group + '/' + subgroup_inventory,
varname = "ewon_discovery_rules",
- title = _("EWON Discovery"),
+ title = _("eWON Discovery"),
help = _("The ewon vpn routers can rely data from a secondary device via snmp.
"
"It doesn't however allow discovery of the device type relayed this
way. "
"To allow interpretation of the data you need to pick the device
manually."),
@@ -204,6 +204,7 @@ register_rule(group + '/' + subgroup_inventory,
],
default_value = None,
),
+ match = 'first'
)
@@ -1320,6 +1321,42 @@ register_check_parameters(
match_type = "dict"
)
+
+register_check_parameters(
+ subgroup_environment,
+ 'ewon',
+ _("eWON SNMP Proxy"),
+ Dictionary(
+ title = _("Device Type"),
+ help = _("The eWON router can act as a proxy to metrics from a secondary
non-snmp device."
+ "Here you can make settings to the monitoring of the proxied
device."),
+ elements = [
+ ("oxyreduct", Dictionary(
+ title = _("Wagner OxyReduct"),
+ elements = [
+ ("o2_levels", Tuple(
+ title = _("O2 levels"),
+ elements = [
+ Percentage(title = _("Warning at"), default_value =
16.0),
+ Percentage(title = _("Critical at"), default_value
= 17.0),
+ Percentage(title = _("Warning below"),
default_value = 14.0),
+ Percentage(title = _("Critical below"),
default_value = 13.0),
+ ]
+ )
+ )
+ ]
+ )
+ )
+ ]
+ ),
+ TextAscii(
+ title = _("Item name"),
+ help = _("The item name. The meaning of this depends on the proxied device:
"
+ "- Wagner OxyReduct: Name of the room/protection zone")
+ ),
+ match_type = "dict"
+)
+
#.
# .--Storage-------------------------------------------------------------.
# | ____ _ |