Files
weval-l99/archi-meeting-pipeline.py
2026-04-13 12:43:21 +02:00

62 lines
2.7 KiB
Python

#!/usr/bin/env python3
import json,urllib.request,ssl,time
ts = time.strftime("%Y-%m-%dT%H:%M:%S")
ctx = ssl._create_unverified_context()
req = urllib.request.Request("https://127.0.0.1/api/architecture-scanner.php", headers={"Host":"weval-consulting.com"})
data = json.loads(urllib.request.urlopen(req, context=ctx, timeout=30).read())
# Handle nested recommendations structure
recs_data = data.get("recommendations", {})
if isinstance(recs_data, dict):
recs = recs_data.get("recommendations", [])
archi_score = recs_data.get("score", data.get("score", "?"))
else:
recs = recs_data if isinstance(recs_data, list) else []
archi_score = data.get("score", "?")
SQUAD = {
"INFRA":{"sq":"infra","lead":"CORTEX"},
"DOCKER":{"sq":"infra","lead":"CORTEX"},
"SECURITY":{"sq":"security","lead":"Dark Tools"},
"OPTIMIZATION":{"sq":"ia","lead":"WEVIA Master"},
"SCALABILITY":{"sq":"dev","lead":"NonReg"},
"KNOWLEDGE":{"sq":"ia","lead":"DeerFlow"},
"AI":{"sq":"ia","lead":"OpenClaw"},
}
agenda = {"ts":ts,"type":"archi-review","title":"Archi Review "+ts[:10],
"score":archi_score,"total_recs":len(recs),
"items":[],"decisions":[],"actions":[]}
for r in recs:
if not isinstance(r, dict): continue
cat = r.get("category","INFRA")
sev = r.get("severity","info")
sq = SQUAD.get(cat, {"sq":"infra","lead":"CORTEX"})
agenda["items"].append({"severity":sev,"category":cat,"title":r.get("title",""),
"squad":sq["sq"],"lead":sq["lead"],"status":"pending"})
dl = "24h" if sev=="critical" else ("7j" if sev=="warning" else "30j")
dec = "FIX IMMEDIAT" if sev=="critical" else ("PLANIFIER" if sev=="warning" else "BACKLOG")
agenda["decisions"].append({"item":r.get("title",""),"decision":dec,
"assigned_to":sq["lead"],"deadline":dl})
if sev in ["critical","warning"]:
agenda["actions"].append({"action":r.get("title",""),"agent":sq["lead"],
"cmd":r.get("fix_cmd",""),"status":"pending"})
# Add platform health summary
agenda["health"] = {
"score": archi_score,
"servers": len(data.get("servers",[])),
"docker": len(data.get("docker",[])),
"nginx_domains": len(data.get("nginx_domains",[])),
"applications": len(data.get("applications",[])),
"crons_total": data.get("crons",{}).get("s204_total",0),
"status": "GREEN" if not any(r.get("severity")=="critical" for r in recs) else "RED"
}
json.dump(agenda, open("/var/www/html/api/meeting-archi-agenda.json","w"), indent=2, ensure_ascii=False)
print("AGENDA: %d items, %d decisions, %d actions | Score %s | Status %s" % (
len(agenda["items"]),len(agenda["decisions"]),len(agenda["actions"]),
archi_score, agenda["health"]["status"]))