]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
mgr/dashboard_v2: added CephService service class
authorRicardo Dias <rdias@suse.com>
Wed, 21 Feb 2018 16:06:26 +0000 (16:06 +0000)
committerRicardo Dias <rdias@suse.com>
Mon, 5 Mar 2018 13:07:13 +0000 (13:07 +0000)
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 <rdias@suse.com>
src/pybind/mgr/dashboard_v2/services/ceph_service.py [new file with mode: 0644]

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 (file)
index 0000000..3019df7
--- /dev/null
@@ -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', {})]