]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
mgr/dashboard: progress: support rbd_support module async tasks
authorRicardo Dias <rdias@suse.com>
Wed, 31 Jul 2019 11:05:00 +0000 (12:05 +0100)
committerRicardo Dias <rdias@suse.com>
Thu, 29 Aug 2019 09:38:10 +0000 (10:38 +0100)
Signed-off-by: Ricardo Dias <rdias@suse.com>
src/pybind/mgr/dashboard/services/progress.py

index 4bacc19746254ae33c3010cf9fa57a53097f8e89..ee095bf57f4ae94ea331219d337ba16e76be9a31 100644 (file)
@@ -14,6 +14,56 @@ from datetime import datetime
 from .. import mgr, logger
 
 
+def _progress_event_to_dashboard_task_common(event, task):
+    if event['refs'] and isinstance(event['refs'], dict):
+        refs = event['refs']
+        if refs['origin'] == "rbd_support":
+            # rbd mgr module event, we can transform this event into an rbd dashboard task
+            action_map = {
+                'remove': "delete",
+                'flatten': "flatten",
+                'trash remove': "trash/remove"
+            }
+            action = action_map.get(refs['action'], refs['action'])
+            task.update({
+                'name': "rbd/{}".format(action),
+                'metadata': refs,
+                'begin_time': "{}Z".format(datetime.fromtimestamp(event["started_at"])
+                                           .isoformat()),
+            })
+            return
+
+    task.update({
+        # we're prepending the "progress/" prefix to tag tasks that come
+        # from the progress module
+        'name': "progress/{}".format(event['message']),
+        'metadata': dict(event.get('refs', {})),
+        'begin_time': "{}Z".format(datetime.fromtimestamp(event["started_at"])
+                                   .isoformat()),
+    })
+
+
+
+def _progress_event_to_dashboard_task(event, completed=False):
+    task = {}
+    _progress_event_to_dashboard_task_common(event, task)
+    if not completed:
+        task.update({
+            'progress': int(100 * event['progress'])
+        })
+    else:
+        task.update({
+            'end_time': "{}Z".format(datetime.fromtimestamp(event['finished_at'])
+                                     .isoformat()),
+            'duration': event['finished_at'] - event['started_at'],
+            'progress': 100,
+            'success': 'failed' not in event,
+            'ret_value': None,
+            'exception': {'detail': event['failure_message']} if 'failed' in event else None
+        })
+    return task
+
+
 def get_progress_tasks():
     executing_t = []
     finished_t = []
@@ -21,30 +71,10 @@ def get_progress_tasks():
 
     for ev in progress_events['events']:
         logger.debug("[Progress] event=%s", ev)
-        executing_t.append({
-            # we're prepending the "progress/" prefix to tag tasks that come
-            # from the progress module
-            'name': "progress/{}".format(ev['message']),
-            'metadata': dict(ev['refs']),
-            'begin_time': "{}Z".format(datetime.fromtimestamp(ev["started_at"])
-                                       .isoformat()),
-            'progress': int(100 * ev['progress'])
-        })
+        executing_t.append(_progress_event_to_dashboard_task(ev))
 
     for ev in progress_events['completed']:
         logger.debug("[Progress] finished event=%s", ev)
-        finished_t.append({
-            'name': "progress/{}".format(ev['message']),
-            'metadata': dict(ev['refs']),
-            'begin_time': "{}Z".format(datetime.fromtimestamp(ev["started_at"])
-                                       .isoformat()),
-            'end_time': "{}Z".format(datetime.fromtimestamp(ev['finished_at'])
-                                     .isoformat()),
-            'duration': ev['finished_at'] - ev['started_at'],
-            'progress': 100,
-            'success': True,
-            'ret_value': None,
-            'exception': None
-        })
+        finished_t.append(_progress_event_to_dashboard_task(ev, True))
 
     return executing_t, finished_t