#!/usr/bin/env python3
import argparse,json,pathlib,urllib.parse,re
p=argparse.ArgumentParser();p.add_argument('--artifacts',required=True);p.add_argument('--output',required=True);a=p.parse_args();r=pathlib.Path(a.artifacts)
events=[json.loads(x) for x in (r/'driver.jsonl').read_text().splitlines()];start=[x for x in events if x['event']=='native-suspended'][-1]['at'];start=start.replace(' ','T').split('+')[0]+'Z'
requests=[];sessions={}
for line in (r/'network.jsonl').read_text().splitlines():
 x=json.loads(line)
 if x['at']<start or x['event']!='request':continue
 url=urllib.parse.urlsplit(x['url']).path
 if not(url=='/api/event' or url.startswith('/api/session/')):continue
 for sid in re.findall('ses_[^/]+',url):
  if sid not in sessions:sessions[sid]='session-'+str(len(sessions)+1)
  url=url.replace(sid,sessions[sid])
 requests.append({'at':x['at'],'method':x['method'],'path':url,'historyDelayMs':x['delayMs']})
last=[x for x in events if x['event'] in ['native-suspended','native-resumed']][-2:]
statuses=[x for x in events if x['event']=='app-status']
out={'timing':last,'requests':requests,'appStatus':statuses[-1] if statuses else None}
native=r/'native-result.json'
if native.exists():out['nativeStatus']=json.loads(native.read_text())
pathlib.Path(a.output).write_text(json.dumps(out,indent=2))
