From 886bf5e616175b1e12c70530108843739773dffc Mon Sep 17 00:00:00 2001 From: Natalia Serrano Date: Thu, 25 Jul 2024 12:43:07 +0200 Subject: [PATCH] refs #523 implement inclusionCliente() --- src/opengnsys/log.py | 2 +- .../server/ogAdmClient/__init__.py | 104 +++++++++++++----- 2 files changed, 78 insertions(+), 28 deletions(-) diff --git a/src/opengnsys/log.py b/src/opengnsys/log.py index 5c74783..eb1f309 100644 --- a/src/opengnsys/log.py +++ b/src/opengnsys/log.py @@ -94,7 +94,7 @@ class Logger(object): except Exception: tb = '(could not get traceback!)' - self.log(DEBUG, tb) + self.log(DEBUG, 'traceback follows: "{}"'.format(tb)) def flush(self): pass diff --git a/src/test_modules/server/ogAdmClient/__init__.py b/src/test_modules/server/ogAdmClient/__init__.py index 55aa49c..0d34e67 100644 --- a/src/test_modules/server/ogAdmClient/__init__.py +++ b/src/test_modules/server/ogAdmClient/__init__.py @@ -51,8 +51,6 @@ from opengnsys.log import logger from opengnsys.scriptThread import ScriptExecutorThread from opengnsys.workers import ServerWorker -pathinterface = None - # Check authorization header decorator def check_secret(fnc): """ @@ -94,27 +92,21 @@ def interfaceAdmin (exe, parametros=[]): logger.debug ('subprocess.run ("{}", capture_output=True)'.format (proc)) return subprocess.run (proc, capture_output=True).stdout.strip().decode ('utf-8') -def tomaIPlocal(): - logger.debug (__name__) - interface = '{}/getIpAddress'.format (pathinterface) - try: - IPlocal = interfaceAdmin (interface); - logger.info (IPlocal) - except Exception as e: - logger.error (e) - logger.error ('No se ha podido recuperar la dirección IP del cliente') - return False - return True - - class ogAdmClientWorker(ServerWorker): - name = 'ogAdmClient' # Module name - interface = None # Bound interface for OpenGnsys - REST = None # REST object - #user = [] # User sessions - #session_type = '' # User session type - random = None # Random string for secure connections - length = 32 # Random string length + name = 'ogAdmClient' # Module name + interface = None # Bound interface for OpenGnsys + REST = None # REST object + random = None # Random string for secure connections + length = 32 # Random string length + + pathinterface = None + IPlocal = None + idordenador = None + nombreordenador = None + cache = None + idproautoexec = None + idcentro = None + idaula = None def onActivation(self): """ @@ -125,12 +117,11 @@ class ogAdmClientWorker(ServerWorker): self.random = ''.join(random.choice(string.ascii_lowercase + string.digits) for _ in range(self.length)) # Ensure cfg has required configuration variables or an exception will be thrown try: - global pathinterface url = self.service.config.get('ogAdmClient', 'remote') loglevel = self.service.config.get('ogAdmClient', 'log') #servidorAdm = self.service.config.get('ogAdmClient', 'servidorAdm') #puerto = self.service.config.get('ogAdmClient', 'puerto') - pathinterface = self.service.config.get('ogAdmClient', 'pathinterface') + self.pathinterface = self.service.config.get('ogAdmClient', 'pathinterface') urlMenu = self.service.config.get('ogAdmClient', 'urlMenu') urlMsg = self.service.config.get('ogAdmClient', 'urlMsg') logger.setLevel(loglevel) @@ -162,7 +153,7 @@ class ogAdmClientWorker(ServerWorker): init_retries = 100 for t in range(0, init_retries): try: - self.REST.sendMessage('ogagent/started', {'mac': self.interface.mac, 'ip': self.interface.ip, + self.REST.sendMessage('started', {'mac': self.interface.mac, 'ip': self.interface.ip, 'secret': self.random, 'ostype': operations.os_type, 'osversion': operations.os_version, 'agent_version': VERSION}) @@ -176,14 +167,18 @@ class ogAdmClientWorker(ServerWorker): elif t == init_retries-1: raise Exception('Initialization error: Cannot connect to remote server') - tomaIPlocal() + if (not self.tomaIPlocal()): + raise Exception ('Se han generado errores. No se puede continuar la ejecución de este módulo') + + if (not self.inclusionCliente()): + raise Exception ('Se han generado errores. No se puede continuar la ejecución de este módulo') def onDeactivation(self): """ Sends OGAgent stopping notification to OpenGnsys server """ logger.debug('onDeactivation') - self.REST.sendMessage('ogagent/stopped', {'mac': self.interface.mac, 'ip': self.interface.ip, + self.REST.sendMessage('stopped', {'mac': self.interface.mac, 'ip': self.interface.ip, 'ostype': operations.os_type, 'osversion': operations.os_version}) def processClientMessage(self, message, data): @@ -318,6 +313,61 @@ with open (subprocs_log, 'ab') as fd: ## TODO improve this logging ## process_client_* are invoked from opengnsys/service.py:123 "v.processClientMessage(message, json.loads(data))" (via opengnsys/workers/server_worker.py) + def tomaIPlocal(self): + logger.debug (__name__) + interface = '{}/getIpAddress'.format (self.pathinterface) + try: + self.IPlocal = interfaceAdmin (interface); + logger.info (self.IPlocal) + except Exception as e: + logger.error (e) + logger.error ('No se ha podido recuperar la dirección IP del cliente') + return False + return True + + def LeeConfiguracion(self): + parametroscfg = interfaceAdmin ('{}/getConfiguration'.format (self.pathinterface)) ## Configuración de los Sistemas Operativos del cliente + logger.debug ('parametroscfg ({})'.format (parametroscfg)) + return (parametroscfg) + + def enviaMensajeServidor(self, path, obj): + obj['iph'] = self.IPlocal ## Ip del ordenador + obj['ido'] = self.idordenador ## Identificador del ordenador + obj['npc'] = self.nombreordenador ## Nombre del ordenador + obj['idc'] = self.idcentro ## Identificador del centro + obj['ida'] = self.idaula ## Identificador del aula + + res = self.REST.sendMessage (path, obj) + + if (not res): ## TODO + #logger.error ('No se ha podido establecer conexión con el Servidor de Administración') ## Error de conexión con el servidor + logger.error ('Error al enviar trama ***send() fallo') + return False + + return res + + def inclusionCliente(self): + cfg = self.LeeConfiguracion() + res = self.enviaMensajeServidor ('InclusionCliente', { 'cfg': cfg }) + logger.debug ('res ({})'.format (res)) + + if (not res or 0 == res['res']) : + logger.error ('Ha ocurrido algún problema en el proceso de inclusión del cliente') + return False + + if (not res['ido'] or not res['npc']): + logger.error ('Se han recibido parámetros con valores no válidos') + return False + + self.idordenador = res['ido'] ## Identificador del ordenador + self.nombreordenador = res['npc'] ## Nombre del ordenador + self.cache = res['che'] ## Tamaño de la caché reservada al cliente + self.idproautoexec = res['exe'] ## Procedimento de inicio (Autoexec) + self.idcentro = res['idc'] ## Identificador de la Unidad Organizativa + self.idaula = res['ida'] ## Identificador del aula + + return True + def process_RESPUESTA_AutoexecCliente(self, path, get_params, post_params, server): logger.warn('in process_RESPUESTA_AutoexecCliente')