]>
git.proxmox.com Git - ceph.git/blob - ceph/src/pybind/mgr/dashboard/controllers/summary.py
1 # -*- coding: utf-8 -*-
2 from __future__
import absolute_import
6 from . import ApiController
, Endpoint
, BaseController
8 from ..security
import Permission
, Scope
9 from ..controllers
.rbd_mirroring
import get_daemons_and_pools
10 from ..exceptions
import ViewCacheNoDataException
11 from ..tools
import TaskManager
12 from ..services
import progress
15 @ApiController('/summary')
16 class Summary(BaseController
):
17 def _health_status(self
):
18 health_data
= mgr
.get("health")
19 return json
.loads(health_data
["json"])['status']
21 def _rbd_mirroring(self
):
23 _
, data
= get_daemons_and_pools()
24 except ViewCacheNoDataException
: # pragma: no cover
25 return {} # pragma: no cover
27 daemons
= data
.get('daemons', [])
28 pools
= data
.get('pools', {})
32 for daemon
in daemons
:
33 if daemon
['health_color'] == 'error': # pragma: no cover
35 elif daemon
['health_color'] == 'warning': # pragma: no cover
37 for _
, pool
in pools
.items():
38 if pool
['health_color'] == 'error': # pragma: no cover
40 elif pool
['health_color'] == 'warning': # pragma: no cover
42 return {'warnings': warnings
, 'errors': errors
}
44 def _task_permissions(self
, name
): # pragma: no cover
46 if name
== 'pool/create':
47 result
= self
._has
_permissions
(Permission
.CREATE
, Scope
.POOL
)
48 elif name
== 'pool/edit':
49 result
= self
._has
_permissions
(Permission
.UPDATE
, Scope
.POOL
)
50 elif name
== 'pool/delete':
51 result
= self
._has
_permissions
(Permission
.DELETE
, Scope
.POOL
)
53 'rbd/create', 'rbd/copy', 'rbd/snap/create',
54 'rbd/clone', 'rbd/trash/restore']:
55 result
= self
._has
_permissions
(Permission
.CREATE
, Scope
.RBD_IMAGE
)
57 'rbd/edit', 'rbd/snap/edit', 'rbd/flatten',
59 result
= self
._has
_permissions
(Permission
.UPDATE
, Scope
.RBD_IMAGE
)
61 'rbd/delete', 'rbd/snap/delete', 'rbd/trash/move',
62 'rbd/trash/remove', 'rbd/trash/purge']:
63 result
= self
._has
_permissions
(Permission
.DELETE
, Scope
.RBD_IMAGE
)
68 services
= mgr
.get('mgr_map')['services']
69 return services
['dashboard'] if 'dashboard' in services
else ''
73 exe_t
, fin_t
= TaskManager
.list_serializable()
74 executing_tasks
= [task
for task
in exe_t
if self
._task
_permissions
(task
['name'])]
75 finished_tasks
= [task
for task
in fin_t
if self
._task
_permissions
(task
['name'])]
77 e
, f
= progress
.get_progress_tasks()
78 executing_tasks
.extend(e
)
79 finished_tasks
.extend(f
)
81 executing_tasks
.sort(key
=lambda t
: t
['begin_time'], reverse
=True)
82 finished_tasks
.sort(key
=lambda t
: t
['end_time'], reverse
=True)
85 'health_status': self
._health
_status
(),
86 'mgr_id': mgr
.get_mgr_id(),
87 'mgr_host': self
._get
_host
(),
88 'have_mon_connection': mgr
.have_mon_connection(),
89 'executing_tasks': executing_tasks
,
90 'finished_tasks': finished_tasks
,
91 'version': mgr
.version
93 if self
._has
_permissions
(Permission
.READ
, Scope
.RBD_MIRRORING
):
94 result
['rbd_mirroring'] = self
._rbd
_mirroring
()