2026-05-05 09:39:12 +02:00
# sf-monitorizacion-health
2026-04-27 10:28:28 +00:00
2026-04-29 13:01:57 +02:00
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` .
2026-05-05 09:39:12 +02:00
El job se ejecuta de forma periódica (configurable desde la interfaz, por defecto 5 min) en bucle recursivo para evitar solapamientos.
2026-04-29 13:01:57 +02:00
## Requisitos
- Node.js 18+ (recomendado)
2026-05-05 09:39:12 +02:00
- TypeScript
2026-04-29 13:01:57 +02:00
- PostgreSQL
## Configuración
2026-05-05 09:39:12 +02:00
La app lee estas variables de entorno (consultadas desde `src/config/postgres-config.ts` ):
2026-04-29 13:01:57 +02:00
- `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:
2026-05-05 09:39:12 +02:00
- `proyectos` (con restricción UNIQUE en nombre y URL, y límite de 100 caracteres para el nombre)
2026-04-29 13:01:57 +02:00
- `estados`
2026-05-05 09:39:12 +02:00
> Nota: La migración utiliza `CREATE TABLE IF NOT EXISTS`.
2026-04-29 13:01:57 +02:00
## Cómo ejecutar
1. Instala dependencias:
- `npm install`
2. Asegúrate de tener creada la BD (ejecuta `deployment/database/migrations/001_init.sql` ).
2026-05-05 09:39:12 +02:00
3. Ejecuta los scripts disponibles:
- `npm run dev` : Inicia en modo desarrollo con `tsx` .
- `npm run build` : Compila el código TypeScript.
2026-04-29 13:01:57 +02:00
La app levanta el servidor en `http://localhost:3000` .
## Dashboard
Ruta:
2026-05-05 09:39:12 +02:00
- `GET /` : renderiza la vista principal.
2026-04-29 13:01:57 +02:00
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
2026-05-05 09:39:12 +02:00
Se pueden añadir desde la interfaz en `/nuevo` o mediante SQL:
2026-04-29 13:01:57 +02:00
```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.