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))