Module: check_mk
Branch: master
Commit: b421cb73d2ebcc2bd5450ad795d9ddd599b32a62
URL:
http://git.mathias-kettner.de/git/?p=check_mk.git;a=commit;h=b421cb73d2ebcc…
Author: Konstantin Büttner <kb(a)mathias-kettner.de>
Date: Fri Jan 16 14:35:03 2015 +0100
check_temperature in temperature.include can now handle device levels
---
checks/temperature.include | 164 ++++++++++++++++++++++++++--------
web/plugins/wato/check_parameters.py | 22 ++---
2 files changed, 140 insertions(+), 46 deletions(-)
diff --git a/checks/temperature.include b/checks/temperature.include
index 9839fff..4c26df3 100644
--- a/checks/temperature.include
+++ b/checks/temperature.include
@@ -35,7 +35,7 @@ def celsius_to_fahrenheit(tempc):
# Checks Celsius temperature against crit/warn levels defined in params. temp must
# be int or float
-def check_temperature(temp, params, dev_unit = "c"):
+def check_temperature(temp, params, dev_unit = "c", dev_levels = None,
dev_levelsl = None, dev_status = None):
def tostring(temp):
if type(temp) == int:
@@ -51,16 +51,29 @@ def check_temperature(temp, params, dev_unit = "c"):
else:
return tempc
+ def check_levels(temp, warn, crit, warnl, critl):
+ if crit != None and temp >= crit:
+ status = 2
+ elif critl != None and temp < critl:
+ status = 2
+ elif warn != None and temp >= warn:
+ status = 1
+ elif warnl != None and temp < warnl:
+ status = 1
+ else:
+ status = 0
+ return status
+
unitsym = {
"c": "°C",
"f": "°F",
"k": "K",
}
- if type(params) == tuple:
- params = { "levels" : params }
- elif params == None:
+ if params == None or params == (None, None):
params = {}
+ elif type(params) == tuple:
+ params = { "levels" : params }
input_unit = params.get("input_unit", dev_unit)
output_unit = params.get("output_unit", "c")
@@ -70,39 +83,118 @@ def check_temperature(temp, params, dev_unit = "c"):
if input_unit == "k":
temp = temp - 273.15
- if type(params) == dict:
- warn, crit = params.get("levels", (None, None))
- warnl, critl = params.get("levels_lower", (None, None))
- perfdata = [ ("temp", temp, warn, crit, warnl, critl) ]
- infotext = "%s %s" % (tostring(outtemp(temp, output_unit)),
unitsym[output_unit])
- levelstext = ""
- levelstext_lower = ""
- if warn != None and crit != None:
- levelstext = " (warn/crit at %s/%s %s)" % (
- tostring(outtemp(warn, output_unit)),
- tostring(outtemp(crit, output_unit)),
- unitsym[output_unit])
- if warnl != None and critl != None:
- levelstext_lower = " (warn/crit below %s/%s %s)" % (
- tostring(outtemp(warnl, output_unit)),
- tostring(outtemp(critl, output_unit)),
- unitsym[output_unit])
-
- if crit != None and temp >= crit:
- status = 2
- infotext += levelstext
- elif critl != None and temp < critl:
- status = 2
- infotext += levelstext_lower
-
- elif warn != None and temp >= warn:
- status = 1
- infotext += levelstext
- elif warnl != None and temp < warnl:
- status = 1
- infotext += levelstext_lower
+ usr_levels = params.get("levels", None)
+ usr_levelsl = params.get("levels_lower", None)
+ dlh = params.get("device_levels_handling", "usrdefault")
+
+ uwarn = ucrit = uwarnl = ucritl = dwarn = dcrit = dwarnl = dcritl = None
+
+ if usr_levels:
+ uwarn, ucrit = usr_levels
+ if usr_levelsl:
+ uwarnl, ucritl = usr_levelsl
+ if dev_levels:
+ dwarn, dcrit = dev_levels
+ if dev_levelsl:
+ dwarnl, dcritl = dev_levelsl
+
+# if dev_status:
+# warn, crit, warnl, critl = uwarn, ucrit, uwarnl, ucritl
+# ustatus = check_levels(temp, warn, crit, warnl, critl)
+# if dlh == "usr":
+# status = ustatus
+# if dlh == "dev" or dlh == "devdefault":
+# warn = crit = warnl = critl = None
+# status = dev_status
+# if dlh == "best":
+# status = min(dev_status, ustatus)
+# if dlh == "worst":
+# status = max(dev_status, ustatus)
+
+# if not dev_status:
+ if dlh == "usr":
+ warn, crit, warnl, critl = uwarn, ucrit, uwarnl, ucritl
+
+ if dlh == "dev":
+ warn, crit, warnl, critl = dwarn, dcrit, dwarnl, dcritl
+
+ if dlh == "best":
+ warn, crit = max(uwarn, dwarn), max(ucrit, dcrit)
+ warnl, critl = min(uwarnl, dwarnl), min(ucritl, dcritl)
+
+ if dlh == "worst":
+ warn, crit = min(uwarn, dwarn), min(ucrit, dcrit)
+ warnl, critl = max(uwarnl, dwarnl), max(ucritl, dcritl)
+
+ if dlh == "usrdefault":
+ if usr_levels:
+ warn, crit = usr_levels
+ else:
+ warn, crit = dwarn, dcrit
+ if usr_levelsl:
+ warnl, critl = usr_levelsl
+ else:
+ warnl, critl = dwarnl, dcritl
+ if dlh == "devdefault":
+ if dev_levels:
+ warn, crit = dev_levels
else:
- status = 0
+ warn, crit = uwarn, ucrit
+ if dev_levelsl:
+ warnl, critl = dev_levelsl
+ else:
+ warn, crit = uwarnl, ucritl
+
+ status = check_levels(temp, warn, crit, warnl, critl)
+
+ perfdata = [ ("temp", temp, warn, crit, warnl, critl) ]
+
+ infotext = "%s %s" % (tostring(outtemp(temp, output_unit)),
unitsym[output_unit])
+ ulevelstext = ""
+ ulevelstext_lower = ""
+ dlevelstext = ""
+ dlevelstext_lower = ""
+ if usr_levels:
+ ulevelstext = " (warn/crit at %s/%s %s)" % (
+ tostring(outtemp(uwarn, output_unit)),
+ tostring(outtemp(ucrit, output_unit)),
+ unitsym[output_unit])
+ if usr_levelsl:
+ ulevelstext_lower = " (warn/crit below %s/%s %s)" % (
+ tostring(outtemp(uwarnl, output_unit)),
+ tostring(outtemp(ucritl, output_unit)),
+ unitsym[output_unit])
+ if dev_levels:
+ dlevelstext = " (device warn/crit at %s/%s %s)" % (
+ tostring(outtemp(dwarn, output_unit)),
+ tostring(outtemp(dcrit, output_unit)),
+ unitsym[output_unit])
+ if dev_levelsl:
+ dlevelstext_lower = " (device warn/crit below %s/%s %s)" % (
+ tostring(outtemp(dwarnl, output_unit)),
+ tostring(outtemp(dcritl, output_unit)),
+ unitsym[output_unit])
+
+
+ if status in [1, 2] :
+ if dlh == "usr":
+ infotext += ulevelstext + ulevelstext_lower
+ elif dlh == "dev":
+ infotext += dlevelstext + dlevelstext_lower
+ elif dlh == "best" or dlh == "worst":
+ infotext += ulevelstext + ulevelstext_lower + dlevelstext +
dlevelstext_lower
+ elif dlh == "devdefault":
+ infotext += dlevelstext + dlevelstext_lower
+ if not dev_levels:
+ infotext += ulevelstext
+ if not dev_levelsl:
+ infotext += ulevelstext_lower
+ elif dlh == "usrdefault":
+ infotext += ulevelstext + ulevelstext_lower
+ if not usr_levels:
+ infotext += dlevelstext
+ if not usr_levelsl:
+ infotext += dlevelstext_lower
return status, infotext, perfdata
diff --git a/web/plugins/wato/check_parameters.py b/web/plugins/wato/check_parameters.py
index 0f94ea4..97533cb 100644
--- a/web/plugins/wato/check_parameters.py
+++ b/web/plugins/wato/check_parameters.py
@@ -5266,16 +5266,18 @@ register_check_parameters(
( "k", _("Kelvin") ),
]
)),
- ## ( "sensor_levels",
- ## DropdownChoice(
- ## title = _("Interpretation of Sensor's own temperature
status"),
- ## choices = [
- ## ( "ignore", _("Ignore sensor's own
levels") ),
- ## ( "sensor", _("Only use sensor's levels,
ignore yours" ) ),
- ## ( "best", _("Use least critical of your and
sensor's levels") ),
- ## ( "worst", _("Use most critical of your and
sensor's levels") ),
- ## ]
- ## )),
+ ( "device_levels_handling",
+ DropdownChoice(
+ title = _("Interpretation of the device's own temperature
status"),
+ choices = [
+ ( "usr", _("Ignore device's own
levels") ),
+ ( "dev", _("Only use device's levels, ignore
yours" ) ),
+ ( "best", _("Use least critical of your and
device's levels") ),
+ ( "worst", _("Use most critical of your and
device's levels") ),
+ ( "devdefault", _("Use device's levels if
present, otherwise yours") ),
+ ( "usrdefault", _("Use your own levels if
present, otherwise the device's") ),
+ ]
+ )),
]
),