Refactor DailyBuildGroupReportResultsFinder
Summary
Following up #270102 (closed) where we fixed a bug for Users who have default branch names that aren't master and were not getting any data in the .csv download for group code coverage.
Problem
We fixed our existing bug by fetching our daily coverage for the default branch.
This is quite slow today according to our SQL query.
Solution
We have an existing index which will improve the performance of this feature that we must use.
I think this is the time to refactor our DailyBuildGroupReportResultsFinder by making it more flexible:
This will help us to get rid of DailyBuildGroupReportResultsByGroupFinder and unify our business logic at a central place by following existing patterns we have today (ProjectsFinder).
Here a proposal for it:
def initialize(params: {}, current_user: nil)
@params = params
@current_user = current_user
end
def execute
return none unless query_allowed?
collection = Ci::DailyBuildGroupReportResult.recent_results(query_params, limit: params[:limit])
collection = filter_report_results(collection)
end
private
def filter_report_results(collection)
collection = by_coverage(collection)
collection = by_projects_ids(collection)
collection = by_ref_path(collection)
collection = by_date(collection)
collection
end
def by_coverage(items)
items.with_coverage
end
def by_projects_ids(items)
params[:project_ids].present? ? items.by_projects(params[:project_ids]) : items
end
def by_ref_path(items)
params[:ref_path].present? ? items.where(ref_path: params[:ref_path]) : items.with_default_branch
end
def by_date(items)
params[:start_date].present? ? items.by_date(params[:start_date]) : items
end
def query_allowed?
can?(current_user, :read_build_report_results, params[:project])
end- @drewcimino @iamricecake could you provide feedback on this please
🙇♂️ - @jheimbuck_gl @rickywiens could you help to schedule the work for this issue please?
Edited by Max Orefice