[why]
friendly show compare template result in command line.
[how]
rehandle the results of "compare -t <compare_template.yaml>" with terminal-table in Ruby.
[example]
compare -t compare_template.yaml
in z9
[input]
a compare_template.yaml like below:
compare_metrics:
- fio.write_iops
- fio.read_iops
filter:
suite:
- fio-basic
os_arch:
- aarch64
- x86
compare_dimensions:
- os: centos
os_version: 7.6
- os: openeuler
os_version: 20.03
x_params:
- bs
- test_size
title: Hackbench Performance Testing
unit: KB/s
[output]
+------------------------------------+-----------+----------+----------+----------+----------+---------+---------+---------+----------+
| Hackbench Performance Testing (unit: KB/s, x_name: bs|test_size) |
+------------------------------------+-----------+----------+----------+----------+----------+---------+---------+---------+----------+
| fio.read_iops | 4k|1G | 4k|80G | 16k|1G | 32k|1G | 64k|1G | 128k|1G | 256k|1G | 512k|1G | 1024k|1G |
+------------------------------------+-----------+----------+----------+----------+----------+---------+---------+---------+----------+
| average openeuler 20.03 | 144076.29 | 11601.10 | 37865.30 | 21145.10 | 14010.34 | 6701.24 | 3205.08 | 1367.48 | 673.33 |
| standard_deviation openeuler 20.03 | 195.00 | 0.00 | 214.00 | 205.00 | 188.00 | 183.00 | 180.00 | 191.00 | 191.00 |
+------------------------------------+-----------+----------+----------+----------+----------+---------+---------+---------+----------+
+--------------------------------------------------+-----------+-----------+----------+----------+----------+----------+---------+----------+
| Hackbench Performance Testing (unit: KB/s, x_name: bs|test_size) |
+--------------------------------------------------+-----------+-----------+----------+----------+----------+----------+---------+----------+
| fio.write_iops | 4k|1G | 16k|1G | 32k|1G | 64k|1G | 128k|1G | 256k|1G | 512k|1G | 1024k|1G |
+--------------------------------------------------+-----------+-----------+----------+----------+----------+----------+---------+----------+
| average centos 7.6 | 345243.03 | 142698.79 | 62108.35 | 34747.73 | 26330.19 | 10317.85 | 7471.71 | 3558.30 |
| average openeuler 20.03 | 122003.54 | 33528.53 | 31469.06 | 13870.14 | 8249.71 | 4329.45 | 1976.54 | 1141.00 |
| standard_deviation centos 7.6 | 97.00 | 95.00 | 122.00 | 125.00 | 100.00 | 130.00 | 101.00 | 103.00 |
| standard_deviation openeuler 20.03 | 174.00 | 188.00 | 171.00 | 197.00 | 181.00 | 175.00 | 170.00 | 176.00 |
| change centos 7.6 vs openeuler 20.03 | 183.0% | 325.6% | 97.4% | 150.5% | 219.2% | 138.3% | 278.0% | 211.9% |
+--------------------------------------------------+-----------+-----------+----------+----------+----------+----------+---------+----------+
Signed-off-by: Lu Kaiyi <2392863668(a)qq.com>
---
lib/compare_data_format.rb | 73 ++++++++++++++++++++++++++++++++++++++
lib/compare_matrixes.rb | 3 +-
2 files changed, 75 insertions(+), 1 deletion(-)
diff --git a/lib/compare_data_format.rb b/lib/compare_data_format.rb
index bf4013b..c1f7023 100644
--- a/lib/compare_data_format.rb
+++ b/lib/compare_data_format.rb
@@ -2,6 +2,8 @@
# Copyright (c) 2020 Huawei Technologies Co., Ltd. All rights reserved.
# frozen_string_literal: true
+require 'terminal-table'
+
# ----------------------------------------------------------------------------------------------------
# format compare results for a specific format
#
@@ -66,6 +68,77 @@ class FormatEchartData
end
end
+# ----------------------------------------------------------------------------------------------------
+# format compare template results into a table format
+#
+class FormatTableData
+ def initialize(result_hash)
+ @title = result_hash['title']
+ @tables = result_hash['tables']
+ @unit = result_hash['unit']
+ @x_name = result_hash['x_name']
+ end
+
+ def show_table
+ @tables.each do |table_title, table|
+ @tb = Terminal::Table.new
+ set_table_title
+ set_field_names(table_title, table)
+ add_rows(table)
+ set_align_column
+ print_table
+ end
+ end
+
+ def set_table_title
+ @tb.title = "#{@title} (unit: #{@unit}, x_name: #{@x_name})"
+ end
+
+ def set_field_names(table_title, table)
+ field_names = [table_title]
+ field_names.concat(table['average']['source'][0])
+ @tb.add_row(field_names)
+ @tb.add_separator
+ end
+
+ def add_rows(table)
+ row_names = %w[average standard_deviation change]
+ max_size = row_names.map(&:size).max
+ row_names.each do |row_name|
+ next unless table[row_name]
+
+ dimensions_size = table[row_name]['dimensions'].size
+ (1...dimensions_size).each do |index|
+ add_row(table, row_name, index, max_size)
+ end
+ end
+ end
+
+ def add_row(table, row_name, index, max_size)
+ row = table[row_name]['source'][index]
+ row_title = [row_name + ' ' * (max_size - row_name.size), row[0]].join(' ')
+ format_data_row = row[1..-1]
+ if row_name == 'change'
+ format_data_row.map! { |data| format('%.1f%%', data) }
+ else
+ format_data_row.map! { |data| format('%.2f', data) }
+ end
+ @tb.add_row([row_title, *format_data_row])
+ end
+
+ def set_align_column
+ @tb.number_of_columns.times do |index|
+ @tb.align_column(index + 1, :right)
+ end
+ @tb.align_column(0, :left)
+ end
+
+ def print_table
+ puts @tb
+ puts
+ end
+end
+
# input: x_params_list
# eg: ["1G|4K", "1G|1024k", "1G|128k", 2G|4k]
# output:
diff --git a/lib/compare_matrixes.rb b/lib/compare_matrixes.rb
index 5069939..9bf676f 100644
--- a/lib/compare_matrixes.rb
+++ b/lib/compare_matrixes.rb
@@ -511,7 +511,8 @@ end
def show_compare_result(metrics_compare_results, template_params)
formatter = FormatEchartData.new(metrics_compare_results, template_params)
echart_results = formatter.format_for_echart
- print JSON.pretty_generate(echart_results)
+ table_results = FormatTableData.new(echart_results)
+ table_results.show_table
end
# Format Fields
--
2.23.0