refs #523 implement inclusionCliente()

versions
Natalia Serrano 2024-07-25 12:43:07 +02:00
parent bf061b13db
commit 886bf5e616
2 changed files with 78 additions and 28 deletions

View File

@ -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

View File

@ -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')