"""Registre des déploiements (source de vérité) : ~/dispatch/registry.json.""" import json import os import time from . import config def load(): if os.path.exists(config.REGISTRY): return json.load(open(config.REGISTRY)) return {"updated": None, "gateway": config.GATEWAY, "apps": {}, "history": []} def save(r): r["updated"] = time.strftime("%Y-%m-%dT%H:%M:%S") r["gateway"] = config.GATEWAY tmp = config.REGISTRY + ".tmp" json.dump(r, open(tmp, "w"), indent=2, ensure_ascii=False) os.replace(tmp, config.REGISTRY) def node_of(app): return load()["apps"].get(app, {}).get("node") def apps_on(alias): return [a for a, v in load()["apps"].items() if v.get("node") == alias] def set_app(app, **fields): r = load() cur = r["apps"].get(app, {}) cur.update(fields) cur["updated"] = time.strftime("%Y-%m-%dT%H:%M:%S") r["apps"][app] = cur save(r) def remove_app(app, note=""): r = load() if app in r["apps"]: r["history"].append({"ts": time.strftime("%Y-%m-%dT%H:%M:%S"), "app": app, "event": "removed", "was": r["apps"][app], "note": note}) del r["apps"][app] save(r) def log(app, event, **kw): r = load() r["history"].append(dict(ts=time.strftime("%Y-%m-%dT%H:%M:%S"), app=app, event=event, **kw)) r["history"] = r["history"][-500:] save(r)