Files

86 lines
2.4 KiB
Markdown
Raw Permalink Normal View History

# sf-monitorizacion-health
2026-04-27 10:28:28 +00: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`.
El job se ejecuta de forma periódica (configurable desde la interfaz, por defecto 5 min) en bucle recursivo para evitar solapamientos.
## Requisitos
- Node.js 18+ (recomendado)
- TypeScript
- PostgreSQL
## Configuración
La app lee estas variables de entorno (consultadas desde `src/config/postgres-config.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` (con restricción UNIQUE en nombre y URL, y límite de 100 caracteres para el nombre)
- `estados`
> Nota: La migración utiliza `CREATE TABLE IF NOT EXISTS`.
## 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 los scripts disponibles:
- `npm run dev`: Inicia en modo desarrollo con `tsx`.
- `npm run build`: Compila el código TypeScript.
La app levanta el servidor en `http://localhost:3000`.
## Dashboard
Ruta:
- `GET /` : renderiza la vista principal.
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
Se pueden añadir desde la interfaz en `/nuevo` o mediante SQL:
```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.