from ops import *
summary=json.loads((HERE/'summary-v2.json').read_text());extra=[]
for s in summary:
    stage=json.loads((HERE/f"scale/stage-{s['level']}.json").read_text());a,b=stage['samples'][0],stage['samples'][-1]
    rows=[]
    for camera,bc in b['channels'].items():
        ac=a['channels'][camera]
        for p,pv in bc['providers'].items():
            x=ac['providers'][p];ap=x['metadata_path'];bp=pv['metadata_path']
            old=ap['event_cooldown']['counts'];new=bp['event_cooldown']['counts']
            rows.append(dict(camera=camera,provider=p,
                cooldown={k:new[k]-old.get(k,0) for k in new},events_created=bp.get('events_created',0)-ap.get('events_created',0),
                ipc={k:pv['publisher_metrics'].get(k,0)-x['publisher_metrics'].get(k,0) for k in ('relayed','replaced','dropped')},
                artifact_metrics_before=ap.get('artifacts'),artifact_metrics_after=bp.get('artifacts')))
    extra.append(dict(level=s['level'],lanes=rows,retention=stage['retention']))
save('cooldown-retention-sot.json',extra)
print(json.dumps([dict(level=s['level'],events=sum(r['events_created'] for r in s['lanes']),
    suppressed_candidate_checks=sum(v for r in s['lanes'] for k,v in r['cooldown'].items() if k.endswith('_suppressed_candidates')),
    ipc_replaced=sum(r['ipc']['replaced'] for r in s['lanes']),retained={c:v['count'] for c,v in s['retention'].items()}) for s in extra]))
