# ABE — Scheduled Monitoring Specification ## Concepto ABE puede ejecutar exploraciones de forma automática en intervalos definidos, sin intervención humana. Esto convierte ABE de una herramienta manual en un sistema de monitorización continua, al estilo Checkly. ## Modelo de datos — añadir a SQLite ### Table: schedules ```sql CREATE TABLE IF NOT EXISTS schedules ( id TEXT PRIMARY KEY, name TEXT NOT NULL, url TEXT NOT NULL, config_json TEXT NOT NULL, cron_expression TEXT NOT NULL, -- e.g. "0 */6 * * *" (every 6h) enabled INTEGER NOT NULL DEFAULT 1, last_run_at INTEGER, next_run_at INTEGER, created_at INTEGER NOT NULL ); ``` ## Expresiones cron soportadas (presets en la UI) | Label | Cron | |------------------|----------------| | Every 15 minutes | */15 * * * * | | Every hour | 0 * * * * | | Every 6 hours | 0 */6 * * * | | Every day at 2am | 0 2 * * * | | Every Monday 9am | 0 9 * * 1 | ## Implementación Usar `node-cron` para el scheduler. Crear `src/server/scheduler/SchedulerService.ts`: - En startup, carga todos los schedules con enabled=1 de la DB - Registra un cron job por cada schedule - Cuando dispara, llama internamente a POST /api/sessions con la config guardada - Actualiza last_run_at y next_run_at en la DB después de cada disparo - Si la sesión anterior sigue running, skip este tick y log warning ## API endpoints nuevos ### GET /api/schedules Lista todos los schedules. ### POST /api/schedules Crea un nuevo schedule. Body: ```json { "name": "Production daily check", "url": "https://myapp.com", "config": { ... mismo ExplorationConfig ... }, "cronExpression": "0 2 * * *", "enabled": true } ``` ### PATCH /api/schedules/:id Actualiza o activa/desactiva un schedule. ### DELETE /api/schedules/:id Elimina un schedule. ## Frontend — nueva sección en Settings Añadir tab "Schedules" en /settings: - Lista de schedules activos con: nombre, URL, cron, última ejecución, próxima ejecución, toggle activo/inactivo - Botón "New Schedule" abre modal con: nombre, URL, config de exploración, selector de frecuencia (presets + custom cron) - Badge "Running" si hay una sesión activa del schedule en este momento ## Notificaciones específicas de schedules Cuando un schedule dispara una exploración y encuentra anomalías high/critical, enviar notificación con el subject: "[SCHEDULED] ABE found bugs in {url}"