Las comunicaciones entre clientes y servidor se realizan mediante tareas (jobs). Dichas tareas permiten ejecutar comandos del sistema o comandos de opengnsys en los clientes y recibir información acerca de esa ejecución en el servidor.
El sistema de tareas se caracteriza principalmente por:
Existen tres elementos que se comunican entre sí, estos son:
La consola web y el job receiver son sendos servidores web que se ejecutan en el servidor Opengnsys y comparten la misma BD. La razón por la cual fue necesaria la creación de un segundo servicio web (job receiver) es porque mientras que la consola web no autentica mediante SSL al cliente HTTP, el job receiver necesita hacerlo.
La vida de una tarea simple suele ser la siguiente:
Los puertos, certificados SSL utilizados y direcciones ip del job receiver son configurables en los ficheros de configuración config.py de cada servicio web. Por defecto, el servicio web job executer se ejecuta en el puerto 1100, y el job receiver en el 1101.
Los mensajes que se intercambian en este protocolo son los siguientes:
Es el mensaje que envía la consola web al servicio job executer de un cliente cuando desde la consola web se solicita la realización de una tarea. La petición debe ir a la url /jobrequest/(?P<id>[0-9]+)
del servicio job executer. El id se utilizará para luego poder referenciar este trabajo, y el contenido de los mensajes tiene formato JSON, con los siguientes campos:
{
'type': '(command|ogr)',
'command': '<command name>',
'args' : ['arg1', 'arg2', 'arg3', ...],
'sequential': (True|False)
'files': ['data in file 1', 'data in file2', ...]
}
Sólo los dos primeros campos (type y command) son requeridos, el resto son opcionales:
GetIpAddress.sh
['/dev/null']
.Un mensaje de tipo Job Update es enviado desde el servicio job executer de un cliente al servicio job receiver de un servidor opengnsys. El objetivo de este mensaje es mandar información actualizada referente a la ejecución de un comando desde el cliente al servidor.
La petición debe ir a la url /updatejob/normal/(?P<id>\d+)/(?P<status>[A-Z]+)
. El id es único y se refiere al id del trabajo (Job) que fue recibido por el cliente en un mensaje del tipo anterior (Job Execution Request), y status es el estado del trabajo.
El contenido del mensaje se tratará como texto plano y se guardará tal cual en la base de datos del servidor, para que posteriormente sea procesador por la función de callback de dicho Job, si tuviera.
Es una práctica común que dicho mensaje, que proviene de un comando ejecutado en el cliente (ya sea un comando nativo o de OGR) esté codificado en JSON, y que la función de callback lo procese como tal a partir del texto del mensaje en la BD, pero no es necesario. De hecho, lo normal es que sólo algunos comandos de OGR estén codificados en JSON, puesto que los comandos nativos de Linux no suelen devolver su salida en formato JSON.
La cadena status puede ser:
Un mensaje de tipo Job Progress Update es enviado desde el servicio job executer de un cliente al servicio job receiver de un servidor opengnsys. El objetivo de este mensaje es mandar información actualizada referente al progreso de la ejecución de un comando desde el cliente al servidor.
La petición debe ir a la url /updatejob/progress/(?P<id>\d+)/(?P<progress>\d+)
. El id es único y se refiere al id del trabajo (Job) que fue recibido por el cliente en un mensaje del tipo anterior (Job Execution Request), y progress indica el porcentaje de finalización (un número de 0 a 100) del trabajo.
El contenido del mensaje se tratará como texto plano, suele ser un corto texto de una línea y se guardará tal cual en la base de datos del servidor, para que posteriormente sea procesador por la función de callback de dicho Job, si tuviera.