Commit e601b2bc by Őry Máté Committed by Bach Dániel

dashboard: allow waiting for Operation result

parent 4d19cb51
...@@ -52,6 +52,7 @@ from django_tables2 import SingleTableView ...@@ -52,6 +52,7 @@ from django_tables2 import SingleTableView
from braces.views import (LoginRequiredMixin, SuperuserRequiredMixin, from braces.views import (LoginRequiredMixin, SuperuserRequiredMixin,
PermissionRequiredMixin) PermissionRequiredMixin)
from braces.views._access import AccessMixin from braces.views._access import AccessMixin
from celery.exceptions import TimeoutError
from django_sshkey.models import UserKey from django_sshkey.models import UserKey
...@@ -569,13 +570,28 @@ class OperationView(RedirectToLoginMixin, DetailView): ...@@ -569,13 +570,28 @@ class OperationView(RedirectToLoginMixin, DetailView):
extra = {} extra = {}
result = None result = None
try: try:
self.get_op().async(user=request.user, **extra) task = self.get_op().async(user=request.user, **extra)
except Exception as e: except Exception as e:
messages.error(request, _('Could not start operation.')) messages.error(request, _('Could not start operation.'))
logger.exception(e) logger.exception(e)
result = e result = e
else: else:
messages.success(request, _('Operation is started.')) wait = self.wait_for_result
if wait:
try:
result = task.get(timeout=wait,
interval=min((wait / 5, .5)))
except TimeoutError:
logger.debug("Result didn't arrive in %ss",
self.wait_for_result, exc_info=True)
except Exception as e:
messages.error(request, _('Operation failed.'))
logger.debug("Operation failed.", exc_info=True)
result = e
else:
messages.success(request, _('Operation succeeded.'))
if result is None:
messages.success(request, _('Operation is started.'))
if "/json" in request.META.get("HTTP_ACCEPT", ""): if "/json" in request.META.get("HTTP_ACCEPT", ""):
data = self.get_response_data(result, post_extra=extra, **kwargs) data = self.get_response_data(result, post_extra=extra, **kwargs)
...@@ -863,7 +879,7 @@ vm_ops = OrderedDict([ ...@@ -863,7 +879,7 @@ vm_ops = OrderedDict([
('resources_change', VmResourcesChangeView), ('resources_change', VmResourcesChangeView),
('password_reset', VmOperationView.factory( ('password_reset', VmOperationView.factory(
op='password_reset', icon='unlock', effect='warning', op='password_reset', icon='unlock', effect='warning',
show_in_toolbar=False)), show_in_toolbar=False, wait_for_result=0.5)),
]) ])
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment