]>
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
12 from datetime
import datetime
15 from . import rbd
# pylint: disable=no-name-in-module
17 logger
= logging
.getLogger('progress')
20 def _progress_event_to_dashboard_task_common(event
, task
):
21 if event
['refs'] and isinstance(event
['refs'], dict):
23 if refs
['origin'] == "rbd_support":
24 # rbd mgr module event, we can transform this event into an rbd dashboard task
28 'trash remove': "trash/remove"
30 action
= action_map
.get(refs
['action'], refs
['action'])
32 if 'image_name' in refs
:
33 metadata
['image_spec'] = rbd
.get_image_spec(refs
['pool_name'],
34 refs
['pool_namespace'],
37 metadata
['image_id_spec'] = rbd
.get_image_spec(refs
['pool_name'],
38 refs
['pool_namespace'],
41 'name': "rbd/{}".format(action
),
43 'begin_time': "{}Z".format(datetime
.fromtimestamp(event
["started_at"])
49 # we're prepending the "progress/" prefix to tag tasks that come
50 # from the progress module
51 'name': "progress/{}".format(event
['message']),
52 'metadata': dict(event
.get('refs', {})),
53 'begin_time': "{}Z".format(datetime
.fromtimestamp(event
["started_at"])
58 def _progress_event_to_dashboard_task(event
, completed
=False):
60 _progress_event_to_dashboard_task_common(event
, task
)
63 'progress': int(100 * event
['progress'])
67 'end_time': "{}Z".format(datetime
.fromtimestamp(event
['finished_at'])
69 'duration': event
['finished_at'] - event
['started_at'],
71 'success': 'failed' not in event
,
73 'exception': {'detail': event
['failure_message']} if 'failed' in event
else None
78 def get_progress_tasks():
81 progress_events
= mgr
.remote('progress', "_json")
83 for ev
in progress_events
['events']:
84 logger
.debug("event=%s", ev
)
85 executing_t
.append(_progress_event_to_dashboard_task(ev
))
87 for ev
in progress_events
['completed']:
88 logger
.debug("finished event=%s", ev
)
89 finished_t
.append(_progress_event_to_dashboard_task(ev
, True))
91 return executing_t
, finished_t