Module: check_mk
Branch: master
Commit: 310a81d62fb58f9bd1b31635c3fd0c7c621c0f5a
URL: http://git.mathias-kettner.de/git/?p=check_mk.git;a=commit;h=310a81d62fb58f…
Author: Lars Michelsen <lm(a)mathias-kettner.de>
Date: Thu Feb 14 10:17:46 2013 +0100
Added dynamic thresholds to the oracle_tablespace check depending on the size of the tablespaces.
---
ChangeLog | 4 ++
checkman/oracle_tablespaces | 10 ++++-
checks/oracle_tablespaces | 34 ++++++++++------
web/htdocs/valuespec.py | 10 ++--
web/plugins/wato/check_parameters.py | 70 ++++++++++++++++++++++++----------
5 files changed, 88 insertions(+), 40 deletions(-)
diff --git a/ChangeLog b/ChangeLog
index 2c34cd3..7de477d 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,4 +1,8 @@
1.2.2b2:
+ Checks & Agents:
+ * Added dynamic thresholds to the oracle_tablespace check depending on the
+ size of the tablespaces.
+
BI:
* FIX: fix exception in BI-Boxes views of host groups
diff --git a/checkman/oracle_tablespaces b/checkman/oracle_tablespaces
index 6d2162c..b2acffd 100644
--- a/checkman/oracle_tablespaces
+++ b/checkman/oracle_tablespaces
@@ -74,11 +74,17 @@ parameters (dict):
{"autoextend"}: Either {True} or {False} - depending on whether auto extension is
expected to be on or off
- {"levels"}: A tuple containing the warn and crit levels for free space.
+ {"levels"}: By default a tuple containing the warn and crit levels for free space.
Supported types (int / float). If this is a float, it is considered as
percentage of the maximum size of the tablespace. If it is an integer,
it is considered to be MB of free space. If the space drops to this level or below,
- the check will get into warning state. Default is {(10.0, 5.0)}
+ the check will get into warning state. Default is {(10.0, 5.0)}.
+ This check also supports some kind of dynamic level definition. Using this you can
+ apply thresholds to tablespace checks depending on their size, just like using the
+ magic factor, but more simple do configure. To configure thi, you have to set this
+ variable to a list of tuples, where the first element is an integer representing
+ the minimum tablespace size in bytes to apply these thresholds to and a tuple
+ containing the thresholds as described above.
{"magic"}: The magic number, which scales the levels according to the tablespace size.
Default is a factor of 1.0, which does no adaptation. A factor less than 1.0 raises the levels
diff --git a/checks/oracle_tablespaces b/checks/oracle_tablespaces
index 04e943d..52e0007 100644
--- a/checks/oracle_tablespaces
+++ b/checks/oracle_tablespaces
@@ -94,8 +94,23 @@ def inventory_oracle_tablespaces(info):
def get_tablespace_levels_in_bytes(size_bytes, params):
# If the magic factor is used, take table size and magic factor
# into account in order to move levels
- magic = params.get("magic")
- warn, crit = params.get("levels")
+ magic = params.get("magic")
+
+ # Use tablespace size dependent dynamic levels or static levels
+ size_bytes = 1031 * 1024 * 1024 * 1024
+ if type(params.get("levels")) == tuple:
+ warn, crit = params.get("levels")
+ else:
+ # A list of levels. Choose the correct one depending on the
+ # size of the current tablespace
+ found = False
+ for to_size, this_levels in params.get("levels"):
+ if size_bytes > to_size:
+ print 'match', to_size, this_levels
+ warn, crit = this_levels
+ found = True
+ if not found:
+ return (None, None)
if magic:
# convert warn/crit to percentage
@@ -131,14 +146,7 @@ def get_tablespace_levels_in_bytes(size_bytes, params):
else:
crit_bytes = crit * 1024 * 1024
- warn_scaled = savefloat(warn_bytes / size_bytes * 100)
- crit_scaled = savefloat(crit_bytes / size_bytes * 100)
-
-
- levels = {}
- levels["levels_bytes"] = (warn_bytes, crit_bytes)
- levels["levels_text"] = "(levels at %.1f/%.1f%%)" % (warn_scaled, crit_scaled)
- return levels
+ return warn_bytes, crit_bytes
def check_oracle_tablespaces(item, params, info):
@@ -237,12 +245,12 @@ def check_oracle_tablespaces(item, params, info):
infotext += ", no autoextend"
- level_info = get_tablespace_levels_in_bytes(max_size, params)
- warn, crit = level_info.get("levels_bytes")
+ warn, crit = get_tablespace_levels_in_bytes(max_size, params)
# Check free space, but only if status is not READONLY
if ts_status != "READONLY":
- if free_space <= crit or free_space <= warn:
+ if (crit is not None and free_space <= crit) \
+ or (warn is not None and free_space <= warn):
infotext += ", only %s left" % get_bytes_human_readable(free_space)
infotext += " (levels at %s/%s)" % (
get_bytes_human_readable(warn), get_bytes_human_readable(crit))
diff --git a/web/htdocs/valuespec.py b/web/htdocs/valuespec.py
index 00b5d0c..4649f1e 100644
--- a/web/htdocs/valuespec.py
+++ b/web/htdocs/valuespec.py
@@ -257,27 +257,27 @@ class Filesize(Integer):
def get_exponent(self, value):
- for exp, unit_name in list(enumerate(self._names))[::-1]:
+ for exp, unit_name in list(enumerate(self._names))[::-1]:
if value == 0:
return 0,0
if value % (1024 ** exp) == 0:
return exp, value / (1024 ** exp)
def render_input(self, varprefix, value):
- exp, count = self.get_exponent(value)
+ exp, count = self.get_exponent(value)
html.number_input(varprefix + '_size', count, size = self._size)
html.write(" ")
html.select(varprefix + '_unit', enumerate(self._names), exp)
- def from_html_vars(self, varprefix):
+ def from_html_vars(self, varprefix):
try:
return int(html.var(varprefix + '_size')) * (1024 ** int(html.var(varprefix + '_unit')))
except:
raise MKUserError(varprefix + '_size', _("Please enter a valid integer number"))
def value_to_text(self, value):
- exp, count = self.get_exponent(value)
- return "%s %s" % (count, self._names[exp])
+ exp, count = self.get_exponent(value)
+ return "%s %s" % (count, self._names[exp])
# Editor for a line of text
diff --git a/web/plugins/wato/check_parameters.py b/web/plugins/wato/check_parameters.py
index f646e6c..980ee91 100644
--- a/web/plugins/wato/check_parameters.py
+++ b/web/plugins/wato/check_parameters.py
@@ -1416,26 +1416,56 @@ checkgroups.append((
_("Oracle Tablespaces"),
Dictionary(
elements = [
- ( "levels",
- Alternative(
- title = _("Total tablespace size"),
- elements = [
- Tuple(
- title = _("Percentage levels of free maximum space"),
- elements = [
- Percentage(title = _("Warning at"), label = _("free")),
- Percentage(title = _("Critical at"), label = _("free")),
- ]
- ),
- Tuple(
- title = _("Absolute free space"),
- elements = [
- Integer(title = _("Warning lower than"), unit = _("MB")),
- Integer(title = _("Critical lower than"), unit = _("MB")),
- ]
- )
- ])),
- ( "magic",
+ ("levels",
+ Alternative(
+ title = _("Levels for the Tablespace size"),
+ elements = [
+ Tuple(
+ title = _("Percentage free space"),
+ elements = [
+ Percentage(title = _("Warning below"), label = _("free")),
+ Percentage(title = _("Critical below"), label = _("free")),
+ ]
+ ),
+ Tuple(
+ title = _("Absolute free space"),
+ elements = [
+ Integer(title = _("Warning lower than"), unit = _("MB")),
+ Integer(title = _("Critical lower than"), unit = _("MB")),
+ ]
+ ),
+ ListOf(
+ Tuple(
+ orientation = "horizontal",
+ elements = [
+ Filesize(title = _("Tablespace larger than")),
+ Alternative(
+ title = _("Levels for the Tablespace size"),
+ elements = [
+ Tuple(
+ title = _("Percentage free space"),
+ elements = [
+ Percentage(title = _("Warning below"), label = _("free")),
+ Percentage(title = _("Critical below"), label = _("free")),
+ ]
+ ),
+ Tuple(
+ title = _("Absolute free space"),
+ elements = [
+ Integer(title = _("Warning lower than"), unit = _("MB")),
+ Integer(title = _("Critical lower than"), unit = _("MB")),
+ ]
+ ),
+ ]
+ ),
+ ],
+ ),
+ title = _('Dynamic levels'),
+ ),
+ ]
+ )
+ ),
+ ("magic",
Float(
title = _("Magic factor (automatic level adaptation for large tablespaces)"),
minvalue = 0.1,
Module: check_mk
Branch: master
Commit: c65883990b8beedcdeddf44e73af60c55fd848df
URL: http://git.mathias-kettner.de/git/?p=check_mk.git;a=commit;h=c65883990b8bee…
Author: Mathias Kettner <mk(a)mathias-kettner.de>
Date: Thu Feb 14 10:14:09 2013 +0100
Updated bug entries #0888
---
.bugs/888 | 16 ++++++++++++++++
1 files changed, 16 insertions(+), 0 deletions(-)
diff --git a/.bugs/888 b/.bugs/888
new file mode 100644
index 0000000..983b80a
--- /dev/null
+++ b/.bugs/888
@@ -0,0 +1,16 @@
+Title: EC Forwarding: Nagios fails if contactgroup is empty
+Component: wato
+State: open
+Date: 2013-02-14 10:12:11
+Targetversion: 1.2.3
+Class: nastiness
+
+The problem is that Check_MK does not create a contact group
+if no hosts and services are assigned to it. We could check
+if empty contact groups are possible and change that. If we
+are in OMD context we could add a patch in Nagios that changes
+that and make Check_MK behave like that in OMD context.
+
+For WATO it is not easily possible to savely know wether a
+contact group will be empty, since many aspects are involved
+(only_hosts, D-WATO, manual confiugration out of WATO, etc.)