mirror of
https://github.com/SrIzan10/hc-harbor.git
synced 2026-05-01 10:45:21 +00:00
n+1 on admin project lookup (#675)
This commit is contained in:
@@ -158,25 +158,34 @@ module Api
|
|||||||
user = find_user_by_id
|
user = find_user_by_id
|
||||||
return unless user
|
return unless user
|
||||||
|
|
||||||
projects = user.heartbeats
|
base_heartbeats = user.heartbeats.where.not(project: nil)
|
||||||
.select(:project, "COUNT(*) as heartbeat_count")
|
|
||||||
.where.not(project: nil)
|
|
||||||
.group(:project)
|
|
||||||
.order(Arel.sql("COUNT(*) DESC"))
|
|
||||||
|
|
||||||
project_data = projects.map do |heartbeat|
|
project_stats = base_heartbeats
|
||||||
project_name = heartbeat.project
|
.select(
|
||||||
project_heartbeats = user.heartbeats.where(project: project_name)
|
:project,
|
||||||
|
"COUNT(*) as heartbeat_count",
|
||||||
|
"MIN(time) as first_heartbeat",
|
||||||
|
"MAX(time) as last_heartbeat",
|
||||||
|
"ARRAY_AGG(DISTINCT language) FILTER (WHERE language IS NOT NULL) as languages"
|
||||||
|
)
|
||||||
|
.group(:project)
|
||||||
|
.order(Arel.sql("COUNT(*) DESC"))
|
||||||
|
|
||||||
repo_mapping = user.project_repo_mappings.find_by(project_name: project_name)
|
durations = base_heartbeats.group(:project).duration_seconds
|
||||||
|
|
||||||
|
repo_mappings = user.project_repo_mappings
|
||||||
|
.where(project_name: project_stats.map(&:project))
|
||||||
|
.index_by(&:project_name)
|
||||||
|
|
||||||
|
project_data = project_stats.map do |stat|
|
||||||
|
repo_mapping = repo_mappings[stat.project]
|
||||||
{
|
{
|
||||||
name: project_name,
|
name: stat.project,
|
||||||
total_heartbeats: project_heartbeats.count,
|
total_heartbeats: stat.heartbeat_count,
|
||||||
total_duration: project_heartbeats.duration_seconds || 0,
|
total_duration: durations[stat.project] || 0,
|
||||||
first_heartbeat: project_heartbeats.minimum(:time),
|
first_heartbeat: stat.first_heartbeat,
|
||||||
last_heartbeat: project_heartbeats.maximum(:time),
|
last_heartbeat: stat.last_heartbeat,
|
||||||
languages: project_heartbeats.distinct.pluck(:language).compact,
|
languages: stat.languages || [],
|
||||||
repo: repo_mapping&.repo_url,
|
repo: repo_mapping&.repo_url,
|
||||||
repo_mapping_id: repo_mapping&.id
|
repo_mapping_id: repo_mapping&.id
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user