]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
mgr/devicehealth: factor _get_device_metrics out of show_device_metrics
authorSage Weil <sage@redhat.com>
Fri, 4 Oct 2019 20:03:02 +0000 (15:03 -0500)
committerSage Weil <sage@redhat.com>
Fri, 4 Oct 2019 20:03:02 +0000 (15:03 -0500)
Add the min_sample lower-bound argument too

Signed-off-by: Sage Weil <sage@redhat.com>
src/pybind/mgr/devicehealth/module.py

index 93b34d9617822f43802435e347e619c71f466504..1955bec661e7195144fdd2ecd147405c5f536925 100644 (file)
@@ -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):