from ops import *
from collections import Counter

trial=json.loads((HERE/'trial-result.json').read_text())
begin=float(trial['begin_wall'])
import uuid
runs=','.join("'"+str(uuid.UUID(r['run_id']))+"'" for r in trial['cleanup']['channels'].values())
sql=f"SELECT coalesce(json_agg(t),'[]') FROM (SELECT event_id, artifact_state, delivery_state, error, attempts, confirmed_at, updated_at, payload->>'scenario' AS scenario, payload->>'cameraId' AS camera FROM contextra_event_artifacts WHERE confirmed_at >= {begin} AND payload->>'runId' IN ({runs}) ORDER BY confirmed_at) t;"
rows=json.loads(cmd(['docker','exec','-i','contextra-postgresql-1','sh','-c',
    'exec psql -X -qAt -U "$POSTGRES_USER" -d "$POSTGRES_DB"'],input=sql,timeout=10))
save('artifacts.json',dict(rows=rows,scope='from trial startup through post-stop snapshot; not just measured30seconds'))
counts=Counter((r['scenario'],r['artifact_state'],r['delivery_state'],r['error']) for r in rows)
print(json.dumps([dict(scenario=k[0],artifact=k[1],delivery=k[2],error=k[3],count=n) for k,n in counts.items()]))
