Module: check_mk
Branch: master
Commit: 4c0f23a0762098003cefd9e8b57a28a658b4355b
URL: http://git.mathias-kettner.de/git/?p=check_mk.git;a=commit;h=4c0f23a0762098…
Author: Mathias Kettner <mk(a)mathias-kettner.de>
Date: Tue Mar 10 16:08:13 2015 +0100
Renamed inventory by discovery in two places
---
web/plugins/wato/check_parameters.py | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/web/plugins/wato/check_parameters.py b/web/plugins/wato/check_parameters.py
index 0af05ae..100a524 100644
--- a/web/plugins/wato/check_parameters.py
+++ b/web/plugins/wato/check_parameters.py
@@ -4961,7 +4961,7 @@ register_rule(
group + '/' + subgroup_storage,
"diskstat_inventory",
ListChoice(
- title = _("Inventory mode for Disk IO check"),
+ title = _("Discovery mode for Disk IO check"),
help = _("This rule controls which and how many checks will be created "
"for monitoring individual physical and logical disks."),
choices = [
@@ -5020,7 +5020,7 @@ register_rule(group + '/' + subgroup_networking,
register_rule(group + '/' + subgroup_inventory,
varname = "winperf_msx_queues_inventory",
- title = _('MS Exchange Message Queues Inventory'),
+ title = _('MS Exchange Message Queues Discovery'),
help = _('Per default the offsets of all Windows performance counters are preconfigured in the check. '
'If the format of your counters object is not compatible then you can adapt the counter '
'offsets manually.'),
Module: check_mk
Branch: master
Commit: 71b702e2755b95ac01b20f90747f59fa309c0848
URL: http://git.mathias-kettner.de/git/?p=check_mk.git;a=commit;h=71b702e2755b95…
Author: Mathias Kettner <mk(a)mathias-kettner.de>
Date: Tue Mar 10 16:09:48 2015 +0100
#2134 winperf_phydisk: allow device to appear more than one time in agent output
This can e.g. be the case in Windows clusters, where the drive letter <tt>E:</tt> appears
three times. The check now adds up all counters of the three devices - just like in the
summary check.
---
.werks/2134 | 11 +++++++++++
ChangeLog | 1 +
checks/diskstat.include | 44 ++++++++++++++++++++------------------------
3 files changed, 32 insertions(+), 24 deletions(-)
diff --git a/.werks/2134 b/.werks/2134
new file mode 100644
index 0000000..4d1e882
--- /dev/null
+++ b/.werks/2134
@@ -0,0 +1,11 @@
+Title: winperf_phydisk: allow device to appear more than one time in agent output
+Level: 1
+Component: checks
+Compatible: compat
+Version: 1.2.7i1
+Date: 1426000114
+Class: feature
+
+This can e.g. be the case in Windows clusters, where the drive letter <tt>E:</tt> appears
+three times. The check now adds up all counters of the three devices - just like in the
+summary check.
diff --git a/ChangeLog b/ChangeLog
index a11c426..19a0c19 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -119,6 +119,7 @@
* 1226 mysql: New check to show the version of the mysql deamon
* 2100 if64: check can now impose limits on the number of outgoing and incoming non-unicast packets per second
* 1227 mysql_ping: New Check to detect misconfiguration of the mk_mysql plugin
+ * 2134 winperf_phydisk: allow device to appear more than one time in agent output...
* 1457 FIX: logins: new check renamed from "users" check...
NOTE: Please refer to the migration notes!
* 1762 FIX: lnx_thermal: Now ignoring trip points with level 0...
diff --git a/checks/diskstat.include b/checks/diskstat.include
index 9090f70..04813cd 100644
--- a/checks/diskstat.include
+++ b/checks/diskstat.include
@@ -212,33 +212,29 @@ def check_diskstat_generic(item, params, this_time, info, mode='sectors'):
if item in [ 'read', 'write' ]:
return check_diskstat_old(item, params, this_time, info)
- # summary mode
- if item == 'SUMMARY': # summary mode (only summarize physical disks!)
- summary_line = [0] * 13
- if len(info) == 0:
- return 3, "No performance information about any disk found"
- for line in info:
- if line[0] != None:
- return 3, "summary mode not supported in a cluster"
- devname = line[1]
- if ' ' in devname:
- continue
- summary_line = map(lambda e: e[0] + int(e[1]), zip(summary_line, line[2:]))
- return check_diskstat_line(this_time, "SUMMARY", params, [None, ''] + summary_line, mode)
-
- # single mode
- result = ""
+ # Sum up either all physical disks (if item is "SUMMARY") or
+ # all entries matching the item in question. It is not a bug if
+ # a disk appears more than once. This can for example happen in
+ # Windows clusters - even if they are no Check_MK clusters.
+
+ summed_up = [0] * 13
+ matching = 0
+
for line in info:
- if line[1] == item: # this may happen several times for a cluster
- if result == "":
- result = check_diskstat_line(this_time, item, params, line, mode)
- else:
- result = (2, "more than one device found in cluster")
+ if item == 'SUMMARY' and line[0] != None:
+ return 3, "summary mode not supported in a cluster"
- if result != "":
- return result
+ elif item == 'SUMMARY' and ' ' in line[1]:
+ continue # skip non-physical disks
- return (3, "device missing")
+ elif item == 'SUMMARY' or line[1] == item:
+ matching += 1
+ summed_up = map(lambda e: e[0] + int(e[1]), zip(summed_up, line[2:]))
+
+ if matching == 0:
+ return 3, "No matching disk found"
+ else:
+ return check_diskstat_line(this_time, item, params, [None, ''] + summed_up, mode)
# This is the legacy version of diskstat as used in <= 1.1.10.
Module: check_mk
Branch: master
Commit: 3fba01211eab33b57ecdcdba3bb576ab5c767838
URL: http://git.mathias-kettner.de/git/?p=check_mk.git;a=commit;h=3fba01211eab33…
Author: Mathias Kettner <mk(a)mathias-kettner.de>
Date: Tue Mar 10 14:46:37 2015 +0100
#2099 Allow replication of Event Console rule and settings
The Event Console can now be configured in a distributed setup via WATO. This means
that if you have several Event Consoles then you can have the settings of the central
WATO site be replicated to the decentral Event Consoles and their changes being
activate by using the usual <i>Active Changes</i> mechanism.
In the site configuration there is a new checkbox that activates the
replication of the configuration.
Notes: In previous versions the configuration was also replicated, but not
activated. And you could not select sites for which not to replicate the
configuration. The local Event Console is being handled like it was. This
means that changes are activated via the special button in the Event Console
settings page.
---
.werks/2099 | 23 +++++++++++----
ChangeLog | 3 +-
mkeventd/web/plugins/wato/mkeventd.py | 23 +++++++++++++--
web/htdocs/multitar.py | 2 +-
web/htdocs/wato.py | 50 +++++++++++++++++++++++++++------
5 files changed, 81 insertions(+), 20 deletions(-)
Diff: http://git.mathias-kettner.de/git/?p=check_mk.git;a=commitdiff;h=3fba01211e…
Module: check_mk
Branch: master
Commit: e007dd7b12ae10016a003fbb3dde982b3a0ca427
URL: http://git.mathias-kettner.de/git/?p=check_mk.git;a=commit;h=e007dd7b12ae10…
Author: Lars Michelsen <lm(a)mathias-kettner.de>
Date: Fri Mar 6 15:50:53 2015 +0100
Additional performance improvements
---
modules/check_mk.py | 53 ++++++++++++++++++++++++++-------------------------
1 file changed, 27 insertions(+), 26 deletions(-)
diff --git a/modules/check_mk.py b/modules/check_mk.py
index 4aa509d..253b648 100755
--- a/modules/check_mk.py
+++ b/modules/check_mk.py
@@ -444,14 +444,16 @@ def collect_hosttags():
# list. The host must have all tags in the list, except
# for those negated with '!'. Those the host must *not* have!
# New in 1.1.13: a trailing + means a prefix match
+g_hosttag_taglist_cache = {}
def hosttags_match_taglist(hosttags, required_tags):
+ try:
+ cache_id = tuple(hosttags)+tuple(required_tags)
+ return g_hosttag_taglist_cache[cache_id]
+ except KeyError:
+ pass
+
for tag in required_tags:
- if len(tag) > 0 and tag[0] == '!':
- negate = True
- tag = tag[1:]
- else:
- negate = False
- #negate, tag = parse_negated(tag)
+ negate, tag = parse_negated(tag)
if tag and tag[-1] == '+':
tag = tag[:-1]
matches = False
@@ -461,11 +463,13 @@ def hosttags_match_taglist(hosttags, required_tags):
break
else:
- matches = (tag in hosttags)
+ matches = tag in hosttags
if matches == negate:
+ g_hosttag_taglist_cache[cache_id] = False
return False
+ g_hosttag_taglist_cache[cache_id] = True
return True
#.
@@ -886,15 +890,18 @@ def get_check_table(hostname, remove_duplicates=False, use_cache=True, world='co
else:
g_multihost_checks.append(entry)
+ hosttags = tags_of_host(hostname)
+
def handle_entry(entry):
- if len(entry) == 3: # from autochecks
+ num_elements = len(entry)
+ if num_elements == 3: # from autochecks
hostlist = hostname
checkname, item, params = entry
tags = []
- elif len(entry) == 4:
+ elif num_elements == 4:
hostlist, checkname, item, params = entry
tags = []
- elif len(entry) == 5:
+ elif num_elements == 5:
tags, hostlist, checkname, item, params = entry
if type(tags) != list:
raise MKGeneralException("Invalid entry '%r' in check table. First entry must be list of host tags." %
@@ -904,22 +911,21 @@ def get_check_table(hostname, remove_duplicates=False, use_cache=True, world='co
raise MKGeneralException("Invalid entry '%r' in check table. It has %d entries, but must have 4 or 5." %
(entry, len(entry)))
- # hostinfo list might be:
+ # hostlist list might be:
# 1. a plain hostname (string)
# 2. a list of hostnames (list of strings)
# Hostnames may be tagged. Tags are removed.
- # In autochecks there are always single untagged hostnames.
- # We optimize for that. But: hostlist might be tagged hostname!
+ # In autochecks there are always single untagged hostnames. We optimize for that.
if type(hostlist) == str:
if hostlist != hostname:
return # optimize most common case: hostname mismatch
hostlist = [ hostlist ]
elif type(hostlist[0]) == str:
- hostlist = hostlist
+ pass # regular case: list of hostnames
elif hostlist != []:
raise MKGeneralException("Invalid entry '%r' in check table. Must be single hostname or list of hostnames" % hostlist)
- if hosttags_match_taglist(tags_of_host(hostname), tags) and \
+ if hosttags_match_taglist(hosttags, tags) and \
in_extraconf_hostlist(hostlist, hostname):
descr = service_description(checkname, item)
if service_ignored(hostname, checkname, descr):
@@ -1150,7 +1156,7 @@ def do_update_dns_cache():
if opt_verbose:
print "Updating DNS cache..."
- for hostname in all_active_hosts() + all_active_clusters():
+ for hostname in all_active_hosts_and_clusters():
if opt_verbose:
sys.stdout.write("%s..." % hostname)
sys.stdout.flush()
@@ -1580,7 +1586,7 @@ def host_extra_conf_merged(hostname, conf):
return rule_dict
def in_binary_hostlist(hostname, conf):
- # if we have just a list of strings just take it as list of (may be tagged) hostnames
+ # if we have just a list of strings just take it as list of hostnames
if len(conf) > 0 and type(conf[0]) == str:
return hostname in conf
@@ -1776,13 +1782,7 @@ def in_extraconf_hostlist(hostlist, hostname):
def in_extraconf_servicelist(list, item):
for pattern in list:
- # Allow negation of pattern with prefix '!'
- if len(pattern) > 0 and pattern[0] == '!':
- pattern = pattern[1:]
- negate = True
- else:
- negate = False
- #negate, pattern = parse_negated(pattern)
+ negate, pattern = parse_negated(pattern)
if regex(pattern).match(item):
return not negate
@@ -4952,7 +4952,8 @@ def copy_globals():
"g_check_table_cache", "g_singlehost_checks",
"g_nodesof_cache", "g_compiled_regexes", "vars_before_config",
"g_initial_times", "g_keepalive_initial_memusage",
- "g_dns_cache", "g_ip_lookup_cache", "g_converted_rulesets_cache" ] \
+ "g_dns_cache", "g_ip_lookup_cache", "g_converted_rulesets_cache",
+ "g_hosttag_taglist_cache" ] \
and type(value).__name__ not in [ "function", "module", "SRE_Pattern" ]:
global_saved[varname] = copy.copy(value)
return global_saved
@@ -5275,7 +5276,7 @@ def read_config_files(with_autochecks=True, with_conf_d=True):
# Sanity check for duplicate hostnames
seen_hostnames = set([])
- for hostname in strip_tags(all_hosts + clusters.keys()):
+ for hostname in all_active_hosts_and_clusters():
if hostname in seen_hostnames:
sys.stderr.write("Error in configuration: duplicate host '%s'\n" % hostname)
sys.exit(3)