{%hackmd UOEMBF0eSWSoaH5TLeOEgw %}
# Mejoras al CRON
## Objetivos
### 1. Abordar y corregir origen problemática ocurrida
Resumen de los 3 problemas:
1. Existía un bug en la aplicación, lo que generó un error que detuvo la ejecución del cron.
- Error: `2021-01-12T03:00:32.429Z [31merror[39m: Object field 'requestedUser' may not be undefined` en `cron.log.gz`
2. Una vez encontrada una solución al problema anterior, esta se aplica, pero genera otro error que se ignora, ya que aparece una sola vez y no detiene la ejecución del cron.
- Error: `2021-01-13T03:00:29.711Z [31merror[39m: USERID e75c820a-9900-400f-8524-10b0dda35954, model: outbox, Error in consequence function updateExpiredDraftInOutbox, Error: TypeError: Cannot read property 'dateLimitExpired' of undefined` en `cron.log.gz`
3. La forma de aplicar la solución encontrada fue errónea, lo que provocó que no se generaran algunos documentos de indicadores y el cron siguiera su ejecución con errores.
- Primer error:`2021-01-12T23:23:01.849Z [31merror[39m: Object field 'requestedUser' may not be undefined` en `createOldIndicators.log.gz`
- Ejemplo de errores siguientes: `2021-02-02T03:00:46.648Z [31merror[39m: USERID 94a1a958-f461-460e-93ff-7661ed2e6cc0, model: newIndicators, Error in consequence function calculateIndicators, Error: Error: Error creating a new Indicator document` en `cron.log.gz`
Diagnóstico completo [aquí](https://hackmd.io/S8eUzHe0REiKKo1LRdX2Gg).
El día 12/01/2021 al no poderse ejecutar
### 2. Factores que no permitieron el procesamiento de indicadores
Inicialmente, algunos documentos de indicadores no se generaron porque se interrumpió la ejecución del cron debido al intentar insertar un valor `undefined` en la base de datos.
Posteriormente, falló la generación de indicadores debido a que no se encontraban los indicadores del día anterior.
### 3. Prevención de errores
- Problema 1: Fijarse en las dependencias que tienen las funciones del cron al hacer cambios en la API.
- Problema 2 y 3: Fijarse en los logs del cron al hacer cambios que afecten al cron.
### 4. Continuidad operativa
¿Es efectivo que un solo usuario pueda detener el proceso?, corroborar el escenario (la implicancia es marginal)
### 5. Mejoras propuestas
- Que se el mismo cron inicie una ejecución de la realización de un respaldo de la data (DB, archivos), de manera que no se ejecuten acciones entre la realización del respaldo y la ejecución del cron.
- Que si ocurre un error en el cron, se alerte a un encargado de turno.
- Que si ocurre un error en el cron, no se permita la realización de más acciones, de manera que no se pierda data al realizar la restauración de un respaldo.
## Situación actual
### Respaldo de la base de datos
Se realizan respaldos de la DB media hora antes de la ejecución del cron.
### Detalle de log de consecuencias
Se loguean los resultados de todas las funciones de consecuencias solamente e "development". No se loguea los argumentos.
Se loguean los errores producidos, pero no los argumentos que produjeron ese error.
### Compresión de Logs
No está funcionando la compresión de logs.
## Mejoras propuestas
### Generar log con userData
Se propone imprimir “userData” y “newUserData” al encontrar errores, lo cual puede brindar más información básica para el análisis.
### Incorporar ElasticSearch
ElasticSearch es un motor de analítica y análisis distribuido que incorpora mediante API REST un conjunto de herramientas para la ingesta, el enriquecimiento, el almacenamiento, el análisis y la visualización de datos, para este caso, el log de funcionamiento en un entorno centralizado.
### Documentación de modelos y objetos
### Wrapper error query
### Eliminar logger de consecuencias