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
|
||||
return unless user
|
||||
|
||||
projects = user.heartbeats
|
||||
.select(:project, "COUNT(*) as heartbeat_count")
|
||||
.where.not(project: nil)
|
||||
.group(:project)
|
||||
.order(Arel.sql("COUNT(*) DESC"))
|
||||
base_heartbeats = user.heartbeats.where.not(project: nil)
|
||||
|
||||
project_data = projects.map do |heartbeat|
|
||||
project_name = heartbeat.project
|
||||
project_heartbeats = user.heartbeats.where(project: project_name)
|
||||
project_stats = base_heartbeats
|
||||
.select(
|
||||
: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,
|
||||
total_heartbeats: project_heartbeats.count,
|
||||
total_duration: project_heartbeats.duration_seconds || 0,
|
||||
first_heartbeat: project_heartbeats.minimum(:time),
|
||||
last_heartbeat: project_heartbeats.maximum(:time),
|
||||
languages: project_heartbeats.distinct.pluck(:language).compact,
|
||||
name: stat.project,
|
||||
total_heartbeats: stat.heartbeat_count,
|
||||
total_duration: durations[stat.project] || 0,
|
||||
first_heartbeat: stat.first_heartbeat,
|
||||
last_heartbeat: stat.last_heartbeat,
|
||||
languages: stat.languages || [],
|
||||
repo: repo_mapping&.repo_url,
|
||||
repo_mapping_id: repo_mapping&.id
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user