a7971c4822
gates / gates (push) Successful in 25s
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0159rPz1ZhFKsS53msqPYxtS
46 lines
2.4 KiB
Python
46 lines
2.4 KiB
Python
"""Night 4 on 9202 — accident: a POWER CUT (pct stop, a hard stop of the guest, from the host) while romm's automatic
|
|
step is in `verifying`; then pct start. The controller log is saved when the accident is ARMED (R-683)."""
|
|
import sys, time, subprocess, datetime, json, os
|
|
import walk as w
|
|
w.login()
|
|
EVD = w.EV + "/C/night4-power"
|
|
os.makedirs(EVD, exist_ok=True)
|
|
start = datetime.datetime.now() + datetime.timedelta(minutes=2)
|
|
W = (start - datetime.timedelta(minutes=105)).strftime("%H:%M")
|
|
w.say(f"night4: W={W}, leg at {start.strftime('%H:%M')}")
|
|
subprocess.run(["python3", "movewin.py", W, EVD + "/window-moved.txt"], capture_output=True, text=True)
|
|
since = time.strftime("%Y-%m-%dT%H:%M:%SZ", time.gmtime())
|
|
t0 = time.time()
|
|
out = ""
|
|
while time.time() - t0 < 1800:
|
|
out = w.guest(f"docker logs --since {since} felhom-controller 2>&1 | grep -F 'update romm: phase verifying' | tail -1")
|
|
if out.strip():
|
|
break
|
|
time.sleep(1)
|
|
w.say("ARMED: " + out.strip())
|
|
open(EVD + "/controller-before-cut.log", "w").write(w.guest(f"docker logs --since {since} felhom-controller 2>&1"))
|
|
r = subprocess.run(["ssh", "hp", "export LC_ALL=C; date -u +%FT%TZ; pct stop 9202; echo stop_rc=$?; sleep 5; pct start 9202; echo start_rc=$?; date -u +%FT%TZ"], capture_output=True, text=True, timeout=300)
|
|
w.say("POWER CUT: " + r.stdout.replace("\n", " "))
|
|
t1 = time.time()
|
|
st = ""
|
|
while time.time() - t1 < 900:
|
|
time.sleep(10)
|
|
st = w.guest("docker inspect -f '{{.State.Status}} {{.State.Health.Status}}' felhom-controller 2>&1").strip()
|
|
if "running healthy" in st:
|
|
break
|
|
w.say(f"controller after boot: {st} ({round(time.time()-t1)} s)")
|
|
t2 = time.time()
|
|
while time.time() - t2 < 900: # the resumed update must finish (done or undone)
|
|
time.sleep(10)
|
|
rs = w.guest("docker logs felhom-controller 2>&1 | grep -E 'update romm: (DONE|UNDONE)|update romm.*(HOLD|held)' | tail -2")
|
|
if rs.strip():
|
|
break
|
|
w.say("romm after resume: " + rs.strip())
|
|
after = w.guest("docker logs felhom-controller 2>&1 | grep -E 'update-leg|update romm|resum|Resum|interrupted' ")
|
|
open(EVD + "/controller-after-boot.log", "w").write(after)
|
|
w.login()
|
|
subprocess.run(["python3", "c1_state.py", EVD + "/pages-after.json"])
|
|
subprocess.run(["python3", "applines.py", EVD + "/app-lines.txt"])
|
|
subprocess.run(["python3", "seedread.py", "read", "night4-power (after the cut and the resume)"])
|
|
open(EVD + "/runner.log", "w").write("\n".join(w.LOG) + "\n")
|