Module: check_mk
Branch: master
Commit: 29eb4fa1640228bd7d73f1364c22d29d6e18a9c6
URL:
http://git.mathias-kettner.de/git/?p=check_mk.git;a=commit;h=29eb4fa1640228…
Author: Konstantin Büttner <kb(a)mathias-kettner.de>
Date: Thu Dec 18 15:58:11 2014 +0100
temperature.include now supports new temperature WATO rule, including configuring output
unit and overriding input unit
---
checks/temperature.include | 79 ++++++++++++++++++++++++++++------
web/plugins/wato/check_parameters.py | 26 +++++------
2 files changed, 78 insertions(+), 27 deletions(-)
diff --git a/checks/temperature.include b/checks/temperature.include
index c28dc95..9839fff 100644
--- a/checks/temperature.include
+++ b/checks/temperature.include
@@ -28,11 +28,14 @@
def fahrenheit_to_celsius(tempf):
return (float(tempf) - 32) * (5.0 / 9.0)
+def celsius_to_fahrenheit(tempc):
+ return (float(tempc) * (9.0 / 5.0)) + 32
+
# Checks Celsius temperature against crit/warn levels defined in params. temp must
# be int or float
-def check_temperature(temp, params):
+def check_temperature(temp, params, dev_unit = "c"):
def tostring(temp):
if type(temp) == int:
@@ -40,18 +43,66 @@ def check_temperature(temp, params):
else:
return "%.1f" % temp
- warn, crit = params
- perfdata = [ ("temp", temp, warn, crit) ]
- infotext = "Temperature: %s °C" % tostring(temp)
- levelstext = " (warn/crit at %s/%s °C)" % (tostring(warn), tostring(crit))
-
- if crit != None and temp >= crit:
- status = 2
- infotext += levelstext
- elif warn != None and temp >= warn:
- status = 1
- infotext += levelstext
- else:
- status = 0
+ def outtemp(tempc, output_unit):
+ if output_unit == "f":
+ return celsius_to_fahrenheit(tempc)
+ elif output_unit == "k":
+ return tempc + 273.15
+ else:
+ return tempc
+
+ unitsym = {
+ "c": "°C",
+ "f": "°F",
+ "k": "K",
+ }
+
+ if type(params) == tuple:
+ params = { "levels" : params }
+ elif params == None:
+ params = {}
+
+ input_unit = params.get("input_unit", dev_unit)
+ output_unit = params.get("output_unit", "c")
+
+ if input_unit == "f":
+ temp = fahrenheit_to_celsius(temp)
+ 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
+
+ else:
+ status = 0
return status, infotext, perfdata
diff --git a/web/plugins/wato/check_parameters.py b/web/plugins/wato/check_parameters.py
index 0e86d8b..e4cf3ba 100644
--- a/web/plugins/wato/check_parameters.py
+++ b/web/plugins/wato/check_parameters.py
@@ -5072,19 +5072,19 @@ register_check_parameters(
( "k", _("Kelvin") ),
]
)),
- ## ( "input_unit",
- ## DropdownChoice(
- ## title = _("Override unit of sensor"),
- ## help = _("In some rare cases the unit that is signalled by
the sensor "
- ## "is wrong and e.g. the sensor sends values in
Fahrenheit while "
- ## "they are misinterpreted as Celsius. With this
setting you can "
- ## "force the reading of the sensor to be interpreted
as customized. "),
- ## choices = [
- ## ( "c", _("Celsius") ),
- ## ( "f", _("Fahrenheit") ),
- ## ( "k", _("Kelvin") ),
- ## ]
- ## )),
+ ( "input_unit",
+ DropdownChoice(
+ title = _("Override unit of sensor"),
+ help = _("In some rare cases the unit that is signalled by the
sensor "
+ "is wrong and e.g. the sensor sends values in
Fahrenheit while "
+ "they are misinterpreted as Celsius. With this
setting you can "
+ "force the reading of the sensor to be interpreted as
customized. "),
+ choices = [
+ ( "c", _("Celsius") ),
+ ( "f", _("Fahrenheit") ),
+ ( "k", _("Kelvin") ),
+ ]
+ )),
## ( "sensor_levels",
## DropdownChoice(
## title = _("Interpretation of Sensor's own temperature
status"),