mirror of
https://github.com/steveseguin/caption-local.git
synced 2026-10-09 17:49:30 +00:00
33 lines
1.9 KiB
Python
33 lines
1.9 KiB
Python
"""Sample CPU, memory and queue state without sending audio."""
|
|
import argparse
|
|
import json
|
|
import os
|
|
from pathlib import Path
|
|
import time
|
|
import urllib.request
|
|
import psutil
|
|
|
|
parser=argparse.ArgumentParser(description=__doc__)
|
|
parser.add_argument('--url',default='http://127.0.0.1:8772')
|
|
parser.add_argument('--pid',type=int,required=True,help='Server or container init PID')
|
|
parser.add_argument('--seconds',type=int,default=180)
|
|
parser.add_argument('--output',default='evidence/multistream/docker-monitor.json')
|
|
args=parser.parse_args()
|
|
process=psutil.Process(args.pid); samples=[]; start=time.monotonic()
|
|
while time.monotonic()-start < args.seconds:
|
|
workers=[process]+process.children(recursive=True)
|
|
headers={'Authorization':'Bearer '+os.environ['CAPTION_API_KEY']} if os.environ.get('CAPTION_API_KEY') else {}
|
|
with urllib.request.urlopen(urllib.request.Request(args.url+'/health',headers=headers),timeout=5) as response: health=json.load(response)
|
|
samples.append({'seconds':round(time.monotonic()-start,2),
|
|
'rss_mib':round(sum(p.memory_info().rss for p in workers)/2**20,2),
|
|
'cpu_seconds':round(sum(p.cpu_times().user+p.cpu_times().system for p in workers),3),
|
|
'threads':sum(p.num_threads() for p in workers),
|
|
'ready':health['ready'],'running':health['running'],'pending':health['pending'],
|
|
'completed':health['completed'],'failed':health['failed'],
|
|
'rejected':health['rejected'],'queue_timeouts':health['queue_timeouts']})
|
|
Path(args.output).write_text(json.dumps(samples,indent=2)+'\n', encoding='utf-8')
|
|
assert health['ready'] and health['failed']==0 and health['queue_timeouts']==0, health
|
|
time.sleep(5)
|
|
print(json.dumps({'samples':len(samples),'peak_rss_mib':max(s['rss_mib'] for s in samples),
|
|
'mean_cpu_cores':round((samples[-1]['cpu_seconds']-samples[0]['cpu_seconds'])/(samples[-1]['seconds']-samples[0]['seconds']),2)}))
|