import hashlib
from ops import *

cfg=load_config('/workspace/contextra-runtime-config/test-run/medium8-fp16-sharing.yaml')
rt=Runtime(cfg,R);plan=read('plan.json');final=read('final.json');states=rt.states()
assert not final['failure']
original=[r for r in plan['rows'] if r['original']]
a=rt.sample(original);time.sleep(5);b=rt.sample(original)
from tools.stream_benchmark_metrics import summarize
cleanup={};pids=[]
last=json.loads((R/'ascent/summary-16.json').read_text())
for row in plan['rows']:
    sid=row['stream_id'];q=states[sid]
    assert rt.settings(sid)==plan['settings'][sid]
    if row['original']:
        assert q['state']=='running' and not q['metadata_path']['performance']['detail']
        continue
    c=q['last_cleanup'];assert q['state']=='stopped' and q['child_pid'] is None
    assert c['generation']==q['run_generation'] and c['completed'] and c['child_reaped'] and c['writer_released'] and not c['forced']
    cleanup[sid]=c
    pids.append(next(v['pid'] for v in last['rows'] if v['stream_id']==sid))
live=json.loads(cmd(['docker','exec',rt.container,'python3','-c',
    'import sys,pathlib,json;print(json.dumps([x for x in sys.argv[1:] if pathlib.Path("/proc",x).exists()]))',*map(str,pids)]))
assert not live
payloads={}
for row in original:
    key='contextra:metadata:v1:camera:'+hashlib.sha256(row['source_id'].encode()).hexdigest()+':frames'
    values=rt.redis('XREVRANGE',key,'+','-','COUNT','2')
    payloads[row['stream_id']]=values
save('frame-readback-private.json',payloads)
save('readback.json',dict(recovery=summarize([a,b],True),cleanup=cleanup,pids_absent=pids,
    states={s:dict(state=q['state'],pid=q.get('child_pid')) for s,q in states.items()},
    settings_preserved=True,detail_off=True,model=rt.triton('v2/models/RFDETRMedium/config')))
print('Readback PASS: original3 running, 13 normal cleanup and PID absent; settings unchanged')
