refs #783 make Actualizar() asynchronous

pull/10/head
Natalia Serrano 2024-10-03 14:20:48 +02:00
parent 3191a171a1
commit 647489d507
3 changed files with 28 additions and 27 deletions

View File

@ -32,12 +32,10 @@
import base64
import os
import time
import random
from pathlib import Path
from opengnsys.log import logger
from opengnsys.workers import ogLiveWorker, ThreadWithResult
from opengnsys.workers import ogLiveWorker
class CloningEngineWorker (ogLiveWorker):
name = 'CloningEngine' # Module name
@ -171,26 +169,6 @@ class CloningEngineWorker (ogLiveWorker):
}
return self.respuestaEjecucionComando (cmd, herror, ids)
def _long_running_job (self, name, f, args):
any_job_running = False
for k in self.thread_list:
if self.thread_list[k]['running']:
any_job_running = True
break
if any_job_running:
logger.info ('some job is already running, refusing to launch another one')
return { 'job_id': None, 'message': 'some job is already running, refusing to launch another one' }
job_id = '{}-{}'.format (name, ''.join (random.choice ('0123456789abcdef') for _ in range (8)))
self.thread_list[job_id] = {
'thread': ThreadWithResult (target=f, args=args),
'starttime': time.time(),
'running': True,
'result': None
}
self.thread_list[job_id]['thread'].start()
return { 'job_id': job_id }
def process_status (self, path, get_params, post_params, server):
## join finished threads
for k in self.thread_list:

View File

@ -387,7 +387,6 @@ class ogAdmClientWorker (ogLiveWorker):
def process_status (self, path, get_params, post_params, server):
return {self.name: 'in process_status'} ## XXX
## curl --insecure -X POST --data '{"nfn": "popup", "title": "my title", "message": "my message"}' https://192.168.1.249:8000/ogAdmClient/popup
@check_secret
def process_popup (self, path, get_params, post_params, server):
logger.debug ('in process_popup, path "{}" get_params "{}" post_params "{}" server "{}"'.format (path, get_params, post_params, server))
@ -396,9 +395,7 @@ class ogAdmClientWorker (ogLiveWorker):
## type(post_params) "<class 'dict'>"
return {'debug':'test'}
## curl --insecure https://192.168.1.249:8000/ogAdmClient/Actualizar
def process_Actualizar (self, path, get_params, post_params, server):
logger.debug ('in process_Actualizar, path "{}" get_params "{}" post_params "{}" server "{}"'.format (path, get_params, post_params, server))
def do_Actualizar (self, post_params):
self.muestraMensaje (1)
#if !comandosPendientes: error 84 'Ha ocurrido algún problema al reiniciar la sesión del cliente'
cfg = self.LeeConfiguracion()
@ -414,6 +411,10 @@ class ogAdmClientWorker (ogLiveWorker):
self.muestraMenu()
return self.respuestaEjecucionComando (cmd, 0)
def process_Actualizar (self, path, get_params, post_params, server):
logger.debug ('in process_Actualizar, path "{}" get_params "{}" post_params "{}" server "{}"'.format (path, get_params, post_params, server))
return self._long_running_job ('Actualizar', self.do_Actualizar, args=(post_params,))
def process_Purgar (self, path, get_params, post_params, server):
logger.debug ('in process_Purgar, path "{}" get_params "{}" post_params "{}" server "{}"'.format (path, get_params, post_params, server))
exit (0) ## ogAdmClient.c:905

View File

@ -31,6 +31,8 @@
# pylint: disable=unused-wildcard-import,wildcard-import
import os
import time
import random
import subprocess
import threading
@ -190,3 +192,23 @@ class ogLiveWorker(ServerWorker):
if not self.tomaIPlocal():
raise Exception ('Se han generado errores. No se puede continuar la ejecución de este módulo')
def _long_running_job (self, name, f, args):
any_job_running = False
for k in self.thread_list:
if self.thread_list[k]['running']:
any_job_running = True
break
if any_job_running:
logger.info ('some job is already running, refusing to launch another one')
return { 'job_id': None, 'message': 'some job is already running, refusing to launch another one' }
job_id = '{}-{}'.format (name, ''.join (random.choice ('0123456789abcdef') for _ in range (8)))
self.thread_list[job_id] = {
'thread': ThreadWithResult (target=f, args=args),
'starttime': time.time(),
'running': True,
'result': None
}
self.thread_list[job_id]['thread'].start()
return { 'job_id': job_id }