From: Sage Weil Date: Tue, 19 Jun 2018 17:56:45 +0000 (-0500) Subject: mgr/devicehealth: add self-test X-Git-Tag: v14.0.1~1030^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=refs%2Fpull%2F22479%2Fhead;p=ceph.git mgr/devicehealth: add self-test Signed-off-by: Sage Weil --- diff --git a/qa/tasks/mgr/test_module_selftest.py b/qa/tasks/mgr/test_module_selftest.py index f3920eb09e8..b725aec5723 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 6dca5870531..4c2ce2df0f2 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():