80 lines
2.4 KiB
Markdown
80 lines
2.4 KiB
Markdown
# 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}"
|