import importlib.util,json,os
from pathlib import Path
ROOT=Path(__file__).resolve().parent
os.umask(0o077)
spec=importlib.util.spec_from_file_location('remote',ROOT.parent/'2026-11-01_icerti-fight-r5_r01/remote.py')
r=importlib.util.module_from_spec(spec);spec.loader.exec_module(r)
code='''import json,sys,subprocess,shutil,hashlib,base64
from pathlib import Path
d=json.loads(Path('/etc/contextra-maintenance/server.json').read_text());assert d['server']=='icerti-ai2'
assert shutil.disk_usage('/').free>=15*1024**3
sys.path.insert(0,d['paths']['tools']);import compose_backend as cb
rows={x['Config']['Labels']['com.docker.compose.service']:x for x in cb.containers()}
script="""import os,json,base64,hashlib,urllib.request,yaml
from pathlib import Path
t=Path(os.environ['CONTEXTRA_CONTROL_TOKEN_FILE']).read_text().strip()
q=urllib.request.Request('http://127.0.0.1:5000/internal/secure-control/runtime-status',headers={'Authorization':'Bearer '+t})
with urllib.request.urlopen(q,timeout=5) as r:streams=json.load(r)['streams']
s=next(s for s in streams if str(s['cameraId'])=='24')
with urllib.request.urlopen('http://127.0.0.1:5000/api/v1/streams/'+s['streamId']+'/settings',timeout=5) as r:settings=json.load(r)
names=['app/fight_r5/runtime.py','app/fight_runtime.py','app/multi_provider_results.py','app/det_result_path.py']
files={n:base64.b64encode((Path('/opt/contextra')/n).read_bytes()).decode() for n in names}
configs={}
for k in ('CONTEXTRA_CONTROL_TEMPLATE_FILE','STREAMS_CONFIG_PATH','STREAMS_RUNTIME_PATH'):
 p=Path(os.environ[k]);v=json.loads(p.read_text()) if p.suffix=='.json' else yaml.safe_load(p.read_text());items=[v] if k=='CONTEXTRA_CONTROL_TEMPLATE_FILE' else v.get('added',v.get('streams',[]))
 configs[k]=dict(sha256=hashlib.sha256(p.read_bytes()).hexdigest(),channels=[dict(camera=x.get('camera_id',x.get('source_id')),fight=x.get('fight'),cooldown=x.get('event_cooldowns')) for x in items])
print(json.dumps(dict(files=files,settings={k:v.get('fight') if isinstance(v,dict) else v for k,v in settings.items() if k in ('effective','configured','restart_pending')},configs=configs,camera24=s)))
"""
p=subprocess.run(['docker','exec','-i',rows['analytics']['Id'],'python3','-B','-'],input=script.encode(),capture_output=True,timeout=25)
assert p.returncode==0,p.stderr.decode()[-500:]
v=json.loads(p.stdout);v['images']={k:x['Image'] for k,x in rows.items()};v['free_root']=shutil.disk_usage('/').free
print(json.dumps(v))
'''
data=json.loads(r.python(code,sudo=True,timeout=40))
(ROOT/'preflight.json').write_text(json.dumps(data,indent=2))
print(json.dumps({'camera24':data['settings'],'images':data['images'],'configs':data['configs']},ensure_ascii=False))
