Skip to content

Commit 268971d

Browse files
Merge pull request #58 from RodrigoMNardi/report/rerun_by_user
Report
2 parents 9314745 + 92a74aa commit 268971d

File tree

2 files changed

+139
-0
lines changed

2 files changed

+139
-0
lines changed

reports/re_run_report.rb

+16
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
# frozen_string_literal: true
1010

1111
require 'json'
12+
require 'csv'
1213
require_relative '../database_loader'
1314

1415
module Reports
@@ -57,6 +58,8 @@ def save_rerun_info(result, output, filename)
5758
case output
5859
when 'json'
5960
File.write(filename, result.to_json)
61+
when 'csv'
62+
create_csv(filename)
6063
when 'file'
6164
File.open(filename, 'a') do |f|
6265
raw_output(result, file_descriptor: f)
@@ -66,6 +69,19 @@ def save_rerun_info(result, output, filename)
6669
end
6770
end
6871

72+
def create_csv(filename)
73+
CSV.open(filename, 'wb') do |csv_input|
74+
csv_input << %w[PullRequest CheckSuiteId BambooJob GithubUsername RequestedAt Type TestsOrBuilds]
75+
@result.each_pair do |pull_requst, info|
76+
info[:check_suites].each do |cs|
77+
csv_input << [pull_requst,
78+
cs[:check_suite_id], cs[:bamboo_job], cs[:requested_at],
79+
cs[:github_username], cs[:type], cs[:tests_or_builds].join(',')]
80+
end
81+
end
82+
end
83+
end
84+
6985
def raw_output(result, file_descriptor: nil)
7086
result.each_pair do |pull_request, info|
7187
print("\nPull Request: ##{pull_request} - Reruns: #{info[:total]}", file_descriptor)

reports/re_run_report_by_user.rb

+123
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,123 @@
1+
# SPDX-License-Identifier: BSD-2-Clause
2+
#
3+
# rerun_report.rb
4+
# Part of NetDEF CI System
5+
#
6+
# Copyright (c) 2024 by
7+
# Network Device Education Foundation, Inc. ("NetDEF")
8+
#
9+
# frozen_string_literal: true
10+
11+
require 'json'
12+
require_relative '../database_loader'
13+
14+
module Reports
15+
class ReRunReportByUser
16+
def report(begin_date, end_date, user, output: 'print', filename: 'rerun_report.json')
17+
@result = {}
18+
19+
audit_retries = AuditRetry.where(github_username: user).order(:created_at)
20+
audit_retries = audit_retries.where(created_at: [begin_date..end_date]) unless begin_date.nil? or end_date.nil?
21+
22+
audit_retries
23+
.each do |audit_retry|
24+
puts audit_retry.inspect
25+
generate_result(audit_retry)
26+
end
27+
28+
save_rerun_info(@result, output, filename)
29+
end
30+
31+
private
32+
33+
def generate_result(audit_retry)
34+
report_initializer(audit_retry)
35+
36+
@result[audit_retry.check_suite.pull_request.github_pr_id][:total] += 1
37+
38+
check_suite_detail(audit_retry)
39+
end
40+
41+
def report_initializer(audit_retry)
42+
@result[audit_retry.check_suite.pull_request.github_pr_id] ||=
43+
{ total: 0, check_suites: [] }
44+
end
45+
46+
def check_suite_detail(audit_retry)
47+
@result[audit_retry.check_suite.pull_request.github_pr_id][:check_suites] <<
48+
{
49+
check_suite_id: audit_retry.check_suite.id,
50+
bamboo_job: audit_retry.check_suite.bamboo_ci_ref,
51+
github_username: audit_retry.github_username,
52+
tests_or_builds: audit_retry.ci_jobs.map(&:name),
53+
requested_at: audit_retry.created_at,
54+
type: audit_retry.retry_type
55+
}
56+
end
57+
58+
def save_rerun_info(result, output, filename)
59+
case output
60+
when 'json'
61+
File.write(filename, result.to_json)
62+
when 'csv'
63+
create_csv(filename)
64+
when 'file'
65+
File.open(filename, 'a') do |f|
66+
raw_output(result, file_descriptor: f)
67+
end
68+
else
69+
raw_output(result)
70+
end
71+
end
72+
73+
def create_csv(filename)
74+
CSV.open(filename, 'wb') do |csv_input|
75+
csv_input << %w[PullRequest CheckSuiteId BambooJob GithubUsername RequestedAt Type TestsOrBuilds]
76+
@result.each_pair do |pull_requst, info|
77+
info[:check_suites].each do |cs|
78+
csv_input << [pull_requst,
79+
cs[:check_suite_id], cs[:bamboo_job], cs[:requested_at],
80+
cs[:github_username], cs[:type], cs[:tests_or_builds].join(',')]
81+
end
82+
end
83+
end
84+
end
85+
86+
def raw_output(result, file_descriptor: nil)
87+
result.each_pair do |pull_request, info|
88+
print("\nPull Request: ##{pull_request} - Reruns: #{info[:total]}", file_descriptor)
89+
90+
info[:check_suites].each do |cs|
91+
print(" - [#{cs[:type]}] Check Suite: #{cs[:check_suite_id]} - Requested at: #{cs[:requested_at]}",
92+
file_descriptor)
93+
print(" - Bamboo Job: #{cs[:bamboo_job]}", file_descriptor)
94+
print(" - Github Username: #{cs[:github_username]}", file_descriptor)
95+
96+
print_test_build_retry(cs, file_descriptor)
97+
end
98+
end
99+
end
100+
101+
def print_test_build_retry(info, file_descriptor)
102+
return if info[:tests_or_builds].nil? or info[:tests_or_builds].empty?
103+
104+
print(' - Retried tests', file_descriptor)
105+
106+
info[:tests_or_builds].each do |entry|
107+
print(" - #{entry}", file_descriptor)
108+
end
109+
end
110+
111+
def print(line, file_descriptor)
112+
puts line
113+
file_descriptor&.write line
114+
end
115+
end
116+
end
117+
118+
return unless __FILE__ == $PROGRAM_NAME
119+
120+
begin_date = ARGV[1]
121+
end_date = ARGV[2]
122+
123+
Reports::ReRunReportByUser.new.report(begin_date, end_date, ARGV[0], output: ARGV[3], filename: ARGV[4])

0 commit comments

Comments
 (0)