2020-03-18 09:09:31 +00:00
|
|
|
# frozen_string_literal: true
|
|
|
|
|
|
|
|
module Ci
|
2020-05-06 15:09:42 +00:00
|
|
|
class DailyBuildGroupReportResultService
|
2020-03-18 09:09:31 +00:00
|
|
|
def execute(pipeline)
|
2020-05-06 15:09:42 +00:00
|
|
|
DailyBuildGroupReportResult.upsert_reports(coverage_reports(pipeline))
|
2020-03-18 09:09:31 +00:00
|
|
|
end
|
|
|
|
|
|
|
|
private
|
|
|
|
|
|
|
|
def coverage_reports(pipeline)
|
|
|
|
base_attrs = {
|
|
|
|
project_id: pipeline.project_id,
|
|
|
|
ref_path: pipeline.source_ref_path,
|
|
|
|
date: pipeline.created_at.to_date,
|
2020-10-26 18:08:27 +00:00
|
|
|
last_pipeline_id: pipeline.id,
|
|
|
|
default_branch: pipeline.default_branch?
|
2020-03-18 09:09:31 +00:00
|
|
|
}
|
|
|
|
|
2020-04-03 15:09:56 +00:00
|
|
|
aggregate(pipeline.builds.with_coverage).map do |group_name, group|
|
2020-03-18 09:09:31 +00:00
|
|
|
base_attrs.merge(
|
2020-05-06 15:09:42 +00:00
|
|
|
group_name: group_name,
|
2020-05-15 06:08:40 +00:00
|
|
|
data: {
|
|
|
|
'coverage' => average_coverage(group)
|
|
|
|
}
|
2020-03-18 09:09:31 +00:00
|
|
|
)
|
|
|
|
end
|
|
|
|
end
|
2020-04-03 15:09:56 +00:00
|
|
|
|
|
|
|
def aggregate(builds)
|
|
|
|
builds.group_by(&:group_name)
|
|
|
|
end
|
|
|
|
|
|
|
|
def average_coverage(group)
|
|
|
|
total_coverage = group.reduce(0.0) { |sum, build| sum + build.coverage }
|
|
|
|
(total_coverage / group.size).round(2)
|
|
|
|
end
|
2020-03-18 09:09:31 +00:00
|
|
|
end
|
|
|
|
end
|