86 lines
2.4 KiB
Markdown
86 lines
2.4 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 (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.
|