Module: check_mk
Branch: master
Commit: 157eca243987e65a2cf7d12ef4b18363cf19008a
URL:
http://git.mathias-kettner.de/git/?p=check_mk.git;a=commit;h=157eca243987e6…
Author: Moritz Kiemer <mo(a)mathias-kettner.de>
Date: Fri Oct 12 11:02:39 2018 +0200
6792 docker_node_disk_usage: Support older Docker versions
Some old Docker verions do not supprt the "--format" option,
which resulted in faulty or missing agent data.
This has been fixed.
CMK-1031
Change-Id: I1e6ae5f8750c895b88f63d6d19aa8f224ebd9ff1
---
.werks/6792 | 12 ++++
agents/check_mk_agent.linux | 4 +-
checks/docker.include | 11 +++-
.../datasets/docker_node_disk_usage_raw_text.py | 56 ++++++++++++++++++
.../datasets/docker_node_disk_usage_regression.py | 69 ++++++++++++++++++++++
5 files changed, 147 insertions(+), 5 deletions(-)
diff --git a/.werks/6792 b/.werks/6792
new file mode 100644
index 0000000..d26dd82
--- /dev/null
+++ b/.werks/6792
@@ -0,0 +1,12 @@
+Title: docker_node_disk_usage: Support older Docker versions
+Level: 1
+Component: checks
+Compatible: compat
+Edition: cre
+Version: 1.6.0i1
+Date: 1539334871
+Class: feature
+
+Some old Docker verions do not supprt the "--format" option,
+which resulted in faulty or missing agent data.
+This has been fixed.
diff --git a/agents/check_mk_agent.linux b/agents/check_mk_agent.linux
index b348007..3c3f342 100755
--- a/agents/check_mk_agent.linux
+++ b/agents/check_mk_agent.linux
@@ -1032,8 +1032,8 @@ if type docker > /dev/null 2>&1 && [ -z
"$MK_IS_PIGGYBACKED" ]; then
# sed: protect leading whitespace
docker info | sed 's/^/|/'
- echo "<<<docker_node_disk_usage>>>"
- docker system df --format "{{json .}}" || docker system df
+ echo "<<<docker_node_disk_usage:sep(0)>>>"
+ docker system df
echo "<<<docker_node_images>>>"
echo "[[[images]]]"
diff --git a/checks/docker.include b/checks/docker.include
index dcd77b5..2a76f74 100644
--- a/checks/docker.include
+++ b/checks/docker.include
@@ -160,12 +160,17 @@ def parse_docker_node_info(info):
def parse_docker_system_df(info):
- parsed = {}
- header = ('TYPE', 'TOTAL', 'ACTIVE', 'SIZE',
'RECLAIMABLE')
+
keys = ('Type', 'TotalCount', 'Active', 'Size',
'Reclaimable')
types = (str, int, int, _docker_get_bytes, _docker_get_bytes)
- table = _docker_parse_table(info, header, keys)
+ try: # parse legacy json output: from 1.5.0 - 1.5.0p6
+ table = [json.loads(",".join(row)) for row in info if row]
+ except ValueError:
+ header = ('TYPE', 'TOTAL', 'ACTIVE', 'SIZE',
'RECLAIMABLE')
+ table = _docker_parse_table(info, header, keys)
+
+ parsed = {}
for line in table:
for key, type_ in zip(keys, types):
v = line.get(key)
diff --git a/tests/unit/checks/generictests/datasets/docker_node_disk_usage_raw_text.py
b/tests/unit/checks/generictests/datasets/docker_node_disk_usage_raw_text.py
new file mode 100644
index 0000000..7b6a758
--- /dev/null
+++ b/tests/unit/checks/generictests/datasets/docker_node_disk_usage_raw_text.py
@@ -0,0 +1,56 @@
+
+
+checkname = 'docker_node_disk_usage'
+
+
+info = [
+ ['TYPE TOTAL ACTIVE SIZE
RECLAIMABLE'],
+ ['Images 15 2 9.57GB
8.674GB (90%)'],
+ ['Containers 2 1 1.226GB
1.224GB (99%)'],
+ ['Local Volumes 1 1 9.323MB
0B (0%)'],
+ ['Build Cache 0 0 0B
0B'],
+]
+
+
+discovery = {'': [('build cache', {}),
+ ('containers', {}),
+ ('images', {}),
+ ('local volumes', {})]}
+
+
+checks = {'': [('build cache',
+ 'default',
+ [(0, 'size: 0 B', [('size', 0, None, None, None,
None)]),
+ (0,
+ 'reclaimable: 0 B',
+ [('reclaimable', 0, None, None, None, None)]),
+ (0, 'count: 0', [('count', 0, None, None, None,
None)]),
+ (0, 'active: 0', [('active', 0, None, None, None,
None)])]),
+ ('containers',
+ 'default',
+ [(0,
+ 'size: 1169.20 MB',
+ [('size', 1226000000, None, None, None, None)]),
+ (0,
+ 'reclaimable: 1167.30 MB',
+ [('reclaimable', 1224000000, None, None, None, None)]),
+ (0, 'count: 2', [('count', 2, None, None, None,
None)]),
+ (0, 'active: 1', [('active', 1, None, None, None,
None)])]),
+ ('images',
+ 'default',
+ [(0,
+ 'size: 8.91 GB',
+ [('size', 9570000000, None, None, None, None)]),
+ (0,
+ 'reclaimable: 8.08 GB',
+ [('reclaimable', 8674000000, None, None, None, None)]),
+ (0, 'count: 15', [('count', 15, None, None, None,
None)]),
+ (0, 'active: 2', [('active', 2, None, None, None,
None)])]),
+ ('local volumes',
+ 'default',
+ [(0, 'size: 8.89 MB', [('size', 9323000, None, None,
None, None)]),
+ (0,
+ 'reclaimable: 0 B',
+ [('reclaimable', 0, None, None, None, None)]),
+ (0, 'count: 1', [('count', 1, None, None, None,
None)]),
+ (0, 'active: 1', [('active', 1, None, None, None,
None)])])]}
diff --git a/tests/unit/checks/generictests/datasets/docker_node_disk_usage_regression.py
b/tests/unit/checks/generictests/datasets/docker_node_disk_usage_regression.py
new file mode 100644
index 0000000..d2d246a
--- /dev/null
+++ b/tests/unit/checks/generictests/datasets/docker_node_disk_usage_regression.py
@@ -0,0 +1,69 @@
+
+
+checkname = 'docker_node_disk_usage'
+
+
+info = [['{"Active":"2"',
+ '"Reclaimable":"8.674GB (90%)"',
+ '"Size":"9.57GB"',
+ '"TotalCount":"15"',
+ '"Type":"Images"}'],
+ ['{"Active":"1"',
+ '"Reclaimable":"1.224GB (99%)"',
+ '"Size":"1.226GB"',
+ '"TotalCount":"2"',
+ '"Type":"Containers"}'],
+ ['{"Active":"1"',
+ '"Reclaimable":"0B (0%)"',
+ '"Size":"9.323MB"',
+ '"TotalCount":"1"',
+ '"Type":"Local Volumes"}'],
+ ['{"Active":"0"',
+ '"Reclaimable":"0B"',
+ '"Size":"0B"',
+ '"TotalCount":"0"',
+ '"Type":"Build Cache"}']]
+
+
+discovery = {'': [('build cache', {}),
+ ('containers', {}),
+ ('images', {}),
+ ('local volumes', {})]}
+
+
+checks = {'': [('build cache',
+ 'default',
+ [(0, 'size: 0 B', [('size', 0, None, None, None,
None)]),
+ (0,
+ 'reclaimable: 0 B',
+ [('reclaimable', 0, None, None, None, None)]),
+ (0, 'count: 0', [('count', 0, None, None, None,
None)]),
+ (0, 'active: 0', [('active', 0, None, None, None,
None)])]),
+ ('containers',
+ 'default',
+ [(0,
+ 'size: 1169.20 MB',
+ [('size', 1226000000, None, None, None, None)]),
+ (0,
+ 'reclaimable: 1167.30 MB',
+ [('reclaimable', 1224000000, None, None, None, None)]),
+ (0, 'count: 2', [('count', 2, None, None, None,
None)]),
+ (0, 'active: 1', [('active', 1, None, None, None,
None)])]),
+ ('images',
+ 'default',
+ [(0,
+ 'size: 8.91 GB',
+ [('size', 9570000000, None, None, None, None)]),
+ (0,
+ 'reclaimable: 8.08 GB',
+ [('reclaimable', 8674000000, None, None, None, None)]),
+ (0, 'count: 15', [('count', 15, None, None, None,
None)]),
+ (0, 'active: 2', [('active', 2, None, None, None,
None)])]),
+ ('local volumes',
+ 'default',
+ [(0, 'size: 8.89 MB', [('size', 9323000, None, None,
None, None)]),
+ (0,
+ 'reclaimable: 0 B',
+ [('reclaimable', 0, None, None, None, None)]),
+ (0, 'count: 1', [('count', 1, None, None, None,
None)]),
+ (0, 'active: 1', [('active', 1, None, None, None,
None)])])]}
\ No newline at end of file