]>
git.proxmox.com Git - ceph.git/blob - ceph/src/pybind/mgr/dashboard/services/progress.py
1 # -*- coding: utf-8 -*-
3 Progress Mgr Module Helper
5 This python module implements helper methods to retrieve the
6 executing and completed tasks tacked by the progress mgr module
7 using the same structure of dashboard tasks
10 from __future__
import absolute_import
12 from datetime
import datetime
19 logger
= logging
.getLogger('progress')
22 def _progress_event_to_dashboard_task_common(event
, task
):
23 if event
['refs'] and isinstance(event
['refs'], dict):
25 if refs
['origin'] == "rbd_support":
26 # rbd mgr module event, we can transform this event into an rbd dashboard task
30 'trash remove': "trash/remove"
32 action
= action_map
.get(refs
['action'], refs
['action'])
34 if 'image_name' in refs
:
35 metadata
['image_spec'] = rbd
.get_image_spec(refs
['pool_name'],
36 refs
['pool_namespace'],
39 metadata
['image_id_spec'] = rbd
.get_image_spec(refs
['pool_name'],
40 refs
['pool_namespace'],
43 'name': "rbd/{}".format(action
),
45 'begin_time': "{}Z".format(datetime
.fromtimestamp(event
["started_at"])
51 # we're prepending the "progress/" prefix to tag tasks that come
52 # from the progress module
53 'name': "progress/{}".format(event
['message']),
54 'metadata': dict(event
.get('refs', {})),
55 'begin_time': "{}Z".format(datetime
.fromtimestamp(event
["started_at"])
60 def _progress_event_to_dashboard_task(event
, completed
=False):
62 _progress_event_to_dashboard_task_common(event
, task
)
65 'progress': int(100 * event
['progress'])
69 'end_time': "{}Z".format(datetime
.fromtimestamp(event
['finished_at'])
71 'duration': event
['finished_at'] - event
['started_at'],
73 'success': 'failed' not in event
,
75 'exception': {'detail': event
['failure_message']} if 'failed' in event
else None
80 def get_progress_tasks():
83 progress_events
= mgr
.remote('progress', "_json")
85 for ev
in progress_events
['events']:
86 logger
.debug("event=%s", ev
)
87 executing_t
.append(_progress_event_to_dashboard_task(ev
))
89 for ev
in progress_events
['completed']:
90 logger
.debug("finished event=%s", ev
)
91 finished_t
.append(_progress_event_to_dashboard_task(ev
, True))
93 return executing_t
, finished_t