From 34f17d0333f2bec4280630d51e924e166ca1d4e7 Mon Sep 17 00:00:00 2001 From: Ricardo Dias Date: Wed, 21 Feb 2018 16:06:26 +0000 Subject: [PATCH] mgr/dashboard_v2: added CephService service class This class provides methods to get the list of services registered in the cluster, and also to get the list of pools by application type. Signed-off-by: Ricardo Dias --- .../mgr/dashboard_v2/services/ceph_service.py | 60 +++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 src/pybind/mgr/dashboard_v2/services/ceph_service.py diff --git a/src/pybind/mgr/dashboard_v2/services/ceph_service.py b/src/pybind/mgr/dashboard_v2/services/ceph_service.py new file mode 100644 index 00000000000..3019df71baa --- /dev/null +++ b/src/pybind/mgr/dashboard_v2/services/ceph_service.py @@ -0,0 +1,60 @@ +# -*- coding: utf-8 -*- +from __future__ import absolute_import + +from . import Service + + +class CephService(Service): + @classmethod + def get_service_map(cls, service_name): + service_map = {} + for server in cls.mgr.list_servers(): + for service in server['services']: + if service['type'] == service_name: + if server['hostname'] not in service_map: + service_map[server['hostname']] = { + 'server': server, + 'services': [] + } + inst_id = service['id'] + metadata = cls.mgr.get_metadata(service_name, inst_id) + status = cls.mgr.get_daemon_status(service_name, inst_id) + service_map[server['hostname']]['services'].append({ + 'id': inst_id, + 'type': service_name, + 'hostname': server['hostname'], + 'metadata': metadata, + 'status': status + }) + return service_map + + @classmethod + def get_service_list(cls, service_name): + service_map = cls.get_service_map(service_name) + return [svc for _, svcs in service_map.items() for svc in svcs['services']] + + @classmethod + def get_service(cls, service_name, service_id): + for server in cls.mgr.list_servers(): + for service in server['services']: + if service['type'] == service_name: + inst_id = service['id'] + if inst_id == service_id: + metadata = cls.mgr.get_metadata(service_name, inst_id) + status = cls.mgr.get_daemon_status(service_name, inst_id) + return { + 'id': inst_id, + 'type': service_name, + 'hostname': server['hostname'], + 'metadata': metadata, + 'status': status + } + return None + + @classmethod + def get_pool_list(cls, application=None): + osd_map = cls.mgr.get('osd_map') + if not application: + return osd_map['pools'] + return [pool for pool in osd_map['pools'] + if application in pool.get('application_metadata', {})] -- 2.39.5