La persistencia será almacenada en una base de datos relacional. Se hará uso de PostgreSQL para su despliegue y su objetivo principal es dotar de robustez al sistema ante posibles caídas así como almacenar información útil de logs y procesos.
La siguiente ilustración es la implementación del esquema actual de la base de datos de PostgreSQL.
| Log | ||
| Atributo | Tipo | Descripción |
|---|---|---|
id | int | Identificador del log. |
| id_schedule | int | Identificador de la planificación de ejecución. |
| id_process | int | Identificador del proceso (extraer convocatoria, base reguladora...). |
| id_robot | int | Identificador del robot que ha creado el log. |
| log_file_path | string | ruta donde se encuentra el fichero del log. |
| data | string | Información que se extrae del proceso realizado. |
| start_time | timestamp | Cuando empezó la ejecución. |
| end_time | timestmap | Cuando terminó la ejecución. |
| state | string | Estado de la ejecución (OK, ERROR...). |
| finished | boolean | Ha finalizado la ejecución (True o False). |
| completed | int | 0-100, numero para la monitorización del proceso. |
| Process | ||
| Atributo | Tipo | Descripción |
|---|---|---|
| id | int | Identificador del proceso. |
| class | string | Nombre de la clase del proceso, para poder ser invocado. |
| name | string | Nombre del proceso. |
| requirements | string | Librerías necesarias para la ejecución. |
| description | string | Descripción del proceso. |
| Schedule | ||
| Atributo | Tipo | Descripción |
|---|---|---|
| id | int | Identificador de la planificación de ejecución. |
| id_robot | int | Robot que ha realizado o realizará esa ejecución. |
| schedule_json | string | JSON con la estructura de lanzamiento (). |
| active | boolean | La planificación de ejecución sigue activa (true, false) para procesos que queramos planificar cada día. |
| next_run | timestamp | Timestamp de la siguiente ejecución. |
| Robot | ||
| Atributo | Tipo | Descripción |
|---|---|---|
| id | int | Identificador del robot. |
| name | string | Nombre del robot. |
| ip_address | string | Dirección IP del robot. |
| address | string | Donde se encuentra el robot. |
| mac | string | Dirección MAC del robot. |
| python_version | string | Versión de Python del robot. |
| os | string | Sistema operativo del robot. |
| features | string | Librerías instaladas del robot. |
| connected | boolean | Conectado (True o false). |
| last_seen | timestamp | Última vez visto. |
| created | timestamp | Timestamp de cuando se creó ese robot. |
A continuación, se muestra un ejemplo de información que estaría almacenada en la base de datos.
Tabla Process
{
"process":[
{
"id":1,
"class":"ProcessBoletines",
"name":"Proceso Boletines",
"requirements":"",
"description":"Proceso que Segmenta y Crea boletines para la ayuda a la transferencia de investigación"
}
]
}
Tabla Log
{
"log":[
{
"id":1,
"id_schedule":1,
"id_process":1,
"id_robot":"robot1",
"log_file_path":"08-09-2021-13:28:37ProcessBoletines.log",
"data":"Información sobre la ejecución del proceso""start_time":"2021-12-08T11:28:38.727Z",
"end_time":"2021-12-08T11:28:48.862Z",
"state":"OK",
"finished":true,
"completed":100
}
]
}
Tabla Schedule
{
"schedule":[
{
"id":1,
"id_robot":" robot1",
"schedule_json":"Parametros del proceso a ejecutar",
"active":false,
"created":"2021-12-08T11:28:38.727Z",
"next_run":null
}
]
}
Tabla Robot
{
"robot":[
{
"id":"robotWindows",
"name":"Robot Windows",
"ip_address":"10.208.3.112",
"address":"Universidad de Murcia",
"registrations":"ATICA",
"mac":"8d:a0:4f:4d:d1:8e",
"python_version":"3.8.5 (default, Sep 4 2020, 07:30:14) \n[GCC 7.3.0]",
"os":"Linux",
"features":"aiormq,aio-pika,absl-py",
"connected":"2021-11-09T12:43:36.471Z",
"last_seen":"2021-11-09T12:47:40.679Z",
"created":"2021-10-14T11:27:30.418Z"
}
]
}
Toda la información contenida en la persistencia podrá ser consultada mediante una API.

