From: Sage Weil Date: Fri, 4 Oct 2019 20:03:02 +0000 (-0500) Subject: mgr/devicehealth: factor _get_device_metrics out of show_device_metrics X-Git-Tag: v15.1.0~1293^2~3 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=7be5c1323b3814e2634d5cd66d45cab5a77df680;p=ceph.git mgr/devicehealth: factor _get_device_metrics out of show_device_metrics Add the min_sample lower-bound argument too Signed-off-by: Sage Weil --- diff --git a/src/pybind/mgr/devicehealth/module.py b/src/pybind/mgr/devicehealth/module.py index 93b34d961782..1955bec661e7 100644 --- a/src/pybind/mgr/devicehealth/module.py +++ b/src/pybind/mgr/devicehealth/module.py @@ -418,16 +418,11 @@ class Module(MgrModule): ioctx.remove_omap_keys(op, tuple(erase)) ioctx.operate_write_op(op, devid) - def show_device_metrics(self, devid, sample): - # verify device exists - r = self.get("device " + devid) - if not r or 'device' not in r.keys(): - return -errno.ENOENT, '', 'device ' + devid + ' not found' - # fetch metrics + def _get_device_metrics(self, devid, sample=None, min_sample=None): res = {} ioctx = self.open_connection(create_if_missing=False) if not ioctx: - return 0, json.dumps(res, indent=4), '' + return {} with ioctx: with rados.ReadOpCtx() as op: omap_iter, ret = ioctx.get_omap_vals(op, "", sample or '', @@ -438,6 +433,8 @@ class Module(MgrModule): for key, value in list(omap_iter): if sample and key != sample: break + if min_sample and key < min_sample: + break try: v = json.loads(value) except (ValueError, IndexError): @@ -450,7 +447,15 @@ class Module(MgrModule): except rados.Error as e: self.log.exception("RADOS error reading omap: {0}".format(e)) raise + return res + def show_device_metrics(self, devid, sample): + # verify device exists + r = self.get("device " + devid) + if not r or 'device' not in r.keys(): + return -errno.ENOENT, '', 'device ' + devid + ' not found' + # fetch metrics + res = self._get_device_metrics(devid, sample=sample) return 0, json.dumps(res, indent=4, sort_keys=True), '' def check_health(self):