from prepare import g
import json,re,subprocess,pathlib
env=g.load_env_file(str(g.ENV));overlay=pathlib.Path(env['CONTEXTRA_RUNTIME_STATE_ROOT'])/'streams_runtime.yaml'
s=g.yaml.safe_load(overlay.read_text())['added'][0]
log=subprocess.run(['docker','logs','--timestamps','--tail','350','contextra-analytics-1'],capture_output=True,text=True,timeout=15)
out={'lines':[]}
for line in (log.stdout+log.stderr).splitlines():
    if not any(k in line.lower() for k in ['error','warn','failed','timeout','not-linked','not-negotiated','connecting','could not','first_frame','cleanup']):continue
    for key in ['stream_id','uri']:
        if s.get(key):line=line.replace(str(s[key]),'<redacted>')
    line=re.sub(r'(?:rtsp|https?|redis|postgresql)://\S+','<redacted-url>',line)
    line=re.sub(r'\b(?:\d{1,3}\.){3}\d{1,3}\b','<redacted-address>',line)
    out['lines'].append(line[:900])
out['lines']=out['lines'][-30:]
c=next(x for x in g.inspect_all() if x['Name']=='/contextra-analytics-1')
out.update(analytics_state=c['State']['Status'],restart_count=c['RestartCount'],restart_policy=c['HostConfig']['RestartPolicy'],
           gpu_used_mib=int(g.shell(['nvidia-smi','--id=0','--query-gpu=memory.used','--format=csv,noheader,nounits']).strip()))
(g.R/'readback.json').write_text(json.dumps(out,indent=2));print(json.dumps(out,indent=2))
