Files
Autonomous-Bug-Explorer/.ralph/specs/legacy/scheduled-monitoring.md

2.4 KiB

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

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:

{
  "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}"