]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
mgr_module: Deal with long running avgs properly
authorBoris Ranto <branto@redhat.com>
Tue, 15 May 2018 09:05:22 +0000 (11:05 +0200)
committerBoris Ranto <branto@redhat.com>
Wed, 30 May 2018 14:13:36 +0000 (16:13 +0200)
We have recently started exposing long running avgs with the mgr python
modules but that only covers the total sum, not the avgcount.

With this patch, the counts for long running avgs are exposed to the
python modules allowing them to deal with the new data.

Signed-off-by: Boris Ranto <branto@redhat.com>
src/pybind/mgr/mgr_module.py

index 80e7552b9bb49eb20675af0479cf598640544e57..1db2e71a425e39db33fc903fd8c6bfbf6f4f0ff1 100644 (file)
@@ -692,6 +692,13 @@ class MgrModule(ceph_module.BaseMgrModule):
         else:
             return 0
 
+    def get_latest_avg(self, daemon_type, daemon_name, counter):
+        data = self.get_counter(daemon_type, daemon_name, counter)[counter]
+        if data:
+            return (data[-1][1], data[-1][2])
+        else:
+            return (0, 0)
+
     def get_all_perf_counters(self, prio_limit=PRIO_USEFUL):
         """
         Return the perf counters currently known to this ceph-mgr
@@ -733,9 +740,24 @@ class MgrModule(ceph_module.BaseMgrModule):
                     if counter_schema['priority'] < prio_limit:
                         continue
 
-                    counter_info = counter_schema
-                    counter_info['value'] = self.get_latest(service['type'], service['id'],
-                                                            counter_path)
+                    counter_info = dict(counter_schema)
+
+                    # Also populate count for the long running avgs
+                    if counter_schema['type'] & self.PERFCOUNTER_LONGRUNAVG:
+                        v, c = self.get_latest_avg(
+                            service['type'],
+                            service['id'],
+                            counter_path
+                        )
+                        counter_info['value'], counter_info['count'] = v, c
+                        result[svc_full_name][counter_path] = counter_info
+                    else:
+                        counter_info['value'] = self.get_latest(
+                            service['type'],
+                            service['id'],
+                            counter_path
+                        )
+
                     result[svc_full_name][counter_path] = counter_info
 
         self.log.debug("returning {0} counter".format(len(result)))