spb/maclustr-dispatch
Public
1"""Registre des déploiements (source de vérité) : ~/dispatch/registry.json."""2import json3import os4import time5from . import config678def load():9 if os.path.exists(config.REGISTRY):10 return json.load(open(config.REGISTRY))11 return {"updated": None, "gateway": config.GATEWAY, "apps": {}, "history": []}121314def save(r):15 r["updated"] = time.strftime("%Y-%m-%dT%H:%M:%S")16 r["gateway"] = config.GATEWAY17 tmp = config.REGISTRY + ".tmp"18 json.dump(r, open(tmp, "w"), indent=2, ensure_ascii=False)19 os.replace(tmp, config.REGISTRY)202122def node_of(app):23 return load()["apps"].get(app, {}).get("node")242526def apps_on(alias):27 return [a for a, v in load()["apps"].items() if v.get("node") == alias]282930def set_app(app, **fields):31 r = load()32 cur = r["apps"].get(app, {})33 cur.update(fields)34 cur["updated"] = time.strftime("%Y-%m-%dT%H:%M:%S")35 r["apps"][app] = cur36 save(r)373839def remove_app(app, note=""):40 r = load()41 if app in r["apps"]:42 r["history"].append({"ts": time.strftime("%Y-%m-%dT%H:%M:%S"), "app": app, "event": "removed", "was": r["apps"][app], "note": note})43 del r["apps"][app]44 save(r)454647def log(app, event, **kw):48 r = load()49 r["history"].append(dict(ts=time.strftime("%Y-%m-%dT%H:%M:%S"), app=app, event=event, **kw))50 r["history"] = r["history"][-500:]51 save(r)52