# 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.