Module: check_mk
Branch: master
Commit: 498b206a903b97daad7bba663f89a18ece1348c4
URL: http://git.mathias-kettner.de/git/?p=check_mk.git;a=commit;h=498b206a903b97…
Author: Mathias Kettner <mk(a)mathias-kettner.de>
Date: Fri Apr 29 09:53:20 2011 +0200
sped up use of stored snmp walks
---
ChangeLog | 1 +
modules/snmp.py | 5 +++++
2 files changed, 6 insertions(+), 0 deletions(-)
diff --git a/ChangeLog b/ChangeLog
index b3a28e9..eafc253 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -18,6 +18,7 @@
* Allow merging of dictionary based check parameters
* --debug now implies -v
* new option --debug: creates execution profile of check_mk itself
+ * sped up use of stored snmp walks
Multisite:
* FIX: webservice: suppress livestatus errors in multi-site setups
diff --git a/modules/snmp.py b/modules/snmp.py
index e9e0e60..bec9d6b 100644
--- a/modules/snmp.py
+++ b/modules/snmp.py
@@ -365,13 +365,16 @@ def get_stored_snmpwalk(hostname, oid):
sys.stderr.write("Getting %s from %s\n" % (oid, path))
if not os.path.exists(path):
raise MKGeneralException("No snmpwalk file %s\n" % path)
+
rowinfo = []
+ hot = False
for line in file(path):
parts = line.split(None, 1)
o = parts[0]
if o.startswith('.'):
o = o[1:]
if o == oid or o.startswith(oid_prefix + "."):
+ hot = True
if len(parts) > 1:
value = parts[1]
if agent_simulator:
@@ -381,4 +384,6 @@ def get_stored_snmpwalk(hostname, oid):
rowinfo.append((o, strip_snmp_value(value))) # return pair of OID and value
if dot_star:
return rowinfo # only return first (used by get_single_oid)
+ elif hot: # end of interesting part, no point in further search
+ return rowinfo
return rowinfo
Module: check_mk
Branch: master
Commit: 64cb66de650cfa6283a86eb613d803877be51400
URL: http://git.mathias-kettner.de/git/?p=check_mk.git;a=commit;h=64cb66de650cfa…
Author: Mathias Kettner <mk(a)mathias-kettner.de>
Date: Thu Apr 28 08:38:02 2011 +0200
FIX: cmk -II also refreshes cluster checks
But only if all nodes of the cluster are specified as
hosts to -II. If you only specify some, then a warning
is printed an the cluster is untouched. Otherwise service
(originated at the other nodes) might get lost.
---
.bugs/16 | 32 +++++++++++++++++++++++++++++---
ChangeLog | 1 +
modules/check_mk.py | 20 +++++++++++++++++++-
3 files changed, 49 insertions(+), 4 deletions(-)
diff --git a/.bugs/16 b/.bugs/16
index 7dd601e..80f13e2 100644
--- a/.bugs/16
+++ b/.bugs/16
@@ -1,10 +1,11 @@
Title: check_mk -II bei Clustern löscht die Checks nicht
Component: core
+State: done
+Class: bug
+Date: 2010-12-21 12:15:32
Benefit: 2
-State: open
Cost: 3
-Date: 2010-12-21 12:15:32
-Class: bug
+Fun: 0
Wenn man ein check_mk -II macht, dann werden clustered
services nicht entfernt. Um das sauber hinzubekommen, muss man sicherstellen,
@@ -20,3 +21,28 @@ zulässt und dann einfach automatisch anstelle dessen die Nodes inventarisiert
und zusätzlich die Checks vom Cluster entfernt. Das könnte eine einfache
Lösung sein. So sorgt der User selbst dafür, dass der Cluster richtig
behandelt wird.
+
+Dabei stellt sich mir die Frage, ob es eigentlich einen Inventur-Check
+auf den Cluster gibt, oder wie das geregelt ist.
+
+Noch weiter in die Zukunft gedacht, gibt es die Idee, dass clustered_services
+(und auch ignored_services), garnicht mehr bei der Inventur angewandt wird,
+sondern generell nach dem Einlesen der Autochecks. Die manuellen Checks
+sollten ja nicht betroffen sein. Wenn man schon was in ignored services
+auflistet, warum sollte es dann trotzdem gecheckt werden, blos weil man
+es man früher aufgenommen hat?
+
+Der Vorteil - im Bezug auf die Clustered Services - könnte sein, dass man
+noch weiß, woher der Service ursprünglich kam. Andererseits kann dann
+folgendes passieren:
+
+1. Inventur findet service X auf Node A
+2. service schenkt auf B
+3. Man macht cmk -II auf A
+4. nun ist der Service weg!
+
+===> Ist also auch keine wirklich gute Lösung.
+
+2011-04-28 08:37:57: changed state open -> done
+-II entfernt jetzt auch die Cluster Checks, falls alle nodes
+angegeben wurden.
diff --git a/ChangeLog b/ChangeLog
index 3e7aed8..da92d65 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,6 @@
1.1.11i1:
Core, Setup, etc.:
+ * FIX: cmk -II also refreshes cluster checks, if all nodes are specified
* FIX: avoid floating points with 'e' in performance data
* FIX: cmk -D: drop obsolete (and always empty) Notification:
* FIX: better handling of broken checks returning empty services
diff --git a/modules/check_mk.py b/modules/check_mk.py
index ec53c54..4cb4457 100755
--- a/modules/check_mk.py
+++ b/modules/check_mk.py
@@ -723,7 +723,7 @@ def is_cluster(hostname):
return False
# If host is node of a cluster, return name of that cluster
-# (untagged). If not, return None. If a host belongt to
+# (untagged). If not, return None. If a host belongs to
# more than one cluster, then a random cluster is choosen.
def cluster_of(hostname):
for clustername, nodes in clusters.items():
@@ -4190,6 +4190,24 @@ if __name__ == "__main__":
if len(hostnames) > 0:
for host in hostnames:
remove_autochecks_of(host, checknames)
+ clust = cluster_of(host)
+ if clust:
+ missing = []
+ for node in clusters[clust]:
+ if node not in hostnames:
+ missing.append(node)
+ if len(missing) == 0:
+ if opt_verbose:
+ sys.stdout.write("All nodes of %s specified, dropping checks of %s, too.\n" % (clust, clust))
+ remove_autochecks_of(clust, checknames)
+ else:
+ sys.stdout.write("Warning: %s is part of cluster %s, but you didn't specify %s as well.\nChecks on %s will be kept.\n" %
+ (host, clust, ",".join(missing), clust))
+ # if the host is part of a cluster and
+ # the other nodes of that cluster are
+ # also present in the list, then we also
+ # drop the checks of the clusters
+
else:
for host in all_active_hosts() + all_active_clusters():
remove_autochecks_of(host, checknames)