refs #783 make Actualizar() asynchronous

unification3
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 base64
import os import os
import time
import random
from pathlib import Path from pathlib import Path
from opengnsys.log import logger from opengnsys.log import logger
from opengnsys.workers import ogLiveWorker, ThreadWithResult from opengnsys.workers import ogLiveWorker
class CloningEngineWorker (ogLiveWorker): class CloningEngineWorker (ogLiveWorker):
name = 'CloningEngine' # Module name name = 'CloningEngine' # Module name
@ -171,26 +169,6 @@ class CloningEngineWorker (ogLiveWorker):
} }
return self.respuestaEjecucionComando (cmd, herror, ids) 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): def process_status (self, path, get_params, post_params, server):
## join finished threads ## join finished threads
for k in self.thread_list: 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): def process_status (self, path, get_params, post_params, server):
return {self.name: 'in process_status'} ## XXX 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 @check_secret
def process_popup (self, path, get_params, post_params, server): 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)) 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'>" ## type(post_params) "<class 'dict'>"
return {'debug':'test'} return {'debug':'test'}
## curl --insecure https://192.168.1.249:8000/ogAdmClient/Actualizar def do_Actualizar (self, post_params):
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))
self.muestraMensaje (1) self.muestraMensaje (1)
#if !comandosPendientes: error 84 'Ha ocurrido algún problema al reiniciar la sesión del cliente' #if !comandosPendientes: error 84 'Ha ocurrido algún problema al reiniciar la sesión del cliente'
cfg = self.LeeConfiguracion() cfg = self.LeeConfiguracion()
@ -414,6 +411,10 @@ class ogAdmClientWorker (ogLiveWorker):
self.muestraMenu() self.muestraMenu()
return self.respuestaEjecucionComando (cmd, 0) 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): 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)) logger.debug ('in process_Purgar, path "{}" get_params "{}" post_params "{}" server "{}"'.format (path, get_params, post_params, server))
exit (0) ## ogAdmClient.c:905 exit (0) ## ogAdmClient.c:905

View File

@ -31,6 +31,8 @@
# pylint: disable=unused-wildcard-import,wildcard-import # pylint: disable=unused-wildcard-import,wildcard-import
import os import os
import time
import random
import subprocess import subprocess
import threading import threading
@ -190,3 +192,23 @@ class ogLiveWorker(ServerWorker):
if not self.tomaIPlocal(): if not self.tomaIPlocal():
raise Exception ('Se han generado errores. No se puede continuar la ejecución de este módulo') 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 }