from prepare import g
import datetime,json,re,subprocess
R=g.R
since=datetime.datetime.fromtimestamp((R/'runtime.json').stat().st_ctime-300,datetime.timezone.utc).isoformat()
until=datetime.datetime.now(datetime.timezone.utc).isoformat()
events=subprocess.run(['docker','events','--since',since,'--until',until,'--filter','container=contextra-analytics-1','--format','{{json .}}'],capture_output=True,text=True,timeout=15)
out={'events':[],'fatal_lines':[]}
for line in events.stdout.splitlines():
    e=json.loads(line);action=e.get('Action','')
    if action in ['die','start','restart','kill','stop','oom']:
        out['events'].append({'action':action,'time':e.get('time'),'exit_code':e.get('Actor',{}).get('Attributes',{}).get('exitCode'),'signal':e.get('Actor',{}).get('Attributes',{}).get('signal')})
log=subprocess.run(['docker','logs','--timestamps','--tail','300','contextra-analytics-1'],capture_output=True,text=True,timeout=15)
for line in (log.stdout+log.stderr).splitlines():
    if any(s in line for s in ['terminate called','Assertion','what():','Fatal Python error','Aborted','Segmentation fault']):
        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['fatal_lines'].append(line[:800])
c=next(x for x in g.inspect_all() if x['Name']=='/contextra-analytics-1')
out['analytics']={'state':c['State']['Status'],'restart':c['RestartCount'],'oom':c['State']['OOMKilled'],'image':c['Image']}
out['gpu_used_mib']=int(g.shell(['nvidia-smi','--id=0','--query-gpu=memory.used','--format=csv,noheader,nounits']).strip())
(R/'readback.json').write_text(json.dumps(out,indent=2));print(json.dumps(out,indent=2))
