Files
felhom.eu/documentation/audits/ladder-2026-09-24/tools/liveC660b.py
T

27 lines
1.1 KiB
Python

import sys, time, re, html as H, json
sys.path.insert(0, ".")
import walk as w
w.login()
w.deploy("actualbudget", "budget-c660b")
w.wait_app("budget-c660b", "/", tries=40, delay=3)
t0 = time.strftime("%Y-%m-%dT%H:%M:%SZ", time.gmtime())
w.say("out-of-band stop: " + w.guest("docker stop actualbudget 2>&1").strip())
seen = []
for i in range(20):
time.sleep(5)
h = H.unescape(w.page("/"))
txt = re.sub(r"\s+", " ", re.sub("<[^>]+>", " ", h))
for name in ("actualbudget", "Actual", "nextcloud", "Nextcloud", "gokapi", "Gokapi"):
pass
m = re.findall(r"(nem fut[^.]{0,200})", txt)
c, d = w.ctl("GET", "/api/debug/logs?level=DEBUG&lines=6000")
ents = ((d.get("data") or {}).get("entries") or [])
ev = [e["timestamp"] + " " + e["message"] for e in ents if e.get("timestamp", "") >= t0 and "app_start_failed" in e["message"]]
if m or ev:
seen.append({"t": i * 5, "banner": m[:3], "events": ev})
w.say(f"+{i*5}s banner={m[:3]} events={len(ev)}")
if ev and m:
break
json.dump(seen, open("../partB/06-r660-control-banner.json", "w"), indent=2, ensure_ascii=False)
w.remove("actualbudget")