Module: check_mk
Branch: master
Commit: 66f6a980ba60f101a26dd91489c846039d730a10
URL:
http://git.mathias-kettner.de/git/?p=check_mk.git;a=commit;h=66f6a980ba60f1…
Author: Konstantin Büttner <kb(a)mathias-kettner.de>
Date: Wed Jun 6 17:01:12 2018 +0200
6220 FIX df: Fix crashing check for vanished filesystems
Up to and including 1.4.0*, df would report UNKNOWN when confronted
with a vanished filesystem. A regression in 1.5.0 versions previous to
this lead to the check crashing instead. This has been fixed.
---
.werks/6220 | 13 +++++++++++++
checks/df | 8 +++++---
tests/unit/checks/test_df_check.py | 1 +
3 files changed, 19 insertions(+), 3 deletions(-)
diff --git a/.werks/6220 b/.werks/6220
new file mode 100644
index 0000000..88f9ad9
--- /dev/null
+++ b/.werks/6220
@@ -0,0 +1,13 @@
+Title: df: Fix crashing check for vanished filesystems
+Level: 1
+Component: checks
+Class: fix
+Compatible: compat
+Edition: cre
+State: unknown
+Version: 1.6.0i1
+Date: 1528297058
+
+Up to and including 1.4.0*, df would report UNKNOWN when confronted
+with a vanished filesystem. A regression in 1.5.0 versions previous to
+this lead to the check crashing instead. This has been fixed.
diff --git a/checks/df b/checks/df
index 72e0328..c1e6fdc 100644
--- a/checks/df
+++ b/checks/df
@@ -232,12 +232,14 @@ def check_df(item, params, parsed):
(df_blocks, volume_info), df_inodes = parsed
df_blocks = _filter_docker_filesystems(df_blocks)
-
+ volume_and_mp_to_mp = { ("%s %s" %
(volume_info[mp]["volume_name"], mp)) : mp for mp in volume_info }
if "patterns" in params or item in volume_info:
return df_check_filesystem_list(item, params, df_blocks, df_inodes)
- else:
- mountpoint = { ("%s %s" % (volume_info[mp]["volume_name"],
mp)) : mp for mp in volume_info }[item]
+ elif item in volume_and_mp_to_mp:
+ mountpoint = volume_and_mp_to_mp[item]
return df_check_filesystem_list(mountpoint, params, df_blocks, df_inodes)
+ else:
+ return 3, "Filesystem not found"
# Always exclude filesystems below dockers local storage area
diff --git a/tests/unit/checks/test_df_check.py b/tests/unit/checks/test_df_check.py
index b336d62..b7467c8 100644
--- a/tests/unit/checks/test_df_check.py
+++ b/tests/unit/checks/test_df_check.py
@@ -258,6 +258,7 @@ def test_df_discovery_with_parse(check_manager, monkeypatch, info,
expected_resu
(u'E:/', "default", info_df_win, {}),
(u'New_Volume E:/', "default", info_df_win, {}),
(u'btrfs /dev/sda1', "default", info_df_btrfs, {}),
+ (u"/home", "default", info_df_lnx, {}), # When called with an
item not found in info, the check should not crash.
])
def test_df_check_with_parse(check_manager, item, params, info, expected_result):
check = check_manager.get_check("df")