feat(hermes-auto-improve): passe quotidienne complète à 22h (tous les docs)

- Ajout systemd timer hermes-auto-improve-daily.timer (22h00, Persistent=true)
- Service oneshot : --all puis --daily-pr (TimeoutSec=7200 pour 28 fichiers)
- auto-improve.py : flag --all qui bypass MAX_FILES et traite tout admin/
- trigger-server.py : timeout 600s → 7200s pour les runs --all via HTTP

La rotation par batch (MAX_FILES=5) reste active pour les triggers n8n
à la demande. Le workflow n8n 30-min doit être désactivé manuellement.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Alkatrazz 2026-06-10 13:38:40 +02:00
parent 3780c90804
commit 7d02efd9fa
6 changed files with 60 additions and 7 deletions

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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 ───────────────────────────────────────────────────

View file

@ -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: