Files
felhom.eu/documentation/audits/night-2026-10-28/bench/tools/edge_run.py
T

26 lines
2.3 KiB
Python

#!/usr/bin/env python3
"""edge_run.py <app> <EVDIR> <svc=FROMref,...> <svc=TOref,...> [soak] — one upgrade-test.py edge on the bench whose FROM is
NOT the template (an older tag -> the current pin), through upgrade-test.py's own run_edge(); log + evidence copied back.
The bench-side runner registers EDGES['MV-<app>'] and calls main(), so the method is the harness's own, unchanged."""
import base64, importlib.util, io, os, sys, tarfile
H = "/mnt/5_hdd/felhom.eu/git/app-catalog-felhom.eu/scripts"
spec = importlib.util.spec_from_file_location("rf", os.path.join(H, "retest-floating.py"))
rf = importlib.util.module_from_spec(spec); sys.path.insert(0, H); spec.loader.exec_module(rf)
app, ev, frm, to = sys.argv[1:5]
soak = sys.argv[5] if len(sys.argv) > 5 else "600"
f = dict(x.split("=", 1) for x in frm.split(",")); t = dict(x.split("=", 1) for x in to.split(","))
py = ("import importlib.util,sys; sys.path.insert(0,'/opt/upg'); s=importlib.util.spec_from_file_location('ut','/opt/upg/upgrade-test.py'); "
"ut=importlib.util.module_from_spec(s); s.loader.exec_module(ut); "
"ut.EDGES['MV-%s']=dict(app=%r, note=%r, frm=%r, to=%r); "
"sys.exit(ut.main(['--soak', %r, 'MV-%s']))" % (app, app, os.environ.get('NOTE', 'older tag -> current pin'), f, t, soak, app))
os.makedirs(ev, exist_ok=True)
coll = os.environ.get('COLLECT') # '<container> <interval> <duration>' -> /opt/upg/MV-<app>-collect.csv beside the run
if coll:
rf.bench("cat > /opt/upg/meili_collect.sh <<'SHEOF'\n%s\nSHEOF\n" % open(os.path.join(os.path.dirname(os.path.abspath(__file__)), '..', 'meili_collect.sh')).read(), timeout=120)
r = rf.bench(("(nohup sh -c \"sleep 90; bash /opt/upg/meili_collect.sh %s\" > /opt/upg/MV-%s-collect.csv 2>&1 < /dev/null &) ; " % (coll, app) if coll else "") + "cd /opt/upg && rm -rf evidence/MV-%s && cat > /opt/upg/edge_run_inner.py <<'PYEOF'\n%s\nPYEOF\n"
"timeout 3300 python3 /opt/upg/edge_run_inner.py > /opt/upg/MV-%s.log 2>&1; echo rc=$?" % (app, py, app), timeout=3500)
print(r.stdout.strip()[-200:], r.stderr.strip()[-300:])
pull = rf.bench("cd /opt/upg && tar czf - MV-%s.log MV-%s-collect.csv edge_run_inner.py evidence/MV-%s 2>/dev/null | base64 -w0" % (app, app, app), timeout=600)
tarfile.open(fileobj=io.BytesIO(base64.b64decode(pull.stdout.strip()))).extractall(ev)
print("evidence ->", ev)