Un minuteur horaire sur le runner du site joue les plans de lecture et consigne l ecart ; la sonde lit le constat, et signale un constat perime. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
38 lines
1.8 KiB
Django/Jinja
38 lines
1.8 KiB
Django/Jinja
#!/bin/bash
|
|
# GENERE par Set-OPS (role serveur_ops_site). Ne pas editer a la main.
|
|
#
|
|
# SONDE « fabric » — le pare-feu Proxmox, le SDN, la frontiere et les acces WireGuard
|
|
# disent-ils encore ce que le plan dit ?
|
|
#
|
|
# Contrat : docs/supervision-conception.md — une ligne, 0/1/2/3. Elle ne JOUE pas les
|
|
# plans (trop lents pour une sonde) : elle lit le constat du minuteur
|
|
# `setops-conformite-fabric`. Un constat trop VIEUX est une panne a part entiere : sans
|
|
# lui, un minuteur mort laisserait la derniere bonne nouvelle au vert pour toujours.
|
|
set -uo pipefail
|
|
|
|
python3 - {{ serveur_ops_site_conformite_etat }} {{ serveur_ops_site_conformite_age_max_h }} <<'EOF'
|
|
import json, sys, time
|
|
etat, age_max = sys.argv[1], int(sys.argv[2])
|
|
try:
|
|
doc = json.load(open(etat))
|
|
except (OSError, ValueError):
|
|
print(f"Aucun constat lisible ({etat}) : le minuteur setops-conformite-fabric a-t-il tourne ?")
|
|
sys.exit(2)
|
|
age_h = (time.time() - doc["horodatage"]) / 3600
|
|
if age_h > age_max:
|
|
print(f"Constat PERIME : {age_h:.0f} h (seuil {age_max} h). Le minuteur ne mesure plus.")
|
|
sys.exit(2)
|
|
plans = doc["plans"]
|
|
illisibles = [p["plan"] for p in plans if p["rc"] != 0]
|
|
ecarts = [p for p in plans if p["rc"] == 0 and p["a_faire"] > 0]
|
|
perf = " ".join(f"{p['plan']}={p['a_faire'] if p['rc'] == 0 else -1}" for p in plans)
|
|
if illisibles:
|
|
print(f"Plan(s) illisible(s) : {', '.join(illisibles)} — la fabric n'a pas pu etre relue. | {perf}")
|
|
sys.exit(3)
|
|
if ecarts:
|
|
quoi = "; ".join(f"{p['plan']} : {p['a_faire']} ({(p['detail'] or ['?'])[0][:60]})" for p in ecarts)
|
|
print(f"ECART avec le plan — {quoi}. Relire le plan, puis appliquer ou corriger. | {perf}")
|
|
sys.exit(1)
|
|
print(f"Fabric conforme au plan ({len(plans)} plans, constat de {age_h * 60:.0f} min). | {perf}")
|
|
sys.exit(0)
|
|
EOF
|