[example]
compare -t compare_template.yaml
in z9
[input]
a compare_template.yaml like below:
compare_metrics:
- meminfo.Active
- meminfo.Memused
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) |
+------------------------------------+------------+------------+------------+------------+------------+------------+------------+------------+
| meminfo.Active | 4k|1G | 4k|10G | 4k|80G | 4k|100G | 16k|1G | 16k|10G | 16k|100G | 32k|1G |
+------------------------------------+------------+------------+------------+------------+------------+------------+------------+------------+
| average openeuler 20.03 | 1051645.34 | 704958.00 | 706798.00 | 657669.27 | 1030484.85 | 979289.00 | 948576.00 | 1262591.17 |
| standard_deviation openeuler 20.03 | 74.00 | 0.00 | 0.00 | 8.00 | 46.00 | 0.00 | 2.00 | 42.00 |
+------------------------------------+------------+------------+------------+------------+------------+------------+------------+------------+
+------------------------------------+------------+------------+------------+------------+------------+------------+------------+------------+
| meminfo.Active | 64k|1G | 64k|100G | 128k|1G | 128k|100G | 256k|1G | 256k|100G | 512k|1G | 512k|100G |
+------------------------------------+------------+------------+------------+------------+------------+------------+------------+------------+
| average openeuler 20.03 | 1418731.53 | 1854231.33 | 2004321.76 | 2960171.75 | 2979326.50 | 4775340.00 | 5003555.53 | 5630845.75 |
| standard_deviation openeuler 20.03 | 47.00 | 10.00 | 65.00 | 18.00 | 88.00 | 8.00 | 108.00 | 15.00 |
+------------------------------------+------------+------------+------------+------------+------------+------------+------------+------------+
+------------------------------------+------------+------------+------------+------------+------------+------------+------------+------------+
| meminfo.Active | 1024k|1G | 1024k|100G | 2048k|100G | 4096k|100G |
+------------------------------------+------------+------------+------------+------------+------------+------------+------------+------------+
| average openeuler 20.03 | 8974190.91 | 9641039.00 | 5480763.67 | 7302509.67 |
| standard_deviation openeuler 20.03 | 118.00 | 36.00 | 86.00 | 67.00 |
+------------------------------------+------------+------------+------------+------------+------------+------------+------------+------------+
...
Signed-off-by: Lu Kaiyi <2392863668(a)qq.com>
---
lib/compare_data_format.rb | 41 +++++++++++++++++++++++++++++---------
1 file changed, 32 insertions(+), 9 deletions(-)
diff --git a/lib/compare_data_format.rb b/lib/compare_data_format.rb
index c1f7023..0f6bdc0 100644
--- a/lib/compare_data_format.rb
+++ b/lib/compare_data_format.rb
@@ -72,19 +72,20 @@ end
# format compare template results into a table format
#
class FormatTableData
- def initialize(result_hash)
+ def initialize(result_hash, row_size = 8)
@title = result_hash['title']
@tables = result_hash['tables']
@unit = result_hash['unit']
@x_name = result_hash['x_name']
+ @row_size = row_size
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)
+ row_num = get_row_num(table)
+ split_data_column(table_title, table, row_num)
set_align_column
print_table
end
@@ -94,14 +95,36 @@ class FormatTableData
@tb.title = "#{@title} (unit: #{@unit}, x_name: #{@x_name})"
end
- def set_field_names(table_title, table)
+ def get_row_num(table)
+ data_column_size = table['average']['source'][0].size
+ unless @row_size.positive?
+ warn('row size must be positive!')
+ exit
+ end
+ (data_column_size / @row_size.to_f).ceil
+ end
+
+ def split_data_column(table_title, table, row_num)
+ row_num.times do |row|
+ starts = 1 + row * @row_size
+ ends = starts + @row_size
+ set_field_names(table_title, table, starts, ends)
+ add_rows(table, starts, ends)
+ break if row == row_num - 1
+
+ @tb.add_separator
+ @tb.add_separator
+ end
+ end
+
+ def set_field_names(table_title, table, starts, ends)
field_names = [table_title]
- field_names.concat(table['average']['source'][0])
+ field_names.concat(table['average']['source'][0][starts - 1...ends - 1])
@tb.add_row(field_names)
@tb.add_separator
end
- def add_rows(table)
+ def add_rows(table, starts, ends)
row_names = %w[average standard_deviation change]
max_size = row_names.map(&:size).max
row_names.each do |row_name|
@@ -109,15 +132,15 @@ class FormatTableData
dimensions_size = table[row_name]['dimensions'].size
(1...dimensions_size).each do |index|
- add_row(table, row_name, index, max_size)
+ add_row(table, row_name, index, max_size, starts, ends)
end
end
end
- def add_row(table, row_name, index, max_size)
+ def add_row(table, row_name, index, max_size, starts, ends)
row = table[row_name]['source'][index]
row_title = [row_name + ' ' * (max_size - row_name.size), row[0]].join(' ')
- format_data_row = row[1..-1]
+ format_data_row = row[starts...ends]
if row_name == 'change'
format_data_row.map! { |data| format('%.1f%%', data) }
else
--
2.23.0