Module: check_mk
Branch: master
Commit: d79be0171cf0b69f5645ec40db69e5d617a30423
URL:
http://git.mathias-kettner.de/git/?p=check_mk.git;a=commit;h=d79be0171cf0b6…
Author: Mathias Kettner <mk(a)mathias-kettner.de>
Date: Thu Oct 22 14:18:57 2015 +0200
Restructured internal code, so precompile of params is always executed
---
checks/fileinfo | 15 +++++----------
modules/check_mk.py | 22 +++++++++++++---------
modules/check_mk_base.py | 11 ++---------
modules/discovery.py | 2 +-
4 files changed, 21 insertions(+), 29 deletions(-)
diff --git a/checks/fileinfo b/checks/fileinfo
index 4650f26..f030189 100644
--- a/checks/fileinfo
+++ b/checks/fileinfo
@@ -135,8 +135,11 @@ def fileinfo_groups_precompile(hostname, item, params):
if type(pattern) == str: # support old format
pattern = (pattern, '')
patterns.append(pattern)
- params['precompiled_patterns'] = patterns
- return params
+
+ precomped = params.copy()
+ precomped['precompiled_patterns'] = patterns
+ return precomped
+
def check_fileinfo_groups(item, params, info):
if not info:
@@ -148,14 +151,6 @@ def check_fileinfo_groups(item, params, info):
import fnmatch
reftime = int(info[0][0])
- # Get the grouping patterns (either compile or reuse the precompiled ones)
- # Check_MK creates an empty string if the precompile function has
- # not been exectued yet. The precompile function creates an empty
- # list when no rules/patterns are defined.
- if 'precompiled_patterns' not in params:
- # TODO: it's not allowed to modify params!!
- fileinfo_groups_precompile(g_hostname, item, params)
-
count_all = 0
age_oldest = None
age_newest = 0
diff --git a/modules/check_mk.py b/modules/check_mk.py
index 4b4656c..1bab85b 100755
--- a/modules/check_mk.py
+++ b/modules/check_mk.py
@@ -3218,7 +3218,7 @@ no_discovery_possible = None
output.write("%s = %r\n" % (var, globals()[var]))
output.write("\n# Checks for %s\n\n" % hostname)
- output.write("def get_sorted_check_table(hostname, remove_duplicates=False,
world='config'):\n return %r\n\n" % check_table)
+ output.write("def get_precompiled_check_table(hostname, remove_duplicates=False,
world='config'):\n return %r\n\n" % check_table)
# Do we need to load the SNMP module? This is the case, if the host
# has at least one SNMP based check. Also collect the needed check
@@ -3474,19 +3474,23 @@ no_discovery_possible = None
sys.stderr.write(" ==> %s.\n" % compiled_filename)
-def get_precompiled_check_table(hostname):
- host_checks = get_sorted_check_table(hostname, remove_duplicates=True)
+def get_precompiled_check_table(hostname, remove_duplicates=True,
world="config"):
+ host_checks = get_sorted_check_table(hostname, remove_duplicates, world)
precomp_table = []
- for checktype, item, params, description, deps in host_checks:
+ for check_type, item, params, description, deps in host_checks:
aggr_name = aggregated_service_name(hostname, description)
- # some checks need precompilation of parameters
- precomp_func = precompile_params.get(checktype)
- if precomp_func:
- params = precomp_func(hostname, item, params)
- precomp_table.append((checktype, item, params, description, aggr_name)) # deps
not needed while checking
+ params = get_precompiled_check_parameters(hostname, item, params, check_type)
+ precomp_table.append((check_type, item, params, description, aggr_name)) # deps
not needed while checking
return precomp_table
+def get_precompiled_check_parameters(hostname, item, params, check_type):
+ precomp_func = precompile_params.get(check_type)
+ if precomp_func:
+ return precomp_func(hostname, item, params)
+ else:
+ return params
+
#.
# .--Pack config---------------------------------------------------------.
diff --git a/modules/check_mk_base.py b/modules/check_mk_base.py
index 0ec829f..762aa9d 100644
--- a/modules/check_mk_base.py
+++ b/modules/check_mk_base.py
@@ -1361,12 +1361,12 @@ def do_all_checks_on_host(hostname, ipaddress, only_check_types =
None):
g_hostname = hostname
num_success = 0
error_sections = set([])
- check_table = get_sorted_check_table(hostname, remove_duplicates=True,
world=opt_keepalive and "active" or "config")
+ check_table = get_precompiled_check_table(hostname, remove_duplicates=True,
world=opt_keepalive and "active" or "config")
problems = []
parsed_infos = {} # temporary cache for section infos, maybe parsed
- for checkname, item, params, description, aggrinfo in check_table:
+ for checkname, item, params, description, aggrname in check_table:
if only_check_types != None and checkname not in only_check_types:
continue
@@ -1388,13 +1388,6 @@ def do_all_checks_on_host(hostname, ipaddress, only_check_types =
None):
sys.stderr.write("Service %s: timeperiod %s is currently active.\n"
%
(description, period))
- # In case of a precompiled check table aggrinfo is the aggrated
- # service name. In the non-precompiled version there are the dependencies
- if type(aggrinfo) == str:
- aggrname = aggrinfo
- else:
- aggrname = aggregated_service_name(hostname, description)
-
infotype = checkname.split('.')[0]
try:
if infotype in parsed_infos:
diff --git a/modules/discovery.py b/modules/discovery.py
index f5c3057..cf5c766 100644
--- a/modules/discovery.py
+++ b/modules/discovery.py
@@ -998,7 +998,7 @@ def get_check_preview(hostname, use_caches, do_snmp_scan, on_error):
if exitcode == None:
check_function = check_info[check_type]["check_function"]
if check_source != 'manual':
- params = compute_check_parameters(hostname, check_type, item,
params)
+ params = get_precompiled_check_parameters(hostname, item,
compute_check_parameters(hostname, check_type, item, params), check_type)
try:
reset_wrapped_counters()