14 lines
903 B
Python
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))
|