Module: check_mk
Branch: master
Commit: bd25414571342a5f9a204230851d6a1142d017df
URL:
http://git.mathias-kettner.de/git/?p=check_mk.git;a=commit;h=bd25414571342a…
Author: Moritz Kiemer <mo(a)mathias-kettner.de>
Date: Thu Mar 28 11:12:35 2019 +0100
mk_docker.py: report exceptions to server
Change-Id: I56fba1a5a68a02107fde945eee9ba11a5047722b
---
agents/plugins/mk_docker.py | 9 +++----
checks/docker_node_info | 14 +++++------
.../datasets/docker_node_info_unknown.py | 28 ++++++++++++++++++++++
tests/unit/plugins/test_mk_docker.py | 7 +++---
4 files changed, 43 insertions(+), 15 deletions(-)
diff --git a/agents/plugins/mk_docker.py b/agents/plugins/mk_docker.py
index c8661ec..d533420 100755
--- a/agents/plugins/mk_docker.py
+++ b/agents/plugins/mk_docker.py
@@ -150,10 +150,11 @@ class Section(list):
sys.stdout.write("%s\n" % line)
-def report_exception_to_server(exc):
+def report_exception_to_server(exc, location):
LOGGER.info("handling exception: %s", exc)
+ msg = "Plugin exception in %s: %s" % (location, exc)
sec = Section('node_info')
- sec.append(json.dumps({"PluginException": str(exc)}))
+ sec.append(json.dumps({"Unknown": msg}))
sec.write()
@@ -464,7 +465,7 @@ def main():
try: # first calls by docker-daemon: report failure
client = MKDockerClient(config)
except () if DEBUG else Exception as exc:
- report_exception_to_server(exc)
+ report_exception_to_server(exc, "MKDockerClient.__init__")
sys.exit(1)
set_version_info(client)
@@ -473,7 +474,7 @@ def main():
try:
section(client, config)
except () if DEBUG else Exception as exc:
- LOGGER.info("caught exception: %s", exc)
+ report_exception_to_server(exc, section.__name__)
if __name__ == "__main__":
diff --git a/checks/docker_node_info b/checks/docker_node_info
index f560f9e..41766c9 100644
--- a/checks/docker_node_info
+++ b/checks/docker_node_info
@@ -63,25 +63,25 @@ def append_deprecation_warning(check_function):
def parse_docker_node_info(info):
version = docker_get_version(info) # pylint: disable=undefined-variable
-
if version is None:
return parse_legacy_docker_node_info(info) # pylint: disable=undefined-variable
if len(info) < 2:
return {}
- loaded = docker_json_get_obj(info[1]) # pylint: disable=undefined-variable
- return loaded or {}
+ loaded = {}
+ for line in info[1:]:
+ loaded.update(docker_json_get_obj(line) or {}) # pylint:
disable=undefined-variable
+ return loaded
@append_deprecation_warning # pylint: disable=undefined-variable
def check_docker_node_info(_no_item, _no_params, parsed):
if "Name" in parsed:
yield 0, 'Daemon running on host %s' % parsed["Name"]
- if "Warning" in parsed:
- yield 1, parsed["Warning"]
- if "Critical" in parsed:
- yield 2, parsed["Critical"]
+ for state, key in enumerate(("Warning", "Critical",
"Unknown"), 1):
+ if key in parsed:
+ yield state, parsed[key]
check_info['docker_node_info'] = {
diff --git a/tests/unit/checks/generictests/datasets/docker_node_info_unknown.py
b/tests/unit/checks/generictests/datasets/docker_node_info_unknown.py
new file mode 100644
index 0000000..91380e2
--- /dev/null
+++ b/tests/unit/checks/generictests/datasets/docker_node_info_unknown.py
@@ -0,0 +1,28 @@
+# yapf: disable
+
+
+checkname = 'docker_node_info'
+
+
+info = [
+ ['@docker_version_info', '{"PluginVersion": "0.1",
"DockerPyVersion": "3.7.0", "ApiVersion":
"1.39"}'],
+ ['{"Name": "klappson"}'],
+ ['@docker_version_info', '{"PluginVersion": "0.1",
"DockerPyVersion": "3.7.0", "ApiVersion":
"1.39"}'],
+ ['{"Unknown": "Plugin exception in section_node_disk_usage:
Kokosnuss geklaut"}'],
+]
+
+
+discovery = {
+ '': [(None, {})],
+ 'containers': [(None, {})],
+}
+
+
+checks = {
+ '': [
+ (None, {}, [
+ (0, u'Daemon running on host klappson', []),
+ (3, u'Plugin exception in section_node_disk_usage: Kokosnuss
geklaut', []),
+ ]),
+ ],
+}
diff --git a/tests/unit/plugins/test_mk_docker.py b/tests/unit/plugins/test_mk_docker.py
index fdb9cd6..e53371a 100644
--- a/tests/unit/plugins/test_mk_docker.py
+++ b/tests/unit/plugins/test_mk_docker.py
@@ -11,7 +11,7 @@ sys.path.insert(0, os.path.join(cmk_path(), 'agents',
'plugins'))
import mk_docker # pylint: disable=import-error,wrong-import-position
PLUGIN_CHECKSUMS = {
- '0.1': 'aec6ebec8565d1326d1b0df52191d594',
+ '0.1': 'f43bbe8ce8f19763d53ffa116988fa2d',
}
@@ -21,8 +21,7 @@ def test_docker_plugin_version():
assert md5 == PLUGIN_CHECKSUMS.get(mk_docker.VERSION), """
Plugin source code has changed.
If your changes are compatible to previous versions,
- add the new md5 sum of the plugin to the corresponding
- list in PLUIGIN_CHECKSUMS.
+ put the new md5 sum of the plugin into PLUIGIN_CHECKSUMS.
If your change is incompatible, increase the mk_docker.VERSION
- and start a new list to PLUIGIN_CHECKSUMS.
+ and put a new entry into PLUIGIN_CHECKSUMS.
"""