Files
MathApp/tools/loadtest/agg.py

14 lines
903 B
Python

import json, sys, glob, collections
recs = [r for f in sorted(glob.glob(sys.argv[1])) for r in json.load(open(f))]
dur = dict(x.split(':') for x in sys.argv[2].split(','))
q = lambda a, p: round(a[min(len(a) - 1, int(p * len(a)))] * 1000) if a else None
for stage in dur:
mine = [r for r in recs if r[0] == stage]
lat = sorted(r[3] for r in mine if r[1] != 'ai/ask')
codes = collections.Counter(str(r[2]) for r in mine)
per = collections.defaultdict(list)
for r in mine: per[r[1]].append(r[3])
print(json.dumps({'users': int(stage), 'requests': len(lat), 'rps': round(len(lat) / int(dur[stage]), 1), 'p50_ms': q(lat, .5), 'p95_ms': q(lat, .95),
'p99_ms': q(lat, .99), 'max_ms': q(lat, 1), 'codes': dict(codes),
'per': {k: {'n': len(v), 'p50': q(sorted(v), .5), 'p95': q(sorted(v), .95)} for k, v in per.items()}}, ensure_ascii=False))