from pathlib import Path
import json,sys
root=Path(__file__).parent/sys.argv[1]
stages=sorted(root.glob('stage-*.json'),key=lambda p:int(p.stem.split('-')[1]))
if stages:
    s=json.loads(stages[-1].read_text());a,b=s['samples'][0],s['samples'][-1];dt=b['t']-a['t'];totals={}
    for camera,row in b['channels'].items():
        for p,v in row['providers'].items():
            old=a['channels'][camera]['providers'][p]
            agg=totals.setdefault(p,dict(completed=0.,sent=0.,min_sent=100.,training_skip=0,candidate_checks=0,expired=0))
            completed=(v['metadata_path']['providers'][p]['responses']-old['metadata_path']['providers'][p]['responses'])/dt
            sent=(v['publisher_metrics'].get('sent_frames',0)-old['publisher_metrics'].get('sent_frames',0))/dt
            agg['completed']+=completed/s['level'];agg['sent']+=sent/s['level'];agg['min_sent']=min(agg['min_sent'],sent)
            agg['expired']+=v['metadata_path'].get('completed_queue_expired',0)-old['metadata_path'].get('completed_queue_expired',0)
            t0=(old['metadata_path'].get('artifacts') or {}).get('training') or {};t1=(v['metadata_path'].get('artifacts') or {}).get('training') or {}
            agg['training_skip']+=t1.get('early_interval_skip',0)-t0.get('early_interval_skip',0)
            agg['candidate_checks']+=t1.get('candidate_checks',0)-t0.get('candidate_checks',0)
    print(json.dumps(dict(last_complete=s['level'],seconds=dt,providers=totals)))
path=root/'journal.jsonl'
if path.exists():
    print('\n'.join(path.read_text().splitlines()[-2:]))
