6.1 KiB
6.1 KiB
TODO — Évolutions agents autonomes
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 !reports pour afficher, PENDING_CONFIG pour confirmation modification
- Agent1 : planifier les demandes de rapport selon ce fichier (APScheduler)
- 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 : !tasks pour afficher, PENDING_CONFIG pour modification avec confirmation
- 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)
- 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 dansagents_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
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=1pour ne pas perdre les messages offline
4. Mode pause / veille par agent
Topic MQTT : agents/<name>/control
- Chaque agent2_* : s'abonner à
agents/<name>/control - pause → worker stoppé, resume → worker relancé
- Agent1 en veille : n'accepte que
!agentsON/!agentON agent1
Commandes XMPP (sylvain → agent1)
!agentOFF <nom>/!agentON <nom>!agentsOFF/!agentsON!agentOFF agent1/!agentON agent1(veille agent1 uniquement)
5. Rapports journaliers
- Chaque agent2_* : stats depuis queue.db, envoi sur
agents/daily_report - Agent1 : souscription
agents/daily_report, stockage en mémoire skills/daily_report.py: DAILY_REPORT: [agent]- APScheduler : sollicitation agents à 22:00/22:05/22:10, rapport journalier à 22:30
6. Ordre d'implémentation suggéré
blackout_hours.json+work_hoursdans registry (simple, peu de code)- File d'attente SQLite + mode pause dans chaque agent2_*
- Commandes
!agentON/OFFdans agent1 reports_schedule.json+ stats + rapport journaliertasks_schedule.json+ gestion par agent1 avec confirmation- Tests end-to-end
6. Gestion des mises à jour depuis les dépôts git
Commandes XMPP (sylvain → agent1)
| Commande | Effet |
|---|---|
!agentUPDATE <nom> |
Vérifie si une mise à jour est disponible sur le dépôt git de l'agent (git fetch + comparaison) |
!agentsUPDATE |
Vérifie les dépôts de tous les agents enregistrés |
!agentUPGRADE <nom> |
Tire les modifications (git pull) + redémarre le service systemd de l'agent |
!agentsUPGRADE |
Git pull + restart de tous les agents |
Comportement attendu
!agentUPDATE: affiche le résultat degit fetch+git log HEAD..origin/main --oneline- Réponse : "Mise à jour disponible : X commit(s)" ou "Déjà à jour"
!agentUPGRADE:git pull origin maindans le répertoire de l'agentsystemctl restart <service_name>pour relancer le service- Confirmation ou erreur envoyée via XMPP
- Attendre que le service soit de nouveau EN LIGNE (statut MQTT) avant de confirmer
Informations nécessaires par agent
Ajouter dans agents_registry.json :
"agent2_debian13": {
"install_path" : "/opt/agent2_debian13",
"service_name" : "agent2_debian13",
"git_branch" : "main"
}
Fichiers à modifier / créer
| Fichier | Action |
|---|---|
config/agents_registry.json |
Ajouter install_path, service_name, git_branch par agent |
agent1.py |
Gérer !agentUPDATE/UPGRADE et !agentsUPDATE/UPGRADE |
skills/agent_update.py |
Créer — logique git fetch/pull + systemctl restart |
Points d'attention
- Exécuter
gitetsystemctlvia subprocess (nécessite que agent1 tourne en root ou avec les droits sudo systemctl) - Timeout sur le restart (attendre max 30s que le service remonte)
- Ne pas upgrader agent1 lui-même sans précaution (le processus se couperait)
- Pour
!agentUPGRADE agent1: git pull puissystemctl restart agent(agent1 se redémarre proprement via systemd) - Gérer le cas où
install_pathn'existe pas dans le registre (agent déployé sans cette info) - Proposer
!agentUPGRADEaprès!agentUPDATEsi une mise à jour est disponible
Fichiers impactés
| Fichier | Action |
|---|---|
config/agents_registry.json |
Ajouter work_hours par agent |
config/reports_schedule.json |
Créer |
config/tasks_schedule.json |
Créer |
config/blackout_hours.json |
Créer |
agent1.py |
Commandes !agent*, veille, souscription daily_report, gestion configs |
skills/delegate.py |
Check work_hours + blackout avant délégation |
skills/daily_report.py |
Créer — compilation rapport journalier |
skills/schedule_tasks.py |
Intégrer tasks_schedule.json |
agent2_debian13/agent2_debian13.py |
Queue SQLite, pause/resume, stats, rapport |
agent2_ansible/agent2_ansible.py |
Queue SQLite, pause/resume, stats, rapport |
agent2_deploy/agent2_deploy.py |
Queue SQLite, pause/resume, stats, rapport |