From: Ricardo Dias Date: Fri, 9 Mar 2018 16:43:04 +0000 (+0000) Subject: mgr/dashboard: refactor pool info retrieval to service class X-Git-Tag: wip-pdonnell-testing-20180317.202121~58^2~2 X-Git-Url: http://git.apps.os.sepia.ceph.com/?a=commitdiff_plain;h=862d04ddff625dd7a6893a4016c0adfb5f382958;p=ceph-ci.git mgr/dashboard: refactor pool info retrieval to service class Signed-off-by: Ricardo Dias --- diff --git a/src/pybind/mgr/dashboard_v2/controllers/dashboard.py b/src/pybind/mgr/dashboard_v2/controllers/dashboard.py index 01dc441c542..3457c2f14db 100644 --- a/src/pybind/mgr/dashboard_v2/controllers/dashboard.py +++ b/src/pybind/mgr/dashboard_v2/controllers/dashboard.py @@ -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']]) diff --git a/src/pybind/mgr/dashboard_v2/services/ceph_service.py b/src/pybind/mgr/dashboard_v2/services/ceph_service.py index 69d74ce7b3b..cb27e1ea6e9 100644 --- a/src/pybind/mgr/dashboard_v2/services/ceph_service.py +++ b/src/pybind/mgr/dashboard_v2/services/ceph_service.py @@ -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