pre-release bug fixes
diff --git a/formatters.py b/formatters.py
index bbbf8d2..967d8f3 100644
--- a/formatters.py
+++ b/formatters.py
@@ -1,61 +1,8 @@
-import itertools
-from collections import defaultdict
-
import texttable
+from utils import ssize_to_b
from statistic import med_dev
-# [{u'__meta__': {u'raw_cfg': u'[writetest * 2]\ngroup_reporting\nnumjobs=4\nwait_for_previous\nramp_time=5\nblocksize=4k\nfilename={FILENAME}\nrw=randwrite\ndirect=1\nbuffered=0\niodepth=1\nsize=100Mb\nruntime=10\ntime_based\n\n[readtest * 2]\ngroup_reporting\nnumjobs=4\nwait_for_previous\nramp_time=5\nblocksize=4k\nfilename={FILENAME}\nrw=randread\ndirect=1\nbuffered=0\niodepth=1\nsize=100Mb\nruntime=10\ntime_based\n'},
-# u'res': {u'readtest': {u'action': u'randread',
-# u'blocksize': u'4k',
-# u'bw_mean': [349.61, 276.54],
-# u'clat': [11987.16, 15235.08],
-# u'concurence': 4,
-# u'direct_io': True,
-# u'iops': [316, 251],
-# u'jobname': u'readtest',
-# u'lat': [11987.52, 15235.46],
-# u'slat': [0.0, 0.0],
-# u'sync': False,
-# u'timings': [u'10', u'5']},
-# u'writetest': {u'action': u'randwrite',
-# u'blocksize': u'4k',
-# u'bw_mean': [72.03, 61.84],
-# u'clat': [113525.86, 152836.42],
-# u'concurence': 4,
-# u'direct_io': True,
-# u'iops': [35, 23],
-# u'jobname': u'writetest',
-# u'lat': [113526.31, 152836.89],
-# u'slat': [0.0, 0.0],
-# u'sync': False,
-# u'timings': [u'10', u'5']}}},
-# {u'__meta__': {u'raw_cfg': u'[writetest * 2]\ngroup_reporting\nnumjobs=4\nwait_for_previous\nramp_time=5\nblocksize=4k\nfilename={FILENAME}\nrw=randwrite\ndirect=1\nbuffered=0\niodepth=1\nsize=100Mb\nruntime=10\ntime_based\n\n[readtest * 2]\ngroup_reporting\nnumjobs=4\nwait_for_previous\nramp_time=5\nblocksize=4k\nfilename={FILENAME}\nrw=randread\ndirect=1\nbuffered=0\niodepth=1\nsize=100Mb\nruntime=10\ntime_based\n'},
-# u'res': {u'readtest': {u'action': u'randread',
-# u'blocksize': u'4k',
-# u'bw_mean': [287.62, 280.76],
-# u'clat': [15437.57, 14741.65],
-# u'concurence': 4,
-# u'direct_io': True,
-# u'iops': [258, 271],
-# u'jobname': u'readtest',
-# u'lat': [15437.94, 14742.04],
-# u'slat': [0.0, 0.0],
-# u'sync': False,
-# u'timings': [u'10', u'5']},
-# u'writetest': {u'action': u'randwrite',
-# u'blocksize': u'4k',
-# u'bw_mean': [71.18, 61.62],
-# u'clat': [116382.95, 153486.81],
-# u'concurence': 4,
-# u'direct_io': True,
-# u'iops': [32, 22],
-# u'jobname': u'writetest',
-# u'lat': [116383.44, 153487.27],
-# u'slat': [0.0, 0.0],
-# u'sync': False,
-# u'timings': [u'10', u'5']}}}]
-
def get_test_descr(data):
rw = {"randread": "rr",
@@ -63,26 +10,38 @@
"read": "sr",
"write": "sw"}[data["action"]]
- if data["direct_io"]:
- sync_mode = 'd'
- elif data["sync"]:
- sync_mode = 's'
- else:
- sync_mode = 'a'
+ return "{0}{1}{2}_th{3}".format(rw,
+ data['sync_mode'],
+ data['blocksize'],
+ data['concurence'])
- th_count = int(data['concurence'])
- return "{0}{1}{2}_th{3}".format(rw, sync_mode,
- data['blocksize'], th_count)
+def key_func(k_data):
+ _, data = k_data
+
+ bsz = ssize_to_b(data['blocksize'])
+ tp = data['action']
+ return tp, data['sync_mode'], bsz, data['concurence']
def format_results_for_console(test_set):
data_for_print = []
tab = texttable.Texttable()
- tab.set_deco(tab.HEADER | tab.VLINES | tab.BORDER | tab.HLINES)
+ tab.set_deco(tab.HEADER | tab.VLINES | tab.BORDER)
tab.set_cols_align(["l", "r", "r", "r", "r"])
- for test_name, data in test_set['res'].items():
+ items = sorted(test_set['res'].items(), key=key_func)
+ prev_k = None
+
+ for test_name, data in items:
+ curr_k = key_func((test_name, data))[:3]
+
+ if prev_k is not None:
+ if prev_k != curr_k:
+ data_for_print.append(["---"] * 5)
+
+ prev_k = curr_k
+
descr = get_test_descr(data)
iops, _ = med_dev(data['iops'])
@@ -96,33 +55,8 @@
data_for_print.append(params)
header = ["Description", "IOPS", "BW KBps", "Dev * 3 %", "LAT ms"]
- tab.add_row(header)
- tab.header = header
+ tab.header(header)
map(tab.add_row, data_for_print)
return tab.draw()
-
-
-# def format_pgbench_stat(res):
-# """
-# Receives results in format:
-# "<num_clients> <num_transactions>: <tps>
-# <num_clients> <num_transactions>: <tps>
-# ....
-# "
-# """
-# if res:
-# data = {}
-# grouped_res = itertools.groupby(res, lambda x: x[0])
-# for key, group in grouped_res:
-# results = list(group)
-# sum_res = sum([r[1] for r in results])
-# mean = sum_res/len(results)
-# sum_sq = sum([(r[1] - mean) ** 2 for r in results])
-# if len(results) > 1:
-# dev = (sum_sq / (len(results) - 1))
-# else:
-# dev = 0
-# data[key] = (mean, dev)
-# return data