86c4b9a0d8
gates / gates (push) Successful in 27s
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0159rPz1ZhFKsS53msqPYxtS
27 lines
1.1 KiB
Python
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")
|