Module: check_mk
Branch: master
Commit: bd00538335e8c7eb36c03a4554ace07810722c6b
URL: http://git.mathias-kettner.de/git/?p=check_mk.git;a=commit;h=bd00538335e8c7…
Author: Lars Michelsen <lm(a)mathias-kettner.de>
Date: Thu Oct 25 08:40:00 2012 +0200
BI: Fixed invalid cache cleanup in non on demand bi mode; Fixed "reused cache" icon in views
---
web/htdocs/bi.py | 13 +++++++++----
1 files changed, 9 insertions(+), 4 deletions(-)
diff --git a/web/htdocs/bi.py b/web/htdocs/bi.py
index 539918f..69455f7 100644
--- a/web/htdocs/bi.py
+++ b/web/htdocs/bi.py
@@ -212,11 +212,14 @@ def log(s):
# printable (and storable in Python syntax to a file).
def compile_forest(user, only_hosts = None, only_groups = None):
global g_cache, g_user_cache, g_compiled_everything
+ global used_cache, did_compilation
new_config_information = cache_needs_update()
- if new_config_information or (not only_groups and not only_hosts):
- # config changed or monitoring daemon restarted, clear cache
- # or: total compilation requested (even if some hosts have already be compiled)
+ if new_config_information \
+ or (config.bi_precompile_on_demand and not only_groups and not only_hosts):
+ # config changed or monitoring daemon restarted, clear cache.
+ # or: in case of on demand precompile and a total compilation
+ # requested (even if some hosts have already be compiled).
g_cache = {}
global g_config_information
g_config_information = new_config_information
@@ -224,6 +227,7 @@ def compile_forest(user, only_hosts = None, only_groups = None):
if g_compiled_everything:
log('PID: %d - Already compiled everything\n' % os.getpid())
+ used_cache = True
return # In this case simply skip further compilations
# OPTIMIZE: All users that have the permissing bi.see_all
@@ -264,16 +268,17 @@ def compile_forest(user, only_hosts = None, only_groups = None):
only_hosts = to_compile(only_hosts, 'hosts')
if not only_hosts:
log('PID: %d - All requested hosts have already been compiled\n' % os.getpid())
+ used_cache = True
return # Nothing to do - everything is cached
if only_groups and cache['compiled_groups']:
only_groups = to_compile(only_groups, 'groups')
if not only_groups:
log('PID: %d - All requested groups have already been compiled\n' % os.getpid())
+ used_cache = True
return # Nothing to do - everything is cached
# Set a flag that anything has been compiled in this call
- global did_compilation
did_compilation = True
# Load all (needed) services
Module: check_mk
Branch: master
Commit: 210c1315b1904a4e0a8245211d86f84abcaa3972
URL: http://git.mathias-kettner.de/git/?p=check_mk.git;a=commit;h=210c1315b1904a…
Author: Florian Heigl <fh(a)mathias-kettner.de>
Date: Wed Oct 24 23:19:41 2012 +0200
new checks for Siemens HiPath 3000/5000 supporting Octopus-E MIB
---
checks/sni_octopuse_cpu | 58 ++++++++++++++++++++++++++++++++
checks/sni_octopuse_status | 66 ++++++++++++++++++++++++++++++++++++
checks/sni_octopuse_trunks | 80 ++++++++++++++++++++++++++++++++++++++++++++
3 files changed, 204 insertions(+), 0 deletions(-)
diff --git a/checks/sni_octopuse_cpu b/checks/sni_octopuse_cpu
new file mode 100644
index 0000000..0e06d1f
--- /dev/null
+++ b/checks/sni_octopuse_cpu
@@ -0,0 +1,58 @@
+#!/usr/bin/python
+# -*- encoding: utf-8; py-indent-offset: 4 -*-
+# +------------------------------------------------------------------+
+# | ____ _ _ __ __ _ __ |
+# | / ___| |__ ___ ___| | __ | \/ | |/ / |
+# | | | | '_ \ / _ \/ __| |/ / | |\/| | ' / |
+# | | |___| | | | __/ (__| < | | | | . \ |
+# | \____|_| |_|\___|\___|_|\_\___|_| |_|_|\_\ |
+# | |
+# | Copyright Mathias Kettner 2012 mk(a)mathias-kettner.de |
+# +------------------------------------------------------------------+
+#
+# This file is part of Check_MK.
+# The official homepage is at http://mathias-kettner.de/check_mk.
+#
+# check_mk is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by
+# the Free Software Foundation in version 2. check_mk is distributed
+# in the hope that it will be useful, but WITHOUT ANY WARRANTY; with-
+# out even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE. See the GNU General Public License for more de-
+# ails. You should have received a copy of the GNU General Public
+# License along with GNU Make; see the file COPYING. If not, write
+# to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+# Boston, MA 02110-1301 USA.
+
+
+#1.3.6.1.4.1.231.7.2.9.1.7
+#CPU util
+#( 0..100 )
+
+def inventory_octopus_cpu(info):
+ # are there only 1-cpu models?
+ if len(info[0][0]) == 1:
+ # no level so far, it should work ok even under load
+ return [(None, None)]
+
+
+def check_octopus_cpu(_no_item, _no_params_info, info):
+ try:
+ # need to un-triple pack here.
+ cpu_perc = int(info[0][0][0])
+ perfdata = [ ("util", "%.3f" % cpu_perc) ]
+ return (0, "OK - CPU utilization is %d%%. (OK from 0-100)" % cpu_perc, perfdata)
+ except:
+ return (3, "UKNW - invalid data received")
+
+
+check_info['sni_octopuse_cpu'] = {
+ 'check_function' : check_octopus_cpu,
+ 'inventory_function' : inventory_octopus_cpu,
+ 'service_description': "CPU utilization",
+ 'has_perfdata' : True,
+ 'snmp_scan_function' : lambda oid: "agent for hipath" in \
+ oid(".1.3.6.1.2.1.1.1.0").lower(),
+ 'snmp_info' : [ (".1.3.6.1.4.1.231.7.2.9.1", [7]),
+ ]
+}
diff --git a/checks/sni_octopuse_status b/checks/sni_octopuse_status
new file mode 100644
index 0000000..e940b0c
--- /dev/null
+++ b/checks/sni_octopuse_status
@@ -0,0 +1,66 @@
+#!/usr/bin/python
+# -*- encoding: utf-8; py-indent-offset: 4 -*-
+# +------------------------------------------------------------------+
+# | ____ _ _ __ __ _ __ |
+# | / ___| |__ ___ ___| | __ | \/ | |/ / |
+# | | | | '_ \ / _ \/ __| |/ / | |\/| | ' / |
+# | | |___| | | | __/ (__| < | | | | . \ |
+# | \____|_| |_|\___|\___|_|\_\___|_| |_|_|\_\ |
+# | |
+# | Copyright Mathias Kettner 2012 mk(a)mathias-kettner.de |
+# +------------------------------------------------------------------+
+#
+# This file is part of Check_MK.
+# The official homepage is at http://mathias-kettner.de/check_mk.
+#
+# check_mk is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by
+# the Free Software Foundation in version 2. check_mk is distributed
+# in the hope that it will be useful, but WITHOUT ANY WARRANTY; with-
+# out even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE. See the GNU General Public License for more de-
+# ails. You should have received a copy of the GNU General Public
+# License along with GNU Make; see the file COPYING. If not, write
+# to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+# Boston, MA 02110-1301 USA.
+
+
+# iso.3.6.1.4.1.231.7.2.9.1.1.0 = INTEGER: 1
+#The actual error state of the Octopus E PABX. Contains the highest severity level of the recent error events. This object is updated automatically, but it can also be modified manually.
+
+#{ normal(1), warning(2), minor(3), major(4), critical(5) }
+
+
+def inventory_octopus_status(info):
+ if len(info[0][0]) == 1:
+ return [(None, None)]
+
+
+def check_octopus_status(_no_item, _no_params_info, info):
+ octopus_states_map = { 1 : (0, "normal" ),
+ 2 : (1, "warning" ),
+ 3 : (1, "minor" ),
+ 4 : (2, "major" ),
+ 5 : (2, "critical")}
+
+
+ octopus_state = int(info[0][0][0])
+ state = octopus_states_map[octopus_state][0]
+ desc = octopus_states_map[octopus_state][1]
+
+ msg = " - PBX system state is %s" % desc
+ if octopus_state >= 3:
+ msg = msg + " error"
+ return (state, nagios_state_names[state] + msg)
+
+
+check_info['sni_octopuse_status'] = {
+ 'check_function' : check_octopus_status,
+ 'inventory_function' : inventory_octopus_status,
+ 'service_description': "Global status",
+ 'has_perfdata' : True,
+ 'snmp_scan_function' : lambda oid: "agent for hipath" in \
+ oid(".1.3.6.1.2.1.1.1.0").lower(),
+ 'snmp_info' : [ (".1.3.6.1.4.1.231.7.2.9", ["1.1.0"]),
+ ]
+}
diff --git a/checks/sni_octopuse_trunks b/checks/sni_octopuse_trunks
new file mode 100644
index 0000000..d0bcf75
--- /dev/null
+++ b/checks/sni_octopuse_trunks
@@ -0,0 +1,80 @@
+#!/usr/bin/python
+# -*- encoding: utf-8; py-indent-offset: 4 -*-
+# +------------------------------------------------------------------+
+# | ____ _ _ __ __ _ __ |
+# | / ___| |__ ___ ___| | __ | \/ | |/ / |
+# | | | | '_ \ / _ \/ __| |/ / | |\/| | ' / |
+# | | |___| | | | __/ (__| < | | | | . \ |
+# | \____|_| |_|\___|\___|_|\_\___|_| |_|_|\_\ |
+# | |
+# | Copyright Mathias Kettner 2012 mk(a)mathias-kettner.de |
+# +------------------------------------------------------------------+
+#
+# This file is part of Check_MK.
+# The official homepage is at http://mathias-kettner.de/check_mk.
+#
+# check_mk is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by
+# the Free Software Foundation in version 2. check_mk is distributed
+# in the hope that it will be useful, but WITHOUT ANY WARRANTY; with-
+# out even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE. See the GNU General Public License for more de-
+# ails. You should have received a copy of the GNU General Public
+# License along with GNU Make; see the file COPYING. If not, write
+# to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+# Boston, MA 02110-1301 USA.
+
+#.1.3.6.1.4.1.231.7.2.9.3.8.1.3.1 "OpenStage 30"
+#.1.3.6.1.4.1.231.7.2.9.3.8.1.3.2 "OpenStage 30"
+#.1.3.6.1.4.1.231.7.2.9.3.8.1.3.7 "P. O. T."
+#.1.3.6.1.4.1.231.7.2.9.3.8.1.3.9 "S0 extension"
+#.1.3.6.1.4.1.231.7.2.9.3.8.1.3.11 "S0 trunk: extern"
+#.1.3.6.1.4.1.231.7.2.9.3.8.1.3.13 "<not configured>: extern"
+#[...]
+#.1.3.6.1.4.1.231.7.2.9.3.8.1.4.11 2
+#.1.3.6.1.4.1.231.7.2.9.3.8.1.4.13 1
+
+
+
+def inventory_octopus_trunks(info):
+ trunkports = [ "S0 trunk: extern" ]
+ inventory = []
+ for line in info[0]:
+ if len(line) == 4:
+ portindex, cardindex, porttype, portstate = line
+ portdesc = "%s/%s" % (cardindex, portindex)
+ if porttype in trunkports and portstate == "2":
+ inventory.append((portdesc, None))
+ return inventory
+
+
+def check_octopus_trunks(item, _no_params, info):
+ for line in info[0]:
+ portindex, cardindex, porttype, portstate = line
+ portdesc = "%s/%s" % (cardindex, portindex)
+ if item == portdesc:
+ # There are two relevant card states, we use the one from
+ # octoPortTable
+ if portstate == "1":
+ return (2, "CRIT - Port [%s] is inactive" % porttype)
+ else:
+ return (0, "OK - Port [%s] is active" % porttype)
+
+ return (3, "UNKW - unknown data received from agent")
+
+check_info['sni_octopuse_trunks'] = {
+ 'check_function' : check_octopus_trunks,
+ 'inventory_function' : inventory_octopus_trunks,
+ 'service_description': "Trunk Port %s",
+ 'has_perfdata' : False,
+ 'snmp_scan_function' : lambda oid: "agent for hipath" in \
+ oid(".1.3.6.1.2.1.1.1.0").lower(),
+ 'snmp_info' : [ (".1.3.6.1.4.1.231.7.2.9.3.8.1", [
+ "1", # portIndex
+ "2", # port card index (slot)
+ "3", # PortType
+ "4", # Port State
+ ]),
+ ]
+}
+