koder aka kdanilov | 66839a9 | 2015-04-11 13:22:31 +0300 | [diff] [blame] | 1 | import texttable |
| 2 | |
koder aka kdanilov | f86d7af | 2015-05-06 04:01:54 +0300 | [diff] [blame^] | 3 | from wally.utils import ssize2b |
| 4 | from wally.statistic import round_3_digit |
koder aka kdanilov | cff7b2e | 2015-04-18 20:48:15 +0300 | [diff] [blame] | 5 | from wally.suits.io.agent import get_test_summary |
koder aka kdanilov | 66839a9 | 2015-04-11 13:22:31 +0300 | [diff] [blame] | 6 | |
koder aka kdanilov | 66839a9 | 2015-04-11 13:22:31 +0300 | [diff] [blame] | 7 | |
koder aka kdanilov | 652cd80 | 2015-04-13 12:21:07 +0300 | [diff] [blame] | 8 | def key_func(k_data): |
koder aka kdanilov | f86d7af | 2015-05-06 04:01:54 +0300 | [diff] [blame^] | 9 | name, data = k_data |
koder aka kdanilov | cff7b2e | 2015-04-18 20:48:15 +0300 | [diff] [blame] | 10 | return (data['rw'], |
| 11 | data['sync_mode'], |
koder aka kdanilov | f86d7af | 2015-05-06 04:01:54 +0300 | [diff] [blame^] | 12 | ssize2b(data['blocksize']), |
| 13 | data['concurence'], |
| 14 | name) |
Yulia Portnova | 7ddfa73 | 2015-02-24 17:32:58 +0200 | [diff] [blame] | 15 | |
| 16 | |
koder aka kdanilov | f86d7af | 2015-05-06 04:01:54 +0300 | [diff] [blame^] | 17 | def format_results_for_console(test_set, dinfo): |
koder aka kdanilov | cff7b2e | 2015-04-18 20:48:15 +0300 | [diff] [blame] | 18 | """ |
| 19 | create a table with io performance report |
| 20 | for console |
| 21 | """ |
koder aka kdanilov | be8f89f | 2015-04-28 14:51:51 +0300 | [diff] [blame] | 22 | tab = texttable.Texttable(max_width=120) |
koder aka kdanilov | 652cd80 | 2015-04-13 12:21:07 +0300 | [diff] [blame] | 23 | tab.set_deco(tab.HEADER | tab.VLINES | tab.BORDER) |
koder aka kdanilov | f86d7af | 2015-05-06 04:01:54 +0300 | [diff] [blame^] | 24 | tab.set_cols_align(["l", "l", "r", "r", "r", "r", "r", "r"]) |
| 25 | |
| 26 | items = sorted(test_set['res'].items(), key=key_func) |
Yulia Portnova | 7ddfa73 | 2015-02-24 17:32:58 +0200 | [diff] [blame] | 27 | |
koder aka kdanilov | 652cd80 | 2015-04-13 12:21:07 +0300 | [diff] [blame] | 28 | prev_k = None |
koder aka kdanilov | be8f89f | 2015-04-28 14:51:51 +0300 | [diff] [blame] | 29 | vm_count = test_set['__test_meta__']['testnodes_count'] |
koder aka kdanilov | f86d7af | 2015-05-06 04:01:54 +0300 | [diff] [blame^] | 30 | header = ["Name", "Description", "iops\ncum", "KiBps\ncum", |
| 31 | "Cnf\n95%", "iops\nper vm", "KiBps\nper vm", "lat\nms"] |
koder aka kdanilov | 652cd80 | 2015-04-13 12:21:07 +0300 | [diff] [blame] | 32 | |
| 33 | for test_name, data in items: |
koder aka kdanilov | 63ad206 | 2015-04-27 13:11:40 +0300 | [diff] [blame] | 34 | |
koder aka kdanilov | 652cd80 | 2015-04-13 12:21:07 +0300 | [diff] [blame] | 35 | curr_k = key_func((test_name, data))[:3] |
| 36 | |
| 37 | if prev_k is not None: |
| 38 | if prev_k != curr_k: |
koder aka kdanilov | be8f89f | 2015-04-28 14:51:51 +0300 | [diff] [blame] | 39 | tab.add_row( |
koder aka kdanilov | f86d7af | 2015-05-06 04:01:54 +0300 | [diff] [blame^] | 40 | ["-------", "--------", "-----", "------", |
| 41 | "---", "------", "---", "-----"]) |
koder aka kdanilov | 652cd80 | 2015-04-13 12:21:07 +0300 | [diff] [blame] | 42 | |
| 43 | prev_k = curr_k |
| 44 | |
koder aka kdanilov | 4e9f3ed | 2015-04-14 11:26:12 +0300 | [diff] [blame] | 45 | descr = get_test_summary(data) |
koder aka kdanilov | f86d7af | 2015-05-06 04:01:54 +0300 | [diff] [blame^] | 46 | test_dinfo = dinfo[test_name] |
Yulia Portnova | 7ddfa73 | 2015-02-24 17:32:58 +0200 | [diff] [blame] | 47 | |
koder aka kdanilov | f86d7af | 2015-05-06 04:01:54 +0300 | [diff] [blame^] | 48 | 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 Portnova | 7ddfa73 | 2015-02-24 17:32:58 +0200 | [diff] [blame] | 51 | |
koder aka kdanilov | f86d7af | 2015-05-06 04:01:54 +0300 | [diff] [blame^] | 52 | lat, _ = test_dinfo.lat.rounded_average_conf() |
| 53 | lat = round_3_digit(int(lat) // 1000) |
Yulia Portnova | 7ddfa73 | 2015-02-24 17:32:58 +0200 | [diff] [blame] | 54 | |
koder aka kdanilov | f86d7af | 2015-05-06 04:01:54 +0300 | [diff] [blame^] | 55 | iops_per_vm = round_3_digit(iops / float(vm_count)) |
| 56 | bw_per_vm = round_3_digit(bw / float(vm_count)) |
koder aka kdanilov | e87ae65 | 2015-04-20 02:14:35 +0300 | [diff] [blame] | 57 | |
| 58 | iops = round_3_digit(iops) |
| 59 | bw = round_3_digit(bw) |
koder aka kdanilov | e87ae65 | 2015-04-20 02:14:35 +0300 | [diff] [blame] | 60 | |
koder aka kdanilov | f86d7af | 2015-05-06 04:01:54 +0300 | [diff] [blame^] | 61 | 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 kdanilov | cff7b2e | 2015-04-18 20:48:15 +0300 | [diff] [blame] | 64 | tab.add_row(params) |
Yulia Portnova | 7ddfa73 | 2015-02-24 17:32:58 +0200 | [diff] [blame] | 65 | |
koder aka kdanilov | 652cd80 | 2015-04-13 12:21:07 +0300 | [diff] [blame] | 66 | tab.header(header) |
Yulia Portnova | 7ddfa73 | 2015-02-24 17:32:58 +0200 | [diff] [blame] | 67 | |
koder aka kdanilov | 66839a9 | 2015-04-11 13:22:31 +0300 | [diff] [blame] | 68 | return tab.draw() |