62 lines
2.7 KiB
Python
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"]))
|