mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-11-24 08:32:02 +00:00
151 lines
4.0 KiB
Python
Executable File
151 lines
4.0 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
|
|
|
|
import sys
|
|
import json
|
|
|
|
|
|
def parse_block(block=[], options=[]):
|
|
|
|
# print('block is here', block)
|
|
# show_query = False
|
|
# show_query = options.show_query
|
|
result = []
|
|
query = block[0].strip()
|
|
if len(block) > 4:
|
|
timing1 = block[1].strip().split()[1]
|
|
timing2 = block[3].strip().split()[1]
|
|
timing3 = block[5].strip().split()[1]
|
|
else:
|
|
timing1 = block[1].strip().split()[1]
|
|
timing2 = block[2].strip().split()[1]
|
|
timing3 = block[3].strip().split()[1]
|
|
if options.show_queries:
|
|
result.append(query)
|
|
if not options.show_first_timings:
|
|
result += [timing1, timing2, timing3]
|
|
else:
|
|
result.append(timing1)
|
|
return result
|
|
|
|
|
|
def read_stats_file(options, fname):
|
|
result = []
|
|
int_result = []
|
|
block = []
|
|
time_count = 1
|
|
with open(fname) as f:
|
|
|
|
for line in f.readlines():
|
|
|
|
if "SELECT" in line:
|
|
if len(block) > 1:
|
|
result.append(parse_block(block, options))
|
|
block = [line]
|
|
elif "Time:" in line:
|
|
block.append(line)
|
|
|
|
return result
|
|
|
|
|
|
def compare_stats_files(options, arguments):
|
|
result = []
|
|
file_output = []
|
|
pyplot_colors = ["y", "b", "g", "r"]
|
|
for fname in arguments[1:]:
|
|
file_output.append((read_stats_file(options, fname)))
|
|
if len(file_output[0]) > 0:
|
|
timings_count = len(file_output[0])
|
|
for idx, data_set in enumerate(file_output):
|
|
int_result = []
|
|
for timing in data_set:
|
|
int_result.append(float(timing[0])) # y values
|
|
result.append(
|
|
[
|
|
[x for x in range(0, len(int_result))],
|
|
int_result,
|
|
pyplot_colors[idx] + "^",
|
|
]
|
|
)
|
|
# result.append([x for x in range(1, len(int_result)) ]) #x values
|
|
# result.append( pyplot_colors[idx] + '^' )
|
|
|
|
return result
|
|
|
|
|
|
def parse_args():
|
|
from optparse import OptionParser
|
|
|
|
parser = OptionParser(usage="usage: %prog [options] [result_file_path]..")
|
|
parser.add_option(
|
|
"-q",
|
|
"--show-queries",
|
|
help="Show statements along with timings",
|
|
action="store_true",
|
|
dest="show_queries",
|
|
)
|
|
parser.add_option(
|
|
"-f",
|
|
"--show-first-timings",
|
|
help="Show only first tries timings",
|
|
action="store_true",
|
|
dest="show_first_timings",
|
|
)
|
|
parser.add_option(
|
|
"-c",
|
|
"--compare-mode",
|
|
help="Prepare output for pyplot comparing result files.",
|
|
action="store",
|
|
dest="compare_mode",
|
|
)
|
|
(options, arguments) = parser.parse_args(sys.argv)
|
|
if len(arguments) < 2:
|
|
parser.print_usage()
|
|
sys.exit(1)
|
|
return (options, arguments)
|
|
|
|
|
|
def gen_pyplot_code(options, arguments):
|
|
result = ""
|
|
data_sets = compare_stats_files(options, arguments)
|
|
for idx, data_set in enumerate(data_sets, start=0):
|
|
x_values, y_values, line_style = data_set
|
|
result += "\nplt.plot("
|
|
result += "%s, %s, '%s'" % (x_values, y_values, line_style)
|
|
result += ", label='%s try')" % idx
|
|
print("import matplotlib.pyplot as plt")
|
|
print(result)
|
|
print("plt.xlabel('Try number')")
|
|
print("plt.ylabel('Timing')")
|
|
print("plt.title('Benchmark query timings')")
|
|
print("plt.legend()")
|
|
print("plt.show()")
|
|
|
|
|
|
def gen_html_json(options, arguments):
|
|
tuples = read_stats_file(options, arguments[1])
|
|
print("{")
|
|
print('"system: GreenPlum(x2),')
|
|
print(('"version": "%s",' % "4.3.9.1"))
|
|
print('"data_size": 10000000,')
|
|
print('"time": "",')
|
|
print('"comments": "",')
|
|
print('"result":')
|
|
print("[")
|
|
for s in tuples:
|
|
print(s)
|
|
print("]")
|
|
print("}")
|
|
|
|
|
|
def main():
|
|
(options, arguments) = parse_args()
|
|
if len(arguments) > 2:
|
|
gen_pyplot_code(options, arguments)
|
|
else:
|
|
gen_html_json(options, arguments)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|