"""Assigned latency observations; exact nearest-rank quantiles, no service benchmark."""
import csv,json,math
from pathlib import Path
HERE=Path(__file__).resolve().parent
def p95(values):
    ordered=sorted(values)
    return ordered[math.ceil(.95*len(ordered))-1]
a=[10]*100;b=[1000]*10
rows=[{'instance':label,'request':i+1,'latency_ms':v}for label,values in [('A',a),('B',b)]for i,v in enumerate(values)]
with (HERE/'observations.csv').open('w',newline='')as f:
    w=csv.DictWriter(f,fieldnames=rows[0]);w.writeheader();w.writerows(rows)
result={'scope':'Assigned observations, exact nearest-rank p95, no monitoring backend or live request measurement.','count':len(a+b),'instanceP95':{'A':p95(a),'B':p95(b)},'unweightedP95Mean':(p95(a)+p95(b))/2,'countWeightedP95Mean':(len(a)*p95(a)+len(b)*p95(b))/len(a+b),'combinedP95':p95(a+b),'sensitivity':[{'slowRequests':n,'total':100+n,'combinedP95':p95(a+[1000]*n)}for n in [1,5,6,10,25]]}
assert result['combinedP95']==1000 and result['unweightedP95Mean']==505 and result['countWeightedP95Mean']==100
assert [r['combinedP95']for r in result['sensitivity']]==[10,10,1000,1000,1000]
(HERE/'results.json').write_text(json.dumps(result,indent=2)+'\n')
print(json.dumps(result,indent=2))
