Add websockets progress, "multi-system" support for upgrades
and related things to better support that
This commit is contained in:
parent
db3f215ebe
commit
18cec49a86
12 changed files with 731 additions and 114 deletions
|
@ -1790,14 +1790,28 @@ class MasterView(View):
|
|||
"""
|
||||
obj = self.get_instance()
|
||||
model_title = self.get_model_title()
|
||||
progress = self.make_execute_progress(obj)
|
||||
|
||||
# caller must explicitly request websocket behavior; otherwise
|
||||
# we will assume traditional behavior for progress
|
||||
ws = self.request.is_xhr and self.request.json_body.get('ws')
|
||||
|
||||
# make our progress tracker
|
||||
progress = self.make_execute_progress(obj, ws=ws)
|
||||
|
||||
# start execution in a separate thread
|
||||
kwargs = {'progress': progress}
|
||||
key = [self.request.matchdict[k]
|
||||
for k in self.get_model_key(as_tuple=True)]
|
||||
thread = Thread(target=self.execute_thread, args=(key, self.request.user.uuid), kwargs=kwargs)
|
||||
thread = Thread(target=self.execute_thread,
|
||||
args=(key, self.request.user.uuid),
|
||||
kwargs=kwargs)
|
||||
thread.start()
|
||||
|
||||
# we're done here if using websockets
|
||||
if ws:
|
||||
return self.json_response({'ok': True})
|
||||
|
||||
# traditional behavior sends user to dedicated progress page
|
||||
return self.render_progress(progress, {
|
||||
'instance': obj,
|
||||
'initial_msg': self.execute_progress_initial_msg,
|
||||
|
@ -1805,9 +1819,12 @@ class MasterView(View):
|
|||
'cancel_msg': "{} execution was canceled".format(model_title),
|
||||
}, template=self.execute_progress_template)
|
||||
|
||||
def make_execute_progress(self, obj):
|
||||
key = '{}.execute'.format(self.get_grid_key())
|
||||
return self.make_progress(key)
|
||||
def make_execute_progress(self, obj, ws=False):
|
||||
if ws:
|
||||
key = '{}.{}.execution_progress'.format(self.get_route_prefix(), obj.uuid)
|
||||
else:
|
||||
key = '{}.execute'.format(self.get_grid_key())
|
||||
return self.make_progress(key, ws=ws)
|
||||
|
||||
def get_instance_for_key(self, key, session):
|
||||
model_key = self.get_model_key(as_tuple=True)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue