Reviewed-on: #3
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
- Lee todos los registros de
proyectos. - Para cada proyecto hace un
GETaurl_healthcon untimeoutde 5s. - Guarda un registro en
estadoscon:OKsi la respuesta HTTP es200ERRORsi la respuesta no es200(o cualquier error distinto)TIMEOUTsi el error esECONNABORTED
- El dashboard (
GET /) muestra, por proyecto, el último registro deestados.
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_HOSTDB_PORTDB_USERDB_PASSWORDDB_NAME
Ejemplo .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
- Instala dependencias:
npm install
- Asegúrate de tener creada la BD (ejecuta
deployment/database/migrations/001_init.sql). - Ejecuta los scripts disponibles:
npm run dev: Inicia en modo desarrollo contsx.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_codigodel ú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:
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.