diff --git a/ansible/roles/hermes_auto_improve/handlers/main.yml b/ansible/roles/hermes_auto_improve/handlers/main.yml index e8f1d3a..47ed868 100644 --- a/ansible/roles/hermes_auto_improve/handlers/main.yml +++ b/ansible/roles/hermes_auto_improve/handlers/main.yml @@ -5,6 +5,10 @@ state: restarted daemon_reload: true +- name: Reload systemd daemon + ansible.builtin.systemd: + daemon_reload: true + - name: Reload nftables ansible.builtin.service: name: nftables diff --git a/ansible/roles/hermes_auto_improve/tasks/main.yml b/ansible/roles/hermes_auto_improve/tasks/main.yml index fc458d9..195de05 100644 --- a/ansible/roles/hermes_auto_improve/tasks/main.yml +++ b/ansible/roles/hermes_auto_improve/tasks/main.yml @@ -47,3 +47,24 @@ state: started daemon_reload: true +- name: Deploy daily service (oneshot — analyse complète) + ansible.builtin.template: + src: hermes-auto-improve-daily.service.j2 + dest: /etc/systemd/system/hermes-auto-improve-daily.service + mode: '0644' + notify: Reload systemd daemon + +- name: Deploy daily timer (22h00) + ansible.builtin.template: + src: hermes-auto-improve-daily.timer.j2 + dest: /etc/systemd/system/hermes-auto-improve-daily.timer + mode: '0644' + notify: Reload systemd daemon + +- name: Enable and start daily timer + ansible.builtin.systemd: + name: hermes-auto-improve-daily.timer + enabled: true + state: started + daemon_reload: true + diff --git a/ansible/roles/hermes_auto_improve/templates/hermes-auto-improve-daily.service.j2 b/ansible/roles/hermes_auto_improve/templates/hermes-auto-improve-daily.service.j2 new file mode 100644 index 0000000..5057a7c --- /dev/null +++ b/ansible/roles/hermes_auto_improve/templates/hermes-auto-improve-daily.service.j2 @@ -0,0 +1,14 @@ +[Unit] +Description=Hermes Auto-Improve — Analyse quotidienne complète (tous les docs) +After=network-online.target hermes-agent.service +Wants=network-online.target + +[Service] +Type=oneshot +ExecStart=/usr/local/bin/hermes-auto-improve --all +ExecStartPost=/usr/local/bin/hermes-auto-improve --daily-pr +TimeoutSec=7200 +Environment=HOME=/root +StandardOutput=journal +StandardError=journal +SyslogIdentifier=hermes-auto-improve-daily diff --git a/ansible/roles/hermes_auto_improve/templates/hermes-auto-improve-daily.timer.j2 b/ansible/roles/hermes_auto_improve/templates/hermes-auto-improve-daily.timer.j2 new file mode 100644 index 0000000..377988e --- /dev/null +++ b/ansible/roles/hermes_auto_improve/templates/hermes-auto-improve-daily.timer.j2 @@ -0,0 +1,10 @@ +[Unit] +Description=Hermes Auto-Improve — Timer quotidien 22h00 + +[Timer] +OnCalendar=*-*-* 22:00:00 +Persistent=true +RandomizedDelaySec=300 + +[Install] +WantedBy=timers.target diff --git a/tools/hermes-auto-improve/auto-improve.py b/tools/hermes-auto-improve/auto-improve.py index 6b45a45..2d0502d 100644 --- a/tools/hermes-auto-improve/auto-improve.py +++ b/tools/hermes-auto-improve/auto-improve.py @@ -213,6 +213,7 @@ def main(): parser = argparse.ArgumentParser() parser.add_argument("--daily-pr", action="store_true", help="Créer PR GitHub + résumé journalier") parser.add_argument("--dry-run", action="store_true", help="Analyser sans écrire ni push") + parser.add_argument("--all", action="store_true", help="Analyser tous les fichiers en une passe (ignore MAX_FILES)") parser.add_argument("--subdir", default=None, help="Sous-dossier admin/ (ex: ia, k8s)") args = parser.parse_args() @@ -254,13 +255,16 @@ def main(): if "hermes/builtin" not in str(f) # ne pas analyser ses propres rapports ] - # Rotation : reprend là où il s'est arrêté - todo = [f for f in all_md if str(f) not in state["processed"]] - if not todo: + if args.all: + batch = all_md state["processed"] = [] - todo = all_md - - batch = todo[:MAX_FILES] + else: + # Rotation : reprend là où il s'est arrêté + todo = [f for f in all_md if str(f) not in state["processed"]] + if not todo: + state["processed"] = [] + todo = all_md + batch = todo[:MAX_FILES] results = [] # ── Analyse ─────────────────────────────────────────────────── diff --git a/tools/hermes-auto-improve/trigger-server.py b/tools/hermes-auto-improve/trigger-server.py index 5e7cb0a..8a96a2d 100644 --- a/tools/hermes-auto-improve/trigger-server.py +++ b/tools/hermes-auto-improve/trigger-server.py @@ -63,7 +63,7 @@ def run_script(extra_args: list = None): with open(LOG_FILE, "a") as log: log.write(f"\n=== {datetime.now().isoformat()} — {' '.join(cmd)} ===\n") result = subprocess.run( - cmd, capture_output=True, text=True, timeout=600 + cmd, capture_output=True, text=True, timeout=7200 ) log.write(result.stdout) if result.stderr: