|  | import sys | 
|  | from data_stat import med_dev, round_deviation, groupby_globally | 
|  | from data_stat import read_data_agent_result | 
|  |  | 
|  |  | 
|  | def key(x): | 
|  | return (x['__meta__']['blocksize'], | 
|  | 'd' if x['__meta__']['direct_io'] else 's', | 
|  | x['__meta__']['action'], | 
|  | x['__meta__']['concurence']) | 
|  |  | 
|  |  | 
|  | template = "{bs:>4}  {action:>12}  {cache_tp:>3}  {conc:>4}" | 
|  | template += " | {iops[0]:>6} ~ {iops[1]:>5} | {bw[0]:>7} ~ {bw[1]:>6}" | 
|  | template += " | {lat[0]:>6} ~ {lat[1]:>5} |" | 
|  |  | 
|  | headers = dict(bs="BS", | 
|  | action="operation", | 
|  | cache_tp="S/D", | 
|  | conc="CONC", | 
|  | iops=("IOPS", "dev"), | 
|  | bw=("BW kBps", "dev"), | 
|  | lat=("LAT ms", "dev")) | 
|  |  | 
|  |  | 
|  | def main(argv): | 
|  | data = read_data_agent_result(sys.argv[1]) | 
|  | grouped = groupby_globally(data, key) | 
|  |  | 
|  | print template.format(**headers) | 
|  |  | 
|  | for (bs, cache_tp, act, conc), curr_data in sorted(grouped.items()): | 
|  | iops = med_dev([i['iops'] * int(conc) for i in curr_data]) | 
|  | bw = med_dev([i['bw'] * int(conc) for i in curr_data]) | 
|  | lat = med_dev([i['lat'] / 1000 for i in curr_data]) | 
|  |  | 
|  | iops = round_deviation(iops) | 
|  | bw = round_deviation(bw) | 
|  | lat = round_deviation(lat) | 
|  |  | 
|  | params = dict( | 
|  | bs=bs, | 
|  | action=act, | 
|  | cache_tp=cache_tp, | 
|  | iops=iops, | 
|  | bw=bw, | 
|  | lat=lat, | 
|  | conc=conc | 
|  | ) | 
|  |  | 
|  | print template.format(**params) | 
|  |  | 
|  |  | 
|  | if __name__ == "__main__": | 
|  | exit(main(sys.argv)) | 
|  |  | 
|  | # vals = [(123, 23), (125678, 5678), (123.546756, 23.77), | 
|  | #         (123.546756, 102.77), (0.1234, 0.0224), | 
|  | #         (0.001234, 0.000224), (0.001234, 0.0000224)] | 
|  | # for val in : | 
|  | #     print val, "=>", round_deviation(val) |