From dd6ad72b901822d8bb9aaa6b8f9e4a29faac9038 Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Tue, 19 Jun 2018 12:56:45 -0500 Subject: [PATCH] mgr/devicehealth: add self-test Signed-off-by: Sage Weil --- qa/tasks/mgr/test_module_selftest.py | 3 +++ src/pybind/mgr/devicehealth/module.py | 25 ++++++++++++++++++++++++- 2 files changed, 27 insertions(+), 1 deletion(-) diff --git a/qa/tasks/mgr/test_module_selftest.py b/qa/tasks/mgr/test_module_selftest.py index f3920eb09e83c..b725aec57230e 100644 --- a/qa/tasks/mgr/test_module_selftest.py +++ b/qa/tasks/mgr/test_module_selftest.py @@ -51,6 +51,9 @@ class TestModuleSelftest(MgrTestCase): def test_iostat(self): self._selftest_plugin("iostat") + def test_devicehealth(self): + self._selftest_plugin("devicehealth") + def test_selftest_run(self): self._load_module("selftest") self.mgr_cluster.mon_manager.raw_cluster_cmd("mgr", "self-test", "run") diff --git a/src/pybind/mgr/devicehealth/module.py b/src/pybind/mgr/devicehealth/module.py index 6dca5870531c7..4c2ce2df0f2e6 100644 --- a/src/pybind/mgr/devicehealth/module.py +++ b/src/pybind/mgr/devicehealth/module.py @@ -50,6 +50,11 @@ class Module(MgrModule): "desc": "Show stored device metrics for the device", "perm": "r" }, + { + "cmd": "devicehealth self-test", + "desc": "Run a self-test on the devicehealth module", + "perm": "rw", + }, ] def __init__(self, *args, **kwargs): @@ -92,12 +97,30 @@ class Module(MgrModule): return self.scrape_all(); elif cmd['prefix'] == 'device show-health-metrics': return self.show_device_metrics(cmd['devid'], cmd.get('sample')) - + elif cmd['prefix'] == 'devicehealth self-test': + return self.self_test() else: # mgr should respect our self.COMMANDS and not call us for # any prefix we don't advertise raise NotImplementedError(cmd['prefix']) + def self_test(self): + self.refresh_config() + osdmap = self.get('osd_map') + osd_id = osdmap['osds'][0]['osd'] + osdmeta = self.get('osd_metadata') + devs = osdmeta.get(str(osd_id), {}).get('device_ids') + if devs: + devid = devs.split()[0].split('=')[1] + (r, before, err) = self.show_device_metrics(devid, '') + assert r == 0 + (r, out, err) = self.scrape_device(devid) + assert r == 0 + (r, after, err) = self.show_device_metrics(devid, '') + assert r == 0 + assert before != after + return (0, '', '') + def refresh_config(self): self.enable_monitoring = self.get_config('enable_monitoring', '') is not '' or 'false' for opt, value in DEFAULTS.iteritems(): -- 2.39.5