from ops import *
import datetime
start=json.loads((HERE/'attempt2'/'trial-result.json').read_text())['stages'][0]['started_wall_ms']/1000
sql="""SELECT json_build_object('event_id',event_id,'scenario',payload->>'scenario','camera',payload->>'cameraId',
 'created_at',created_at,'updated_at',updated_at,'state',artifact_state,'delivery',delivery_state,'http',http_status,
 'error',error,'delivery_error',delivery_error,'relative',relative_path,'media',media)
 FROM contextra_event_artifacts WHERE created_at>=%s ORDER BY created_at LIMIT 2000;""" % start
raw=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 raw.splitlines() if s.strip()]
for row in rows:
    relative=row.pop('relative');root=Path('/data/contextra/artifacts')
    for folder in (root/relative,root/'.staging'/row['event_id'],root/'.staging'/row['event_id']/'ready'):
        path=folder/'render-diagnostic.json'
        if path.exists():row['diagnostic']=json.loads(path.read_text());break
save('artifact-evidence.json',rows)
counts={}
for r in rows:
    key=str(r['camera'])+':'+r['scenario'];c=counts.setdefault(key,dict(events=0,ready=0,failed=0,render_failed=0,sent200=0))
    c['events']+=1;c['ready']+=int(r['state']=='READY');c['failed']+=int(r['state']=='FAILED')
    c['render_failed']+=int(bool(r.get('diagnostic',{}).get('returncode')))
    c['sent200']+=int(r['http']==200 and r['delivery']=='SENT')
save('artifact-summary.json',counts)
print(json.dumps(counts))
