blob: 09565beeab13d553b316b6ef26cdba7b11a4d9d0 [file] [log] [blame]
koder aka kdanilov66839a92015-04-11 13:22:31 +03001import texttable
2
koder aka kdanilovf86d7af2015-05-06 04:01:54 +03003from wally.utils import ssize2b
4from wally.statistic import round_3_digit
koder aka kdanilovcff7b2e2015-04-18 20:48:15 +03005from wally.suits.io.agent import get_test_summary
koder aka kdanilov66839a92015-04-11 13:22:31 +03006
koder aka kdanilov66839a92015-04-11 13:22:31 +03007
koder aka kdanilov652cd802015-04-13 12:21:07 +03008def key_func(k_data):
koder aka kdanilovf86d7af2015-05-06 04:01:54 +03009 name, data = k_data
koder aka kdanilovcff7b2e2015-04-18 20:48:15 +030010 return (data['rw'],
11 data['sync_mode'],
koder aka kdanilovf86d7af2015-05-06 04:01:54 +030012 ssize2b(data['blocksize']),
13 data['concurence'],
14 name)
Yulia Portnova7ddfa732015-02-24 17:32:58 +020015
16
koder aka kdanilovf86d7af2015-05-06 04:01:54 +030017def format_results_for_console(test_set, dinfo):
koder aka kdanilovcff7b2e2015-04-18 20:48:15 +030018 """
19 create a table with io performance report
20 for console
21 """
koder aka kdanilovbe8f89f2015-04-28 14:51:51 +030022 tab = texttable.Texttable(max_width=120)
koder aka kdanilov652cd802015-04-13 12:21:07 +030023 tab.set_deco(tab.HEADER | tab.VLINES | tab.BORDER)
koder aka kdanilovf86d7af2015-05-06 04:01:54 +030024 tab.set_cols_align(["l", "l", "r", "r", "r", "r", "r", "r"])
25
26 items = sorted(test_set['res'].items(), key=key_func)
Yulia Portnova7ddfa732015-02-24 17:32:58 +020027
koder aka kdanilov652cd802015-04-13 12:21:07 +030028 prev_k = None
koder aka kdanilovbe8f89f2015-04-28 14:51:51 +030029 vm_count = test_set['__test_meta__']['testnodes_count']
koder aka kdanilovf86d7af2015-05-06 04:01:54 +030030 header = ["Name", "Description", "iops\ncum", "KiBps\ncum",
31 "Cnf\n95%", "iops\nper vm", "KiBps\nper vm", "lat\nms"]
koder aka kdanilov652cd802015-04-13 12:21:07 +030032
33 for test_name, data in items:
koder aka kdanilov63ad2062015-04-27 13:11:40 +030034
koder aka kdanilov652cd802015-04-13 12:21:07 +030035 curr_k = key_func((test_name, data))[:3]
36
37 if prev_k is not None:
38 if prev_k != curr_k:
koder aka kdanilovbe8f89f2015-04-28 14:51:51 +030039 tab.add_row(
koder aka kdanilovf86d7af2015-05-06 04:01:54 +030040 ["-------", "--------", "-----", "------",
41 "---", "------", "---", "-----"])
koder aka kdanilov652cd802015-04-13 12:21:07 +030042
43 prev_k = curr_k
44
koder aka kdanilov4e9f3ed2015-04-14 11:26:12 +030045 descr = get_test_summary(data)
koder aka kdanilovf86d7af2015-05-06 04:01:54 +030046 test_dinfo = dinfo[test_name]
Yulia Portnova7ddfa732015-02-24 17:32:58 +020047
koder aka kdanilovf86d7af2015-05-06 04:01:54 +030048 iops, _ = test_dinfo.iops.rounded_average_conf()
49 bw, bw_conf = test_dinfo.bw.rounded_average_conf()
50 conf_perc = int(round(bw_conf * 100 / bw))
Yulia Portnova7ddfa732015-02-24 17:32:58 +020051
koder aka kdanilovf86d7af2015-05-06 04:01:54 +030052 lat, _ = test_dinfo.lat.rounded_average_conf()
53 lat = round_3_digit(int(lat) // 1000)
Yulia Portnova7ddfa732015-02-24 17:32:58 +020054
koder aka kdanilovf86d7af2015-05-06 04:01:54 +030055 iops_per_vm = round_3_digit(iops / float(vm_count))
56 bw_per_vm = round_3_digit(bw / float(vm_count))
koder aka kdanilove87ae652015-04-20 02:14:35 +030057
58 iops = round_3_digit(iops)
59 bw = round_3_digit(bw)
koder aka kdanilove87ae652015-04-20 02:14:35 +030060
koder aka kdanilovf86d7af2015-05-06 04:01:54 +030061 params = (test_name.split('_', 1)[0],
62 descr, int(iops), int(bw), str(conf_perc),
63 int(iops_per_vm), int(bw_per_vm), lat)
koder aka kdanilovcff7b2e2015-04-18 20:48:15 +030064 tab.add_row(params)
Yulia Portnova7ddfa732015-02-24 17:32:58 +020065
koder aka kdanilov652cd802015-04-13 12:21:07 +030066 tab.header(header)
Yulia Portnova7ddfa732015-02-24 17:32:58 +020067
koder aka kdanilov66839a92015-04-11 13:22:31 +030068 return tab.draw()