docs: enterprise refactor plan with ralph specs
This commit is contained in:
79
.ralph/specs/legacy/scheduled-monitoring.md
Normal file
79
.ralph/specs/legacy/scheduled-monitoring.md
Normal file
@@ -0,0 +1,79 @@
|
||||
# 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}"
|
||||
Reference in New Issue
Block a user