from ops import *
import sys
sys.path.insert(0,str(REPO))
from app.artifact_diagnostics import StderrTail
mode=sys.argv[1];label=sys.argv[2] if len(sys.argv)>2 else mode
assert mode in ('A','B') and label.replace('-','').isalnum()
assert not inspect('contextra-ai-gateway-1')['State']['Running']
assert all(r['state']=='stopped' and not r.get('child_pid') for r in api('/api/v1/streams')['streams'])
if mode=='B':
    prior=json.loads((HERE/'A'/'result.json').read_text())
    assert prior['measurement']=='PASS' and prior['reaped'] and prior['slots_released']
env=dict(x.split('=',1) for x in inspect('contextra-analytics-1')['Config']['Env'])
remote='/tmp/codex/ltb1021/'+HERE.name+'/'+label
save(label+'-intent.json',dict(mode=mode,seconds=30,image=inspect('contextra-analytics-1')['Image']))
args=['docker','exec','-w','/opt/contextra','contextra-analytics-1','timeout','--signal=TERM','--kill-after=35','180',
      'python3','-B','-m','tools.provider_process_compare','--execute','--mode',mode,
      '--config',env['STREAMS_RUNTIME_PATH'],'--output',remote]
p=subprocess.Popen(args,stdout=subprocess.PIPE,stderr=subprocess.STDOUT)
tail=StderrTail(p.stdout,32768)
p.wait(timeout=230)
save(label+'-log.json',dict(returncode=p.returncode,tail=tail.finish()))
cmd(['docker','cp','contextra-analytics-1:'+remote,str(HERE/label)],timeout=30)
d=json.loads((HERE/label/'result.json').read_text())
print(json.dumps({k:d.get(k) for k in ('mode','measurement','error','reaped','slots_released')}))
assert d['reaped'] and d['slots_released'],'CLEANUP_FAILED'
if p.returncode:raise SystemExit(1)
