mgr/dashboard: refactor pool info retrieval to service class
authorRicardo Dias <rdias@suse.com>
Fri, 9 Mar 2018 16:43:04 +0000 (16:43 +0000)
committerRicardo Dias <rdias@suse.com>
Fri, 9 Mar 2018 16:43:04 +0000 (16:43 +0000)
Signed-off-by: Ricardo Dias <rdias@suse.com>
src/pybind/mgr/dashboard_v2/controllers/dashboard.py
src/pybind/mgr/dashboard_v2/services/ceph_service.py

index 01dc441c5423ad4376c9b1edb0d758a9afc87d4c..3457c2f14db5dc0e8337886a1f372cda081d55c4 100644 (file)
@@ -2,14 +2,13 @@
 from __future__ import absolute_import
 
 import collections
-from collections import defaultdict
 import json
-import time
 
 import cherrypy
 from mgr_module import CommandResult
 
 from .. import mgr
+from ..services.ceph_service import CephService
 from ..tools import ApiController, AuthRequired, BaseController, NotificationQueue
 
 
@@ -72,44 +71,13 @@ class Dashboard(BaseController):
 
         osd_map = self.osd_map()
 
-        pg_summary = mgr.get("pg_summary")
-
-        pools = []
-
-        pool_stats = defaultdict(lambda: defaultdict(
-            lambda: collections.deque(maxlen=10)))
-
-        df = mgr.get("df")
-        pool_stats_dict = dict([(p['id'], p['stats']) for p in df['pools']])
-        now = time.time()
-        for pool_id, stats in pool_stats_dict.items():
-            for stat_name, stat_val in stats.items():
-                pool_stats[pool_id][stat_name].appendleft((now, stat_val))
-
-        for pool in osd_map['pools']:
-            pool['pg_status'] = pg_summary['by_pool'][pool['pool'].__str__()]
-            stats = pool_stats[pool['pool']]
-            s = {}
-
-            def get_rate(series):
-                if len(series) >= 2:
-                    return (float(series[0][1]) - float(series[1][1])) / \
-                        (float(series[0][0]) - float(series[1][0]))
-                return 0
-
-            for stat_name, stat_series in stats.items():
-                s[stat_name] = {
-                    'latest': stat_series[0][1],
-                    'rate': get_rate(stat_series),
-                    'series': [i for i in stat_series]
-                }
-            pool['stats'] = s
-            pools.append(pool)
+        pools = CephService.get_pool_list_with_stats()
 
         # Not needed, skip the effort of transmitting this
         # to UI
         del osd_map['pg_temp']
 
+        df = mgr.get("df")
         df['stats']['total_objects'] = sum(
             [p['stats']['objects'] for p in df['pools']])
 
index 69d74ce7b3b05a3db64b56cbfd4e04675b046852..cb27e1ea6e9b0fad3c45020103e006efb00787b9 100644 (file)
@@ -1,6 +1,10 @@
 # -*- coding: utf-8 -*-
 from __future__ import absolute_import
 
+import time
+import collections
+from collections import defaultdict
+
 from .. import mgr
 
 
@@ -58,3 +62,42 @@ class CephService(object):
             return osd_map['pools']
         return [pool for pool in osd_map['pools']
                 if application in pool.get('application_metadata', {})]
+
+    @classmethod
+    def get_pool_list_with_stats(cls, application=None):
+        # pylint: disable=too-many-locals
+        pools = cls.get_pool_list(application)
+
+        pools_w_stats = []
+
+        pg_summary = mgr.get("pg_summary")
+        pool_stats = defaultdict(lambda: defaultdict(
+            lambda: collections.deque(maxlen=10)))
+
+        df = mgr.get("df")
+        pool_stats_dict = dict([(p['id'], p['stats']) for p in df['pools']])
+        now = time.time()
+        for pool_id, stats in pool_stats_dict.items():
+            for stat_name, stat_val in stats.items():
+                pool_stats[pool_id][stat_name].appendleft((now, stat_val))
+
+        for pool in pools:
+            pool['pg_status'] = pg_summary['by_pool'][pool['pool'].__str__()]
+            stats = pool_stats[pool['pool']]
+            s = {}
+
+            def get_rate(series):
+                if len(series) >= 2:
+                    return (float(series[0][1]) - float(series[1][1])) / \
+                        (float(series[0][0]) - float(series[1][0]))
+                return 0
+
+            for stat_name, stat_series in stats.items():
+                s[stat_name] = {
+                    'latest': stat_series[0][1],
+                    'rate': get_rate(stat_series),
+                    'series': [i for i in stat_series]
+                }
+            pool['stats'] = s
+            pools_w_stats.append(pool)
+        return pools_w_stats