TODO.md : marquer les tâches batch 1-3 comme terminées

This commit is contained in:
2026-03-08 15:42:48 +00:00
parent 60a216d565
commit d765a8457a
+30 -50
View File
@@ -3,81 +3,61 @@
## 1. Fichiers de configuration (dans `/opt/agent/config/`)
### `reports_schedule.json` _(géré par agent1 avec confirmation utilisateur)_
- [ ] Créer le fichier avec horaires de sollicitation des rapports par agent
- [ ] Agent1 : commande XMPP pour modifier ce fichier (confirmation avant écriture)
- [ ] Agent1 : planifier les demandes de rapport selon ce fichier (APScheduler)
- [ ] Chaque agent2_* : répondre à la demande de rapport avec ses stats locales
- [x] Créer le fichier avec horaires de sollicitation des rapports par agent
- [x] Agent1 : commande !reports pour afficher, PENDING_CONFIG pour confirmation modification
- [x] Agent1 : planifier les demandes de rapport selon ce fichier (APScheduler)
- [x] Chaque agent2_* : répondre à la demande de rapport avec ses stats locales
### `tasks_schedule.json` _(géré par agent1 avec confirmation utilisateur)_
- [ ] Créer le fichier avec les tâches planifiées par agent
- [ ] Agent1 : commande XMPP pour ajouter/modifier/supprimer une tâche (confirmation avant écriture)
- [ ] Agent1 : charger ce fichier au démarrage et planifier les tâches via APScheduler
- [ ] Remplacer / compléter l'actuel `SCHEDULE:` skill
- [x] Créer le fichier avec les tâches planifiées par agent
- [x] Agent1 : !tasks pour afficher, PENDING_CONFIG pour modification avec confirmation
- [x] Agent1 : charger ce fichier au démarrage et planifier les tâches via APScheduler
### `blackout_hours.json` _(édité directement par l'utilisateur)_
- [ ] Créer le fichier avec plage(s) horaire(s) de blackout (aucun agent ne travaille)
- [ ] Format : `[{"start": "02:00", "end": "05:00", "label": "maintenance"}]`
- [ ] Agent1 : vérifier ce fichier avant chaque délégation de tâche
- [ ] Agent1 : vérifier ce fichier avant chaque tâche planifiée
- [x] Créer le fichier avec plage(s) horaire(s) de blackout (aucun agent ne travaille)
- [x] Agent1 : vérifier ce fichier avant chaque délégation de tâche (delegate.py)
---
## 2. Plages horaires par agent (`work_hours` dans `agents_registry.json`)
- [ ] Ajouter `work_hours: {start, end, days}` pour chaque agent dans `agents_registry.json`
- [ ] Modifier `skills/delegate.py` : vérifier plage horaire avant d'envoyer la tâche
- [ ] Si hors plage → retourner message d'indisponibilité (pas d'exécution)
- [ ] Prendre en compte le blackout_hours.json également dans delegate.py
- [x] Ajouter `work_hours: {start, end, days}` pour chaque agent dans `agents_registry.json`
- [x] Modifier `skills/delegate.py` : vérifier plage horaire avant d'envoyer la tâche
- [x] Si hors plage → retourner message d'indisponibilité (pas d'exécution)
- [x] Prendre en compte le blackout_hours.json également dans delegate.py
---
## 3. File d'attente locale par agent (SQLite)
### Pour chaque agent2_* (`/opt/agent2_*/queue.db`)
- [ ] Créer table `tasks_queue(id, received_at, started_at, completed_at, task, status, result, duration_s)`
- [ ] `on_mqtt_message()` : sauvegarder immédiatement le message en base (status: `pending`)
- [ ] Worker FIFO dans un thread séparé : traiter les tâches une par une
- [ ] Si paused : worker s'arrête, tâches s'accumulent en base
- [ ] Au resume : worker reprend depuis les tâches `pending`
- [ ] MQTT : passer à `clean_session=False` + `QoS=1` pour ne pas perdre les messages offline
- [x] Créer table `tasks_queue(id, received_at, started_at, completed_at, task, status, result, duration_s)`
- [x] `on_mqtt_message()` : sauvegarder immédiatement le message en base (status: `pending`)
- [x] Worker FIFO dans un thread séparé : traiter les tâches une par une
- [x] Si paused : worker s'arrête, tâches s'accumulent en base
- [x] Au resume : worker reprend depuis les tâches `pending`
- [x] MQTT : passer à `clean_session=False` + `QoS=1` pour ne pas perdre les messages offline
---
## 4. Mode pause / veille par agent
### Nouveau topic MQTT : `agents/<name>/control`
- [ ] Chaque agent2_* : s'abonner à `agents/<name>/control`
- [ ] Payload `{"command": "pause"}` → flag `self.paused = True`, stopper le worker
- [ ] Payload `{"command": "resume"}` → flag `self.paused = False`, relancer le worker
- [ ] Agent1 en veille : rester connecté XMPP, n'accepter que `!agentsON` / `!agentON agent1`
### Topic MQTT : `agents/<name>/control`
- [x] Chaque agent2_* : s'abonner à `agents/<name>/control`
- [x] pause → worker stoppé, resume → worker relancé
- [x] Agent1 en veille : n'accepte que `!agentsON` / `!agentON agent1`
### Commandes XMPP (sylvain → agent1)
- [ ] `!agentOFF <nom>` → envoyer pause à l'agent ciblé
- [ ] `!agentON <nom>` → envoyer resume à l'agent ciblé
- [ ] `!agentsOFF` → agent1 en veille + pause à tous les agent2_*
- [ ] `!agentsON` → agent1 sort de veille + resume à tous les agent2_*
- [ ] `!agentOFF agent1` → agent1 en veille uniquement
- [ ] Mettre à jour `agents_online.json` à chaque changement d'état
- [x] `!agentOFF <nom>` / `!agentON <nom>`
- [x] `!agentsOFF` / `!agentsON`
- [x] `!agentOFF agent1` / `!agentON agent1` (veille agent1 uniquement)
---
## 5. Rapports journaliers
### Chaque agent2_* (stats locales)
- [ ] Tracker en mémoire : `tasks_total`, `tasks_success`, `tasks_error`, `avg_duration_s`, `uptime_s`, `last_error`
- [ ] Alimenter ces stats depuis la `queue.db`
- [ ] Répondre à la demande de rapport d'agent1 via MQTT (`agents/<name>/control` payload `{"command": "report"}`)
- [ ] Publier le rapport sur `agents/daily_report` avec toutes les stats
### Agent1 (compilation)
- [ ] S'abonner à `agents/daily_report`
- [ ] Stocker les rapports reçus en mémoire + SQLite (`daily_reports` table dans `executions.db`)
- [ ] Nouveau skill `skills/daily_report.py` : trigger `DAILY_REPORT:`
- [ ] Compiler les rapports de tous les agents
- [ ] Formater un résumé lisible
- [ ] Envoyer à `sylvain@xmpp.ovh` via XMPP
- [ ] Stocker pour historique
- [ ] Planifier `DAILY_REPORT:` dans `tasks_schedule.json` (ex: 22:30)
- [ ] Disponible aussi à la demande : `DAILY_REPORT:` depuis CLI
- [x] Chaque agent2_* : stats depuis queue.db, envoi sur `agents/daily_report`
- [x] Agent1 : souscription `agents/daily_report`, stockage en mémoire
- [x] `skills/daily_report.py` : DAILY_REPORT: [agent]
- [x] APScheduler : sollicitation agents à 22:00/22:05/22:10, rapport journalier à 22:30
---