Files
sf-monitorizacion-health/README.md

87 lines
2.2 KiB
Markdown

# sf-monitorizacion-health
Aplicación Node.js/Express para monitorizar el endpoint de salud (`url_health`) de un conjunto de proyectos y mostrar un dashboard con el **último estado** registrado en PostgreSQL.
## Qué hace
1. Lee todos los registros de `proyectos`.
2. Para cada proyecto hace un `GET` a `url_health` con un `timeout` de 5s.
3. Guarda un registro en `estados` con:
- `OK` si la respuesta HTTP es `200`
- `ERROR` si la respuesta no es `200` (o cualquier error distinto)
- `TIMEOUT` si el error es `ECONNABORTED`
4. El dashboard (`GET /`) muestra, por proyecto, el **último** registro de `estados`.
El job se ejecuta de forma periódica (cada 60s) en bucle recursivo para evitar solapamientos.
## Requisitos
- Node.js 18+ (recomendado)
- PostgreSQL
## Configuración
La app lee estas variables de entorno (consultadas desde `src/config/postgreConfig.ts`):
- `DB_HOST`
- `DB_PORT`
- `DB_USER`
- `DB_PASSWORD`
- `DB_NAME`
Ejemplo `.env`:
```env
DB_HOST=localhost
DB_PORT=5432
DB_USER=postgres
DB_PASSWORD=postgres
DB_NAME=sf_monitorizacion_health
```
## Base de datos
La migración `deployment/database/migrations/001_init.sql` crea:
- `proyectos`
- tipo ENUM `tipo_estado` con `OK`, `ERROR`, `TIMEOUT`
- `estados`
- índice para consultar rápido el último estado por proyecto
> Nota: la migración hace `DROP TABLE IF EXISTS`, así que destruye los datos actuales.
## Cómo ejecutar
1. Instala dependencias:
- `npm install`
2. Asegúrate de tener creada la BD (ejecuta `deployment/database/migrations/001_init.sql`).
3. Ejecuta en modo desarrollo:
- `npm run dev`
La app levanta el servidor en `http://localhost:3000`.
## Dashboard
Ruta:
- `GET /` : renderiza `src/views/index.ejs`
En la tabla se muestra:
- Nombre del proyecto (`proyectos.nombre`)
- URL (`proyectos.url_health`)
- Estado (`estados.estado_codigo` del último registro)
- “Última comprobación” (`estados.fecha`)
Si un proyecto todavía no tiene estados registrados, el dashboard muestra `PENDIENTE`.
## Añadir proyectos
Inserta en `proyectos`:
```sql
INSERT INTO proyectos (nombre, url_health)
VALUES ('Mi proyecto', 'https://ejemplo.com/health');
```
Los estados empezarán a generarse automáticamente cuando arranque el servidor y empiece el ciclo de checks.