[Why]
User just need the failed metrics belong latest job in compare result
[How]
1. query job_list and order by start_time desc
2. auto group job_list
- the first job of each dimension is the latest job
{
group_key => {
dim1 => [job1, ...]
...
}
}
3. get latest job_list for each group
4. in compare result, ignore the failed metric that not belongs the latest job_list
Signed-off-by: Lu Weitao <luweitaobe(a)163.com>
---
lib/compare.rb | 4 ++--
lib/compare_matrixes.rb | 32 ++++++++++++++++++++++++--------
lib/matrix2.rb | 24 +++++++++++++++++-------
3 files changed, 43 insertions(+), 17 deletions(-)
diff --git a/lib/compare.rb b/lib/compare.rb
index 6a2f515..21e24df 100644
--- a/lib/compare.rb
+++ b/lib/compare.rb
@@ -62,8 +62,8 @@ end
def compare_group(argv, dimensions, options)
conditions = parse_conditions(argv)
dims = dimensions.split(' ')
- groups_matrices, suites_hash = create_groups_matrices_list(conditions, dims)
- compare_group_matrices(groups_matrices, suites_hash, options)
+ groups_matrices, suites_hash, latest_jobs_hash = create_groups_matrices_list(conditions, dims)
+ compare_group_matrices(groups_matrices, suites_hash, latest_jobs_hash, options)
end
def create_groups_matrices_list(conditions, dims)
diff --git a/lib/compare_matrixes.rb b/lib/compare_matrixes.rb
index 21bd5c9..7747ea1 100644
--- a/lib/compare_matrixes.rb
+++ b/lib/compare_matrixes.rb
@@ -159,7 +159,7 @@ def get_matrixes_fields(matrixes_list)
matrixes_fields
end
-def get_matrixes_values(matrixes_list, options)
+def get_matrixes_values(matrixes_list, latest_jobs, options)
# get all matrixes all field values
#
matrixes_values = { false => {}, true => {} }
@@ -168,6 +168,10 @@ def get_matrixes_values(matrixes_list, options)
next if field == 'stats_source'
success = successful?(field)
+ unless success
+ next unless latest_failure?(field, latest_jobs)
+ end
+
matrixes_values[success][field] = get_values_by_field(
matrixes_list, field,
matrixes_size, success, options
@@ -176,6 +180,18 @@ def get_matrixes_values(matrixes_list, options)
matrixes_values
end
+def latest_failure?(field, latest_jobs)
+ flag = false
+ latest_jobs.each do |job|
+ if job['stats'][field]
+ flag = true
+ break
+ end
+ end
+
+ flag
+end
+
def remove_unchanged_field(matrixes_values, suite_list)
# remove unchanged field from matrixes values and remove :changed key
#
@@ -197,7 +213,7 @@ def matrixes_empty?(matrixes_list)
return matrixes_list.any?(&:empty?)
end
-def compare_matrixes(matrixes_list, suite_list, matrixes_titles = nil, group_key = nil, options: {})
+def compare_matrixes(matrixes_list, suite_list, latest_jobs, matrixes_titles = nil, group_key = nil, options: {})
# compare matrix in matrixes_list and print info
# @matrixes_list: list consisting of matrix
# @matrixes_titles: number or dimension of matrix
@@ -206,7 +222,7 @@ def compare_matrixes(matrixes_list, suite_list, matrixes_titles = nil, group_key
return warn('Matrix cannot be empty!') || '' if matrixes_empty?(matrixes_list)
options = { 'perf-profile': 5, theme: :none, no_print: false }.merge(options)
- matrixes_values = get_matrixes_values(matrixes_list, options)
+ matrixes_values = get_matrixes_values(matrixes_list, latest_jobs, options)
remove_unchanged_field(matrixes_values, suite_list) if matrixes_list.length > 1
no_print = options[:no_print]
result_str = group_key ? "\n\n\n\n\n" + group_key : ''
@@ -387,28 +403,28 @@ end
# input: group matrices
# output: pre compare result of each group
# the result with more comparison objects first
-def compare_group_matrices(group_matrices, suites_hash, options)
+def compare_group_matrices(group_matrices, suites_hash, latest_jobs_hash, options)
result_str = ''
group_matrices_array = sort_by_matrix_size(group_matrices)
have_multi_member = group_matrices_array[0][1].size > 1
group_matrices_array.each do |matrice_kv|
next if have_multi_member && matrice_kv[1].size < 2
- result_str += get_matrix_str(matrice_kv[0], matrice_kv[1], suites_hash[matrice_kv[0]], options)
+ result_str += get_matrix_str(matrice_kv[0], matrice_kv[1], suites_hash[matrice_kv[0]], latest_jobs_hash[matrice_kv[0]], options)
end
result_str
end
-def get_matrix_str(matrice_key, matrice_value, suite_list, options)
+def get_matrix_str(matrice_key, matrice_value, suite_list, latest_jobs, options)
m_list = []
m_titles = []
matrice_value.each do |dim, matrix|
m_titles << dim
m_list << matrix
end
- return compare_matrixes(m_list, suite_list, m_titles, matrice_key, options: options) if options[:no_print]
+ return compare_matrixes(m_list, suite_list, latest_jobs, m_titles, matrice_key, options: options) if options[:no_print]
- print compare_matrixes(m_list, suite_list, m_titles, matrice_key, options: options)
+ print compare_matrixes(m_list, suite_list, latest_jobs, m_titles, matrice_key, options: options)
return ''
end
diff --git a/lib/matrix2.rb b/lib/matrix2.rb
index 09573ec..e3ae580 100644
--- a/lib/matrix2.rb
+++ b/lib/matrix2.rb
@@ -115,27 +115,37 @@ end
# }
def combine_group_query_data(job_list, dims)
suites_hash = {}
+ latest_jobs_hash = {}
groups = auto_group(job_list, dims)
have_multi_member = multi_member?(groups)
one_size_count = 0
groups.each do |group_key, value|
if value.size < 2
one_size_count += 1
- if have_multi_member || one_size_count > 3
- groups.delete(group_key)
- next
- end
+ next if delete_group?(groups, group_key, have_multi_member, one_size_count)
end
- get_groups_matrix(groups, group_key, value, suites_hash)
+ get_groups_matrix(groups, group_key, value, suites_hash, latest_jobs_hash)
end
- return groups, suites_hash
+ return groups, suites_hash, latest_jobs_hash
end
-def get_groups_matrix(groups, group_key, value, suites_hash)
+def delete_group?(groups, group_key, have_multi_member, one_size_count)
+ was_deleted = false
+ if have_multi_member || one_size_count > 3
+ groups.delete(group_key)
+ was_deleted = true
+ end
+
+ was_deleted
+end
+
+def get_groups_matrix(groups, group_key, value, suites_hash, latest_jobs_hash)
suite_list = []
+ latest_jobs_hash[group_key] = []
value.each do |dimension_key, jobs|
groups[group_key][dimension_key], suites = create_matrix(jobs)
suite_list.concat(suites)
+ latest_jobs_hash[group_key] << jobs[0]
end
suites_hash[group_key] = suite_list
end
--
2.23.0