from ops import *
import sys
start=json.loads((HERE/'two-intent.json').read_text())['wall_ms']/1000
sql="""SELECT json_build_object('scenario',payload->>'scenario','camera',payload->>'cameraId',
 'state',artifact_state,'delivery',delivery_state,'http',http_status,'error',error,'delivery_error',delivery_error,
 'event',event_id,'run',payload->>'runId','seq',payload->>'frameSeq','pts',payload->>'ptsNs',
 'objectRef',payload->>'objectRef','relative',relative_path,'media',media)
 FROM contextra_event_artifacts WHERE created_at>=%s ORDER BY created_at LIMIT 50;""" % start
data=cmd(['docker','exec','-i','contextra-postgresql-1','sh','-c','exec psql -X -qAt -U "$POSTGRES_USER" -d "$POSTGRES_DB"'],input=sql,timeout=10)
rows=[json.loads(s) for s in data.splitlines() if s.strip()]
for r in rows:
    root=Path('/data/contextra/artifacts')/r.pop('relative')
    r['files']={name:dict(exists=(root/name).is_file(),bytes=(root/name).stat().st_size if (root/name).is_file() else 0)
                for name in ('clip.mp4','thumbnail.jpg')}
save('artifact-evidence'+('-'+sys.argv[1] if len(sys.argv)>1 else '')+'.json',rows)
print(json.dumps(dict(events=len(rows),scenarios=sorted(set(r['scenario'] for r in rows)),
    ready=sum(r['state']=='READY' for r in rows),sent200=sum(r['delivery']=='SENT' and r['http']==200 for r in rows),
    failures=[{'state':r['state'],'error':r['error'],'delivery':r['delivery']} for r in rows if r['state']!='READY'],
    stop_partial=sum(r['media'].get('captureReason')=='STOP_PARTIAL' for r in rows))),flush=True)
