#!/usr/bin/env python3
"""Bounded resource sampler for a task-owned game benchmark process."""
import argparse,json,pathlib,time
import psutil
p=argparse.ArgumentParser();p.add_argument('--server',type=int,required=True);p.add_argument('--backend',type=int,required=True);p.add_argument('--output',required=True);p.add_argument('--seconds',type=int,default=1800);a=p.parse_args()
processes={'server':psutil.Process(a.server),'backend':psutil.Process(a.backend)}
with open(a.output,'w') as out:
 for _ in range(a.seconds*5):
  row={'epoch':time.time(),'host_used_mib':(psutil.virtual_memory().total-psutil.virtual_memory().available)/1024**2,'host_cpu_percent':psutil.cpu_percent(),'network':psutil.net_io_counters()._asdict()}
  try:
   for label,proc in processes.items():
    cpu=proc.cpu_times();mem=proc.memory_full_info()
    row[label]={'cpu_seconds':cpu.user+cpu.system,'rss_mib':mem.rss/1024**2,'pss_mib':getattr(mem,'pss',mem.rss)/1024**2,'fds':proc.num_fds()}
  except psutil.NoSuchProcess:break
  out.write(json.dumps(row)+'\n');out.flush();time.sleep(.2)
