fix: statistics develop load slowly

This commit is contained in:
vilet.yy 2021-06-07 14:17:12 +08:00
parent 4754993e2a
commit d5a65112ca
1 changed files with 121 additions and 24 deletions

View File

@ -162,29 +162,126 @@ class Users::StatisticsController < Users::BaseController
end
def preload_develop_data
if params[:start_time].present? && params[:end_time].present?
# 用户被follow数量
@follow_count = time_filter(Watcher.where(watchable: observed_user), 'created_at').count
@platform_follow_count = time_filter(Watcher.where(watchable_type: 'User'), 'created_at').count
@follow_count = Rails.cache.fetch("user-follow-count-#{observed_user.id}-start:#{params[:start_time]}-end:#{params[:end_time]}-#{Watcher.where(watchable: observed_user).maximum('created_at').to_i}") do
time_filter(Watcher.where(watchable: observed_user), 'created_at').count
end
@platform_follow_count = Rails.cache.fetch("platform-follow-count-start:#{params[:start_time]}-end:#{params[:end_time]}-#{Watcher.where(watchable_type: 'User').maximum('created_at').to_i}") do
time_filter(Watcher.where(watchable_type: 'User'), 'created_at').count
end
# 用户pr数量
@pullrequest_count = time_filter(PullRequest.where(user_id: observed_user.id), 'created_at').count
@platform_pullrequest_count = time_filter(PullRequest, 'created_at').count
@pullrequest_count = Rails.cache.fetch("user-pullrequest-count-#{observed_user.id}-start:#{params[:start_time]}-end:#{params[:end_time]}-#{PullRequest.where(user_id: observed_user.id).maximum('created_at').to_i}") do
time_filter(PullRequest.where(user_id: observed_user.id), 'created_at').count
end
@platform_pullrequest_count = Rails.cache.fetch("platform-pullrequest-count-start:#{params[:start_time]}-end:#{params[:end_time]}-#{PullRequest.maximum('created_at').to_i}") do
time_filter(PullRequest, 'created_at').count
end
# 用户issue数量
@issues_count = time_filter(Issue.where(author_id: observed_user.id), 'created_on').count
@platform_issues_count = time_filter(Issue, 'created_on').count
# 用户总项目数 @fork_count + @project_watchers_count + @project_praises_count
@project_count = filter_member_projects_by_role("Owner").count
@platform_project_count = time_filter(Project, 'created_on').count
@issues_count = Rails.cache.fetch("user-issue-count-#{observed_user.id}-start:#{params[:start_time]}-end:#{params[:end_time]}-#{Issue.where(author_id: observed_user.id).maximum('created_on').to_i}") do
time_filter(Issue.where(author_id: observed_user.id), 'created_on').count
end
@platform_issues_count = Rails.cache.fetch("platform-issue-count-start:#{params[:start_time]}-end:#{params[:end_time]}-#{Issue.maximum('created_on').to_i}") do
time_filter(Issue, 'created_on').count
end
# 用户总项目数
@project_count = Rails.cache.fetch("user-project-count-#{observed_user.id}-start:#{params[:start_time]}-end:#{params[:end_time]}-#{Project.where(user_id:observed_user.id).maximum('created_on').to_i}") do
time_filter(Project.where(user_id:observed_user.id), 'created_on').count
end
@platform_project_count = Rails.cache.fetch("platform-project-count-start:#{params[:start_time]}-end:#{params[:end_time]}-#{Project.maximum('created_on').to_i}") do
time_filter(Project, 'created_on').count
end
# 用户项目被fork数量
@fork_count = filter_member_projects_by_role("Owner").sum("forked_count")
@platform_fork_count = time_filter(Project, 'created_on').sum("forked_count")
@fork_count = Rails.cache.fetch("user-fork-count-#{observed_user.id}-start:#{params[:start_time]}-end:#{params[:end_time]}-#{ForkUser.joins(:project).where(projects: {user_id: observed_user.id}).maximum('created_at').to_i}") do
time_filter(Project.where(user_id:observed_user.id), 'created_on').sum("forked_count")
end
@platform_fork_count = Rails.cache.fetch("platform-fork-count-start:#{params[:start_time]}-end:#{params[:end_time]}-#{ForkUser.maximum('created_at').to_i}") do
time_filter(Project, 'created_on').sum("forked_count")
end
# 用户项目关注数
@project_watchers_count = filter_member_projects_by_role("Owner").sum("watchers_count")
@platform_project_watchers_count = time_filter(Project, 'created_on').sum("watchers_count")
@project_watchers_count = Rails.cache.fetch("user-watchers-count-start:#{params[:start_time]}-end:#{params[:end_time]}-#{observed_user.id}-#{Watcher.where(watchable_type: 'Project', watchable_id: observed_user.projects).maximum('created_at').to_i}") do
time_filter(Project.where(user_id: observed_user.id), 'created_on').sum("watchers_count")
end
@platform_project_watchers_count = Rails.cache.fetch("platform-watchers-count-start:#{params[:start_time]}-end:#{params[:end_time]}-#{Watcher.where(watchable_type: 'Project').maximum('created_at').to_i}") do
time_filter(Project, 'created_on').sum("watchers_count")
end
# 用户项目点赞数
@project_praises_count = filter_member_projects_by_role("Owner").sum("praises_count")
@platform_project_praises_count = time_filter(Project, 'created_on').sum("praises_count")
@project_praises_count = Rails.cache.fetch("user-praises-count-#{observed_user.id}-start:#{params[:start_time]}-end:#{params[:end_time]}-#{PraiseTread.where(praise_tread_object_type: 'Project', praise_tread_object_id: observed_user.projects).maximum('created_at').to_i}") do
time_filter(Project.where(user_id: observed_user.id), 'created_on').sum("praises_count")
end
@platform_project_praises_count = Rails.cache.fetch("user-praises-count-#{observed_user.id}-start:#{params[:start_time]}-end:#{params[:end_time]}-#{PraiseTread.where(praise_tread_object_type: 'Project', praise_tread_object_id: observed_user.projects).maximum('created_at').to_i}") do
time_filter(Project, 'created_on').sum("praises_count")
end
# 用户不同语言项目数量
@project_languages_count = filter_member_projects_by_role("Owner").joins(:project_language).group("project_languages.name").count
@platform_project_languages_count = time_filter(Project, 'created_on').joins(:project_language).group("project_languages.name").count
@project_languages_count = Rails.cache.fetch("user-languages-count-#{observed_user.id}-start:#{params[:start_time]}-end:#{params[:end_time]}-#{Project.where(user_id:observed_user.id).maximum('created_on').to_i}") do
time_filter(Project.where(user_id: observed_user.id), 'created_on').joins(:project_language).group("project_languages.name").count
end
@platform_project_languages_count = Rails.cache.fetch("platform-languages-count-start:#{params[:start_time]}-end:#{params[:end_time]}-#{Project.maximum('created_on').to_i}") do
time_filter(Project, 'created_on').joins(:project_language).group("project_languages.name").count
end
else
# 用户被follow数量
@follow_count = Rails.cache.fetch("user-follow-count-#{observed_user.id}-#{Watcher.where(watchable: observed_user).maximum('created_at').to_i}") do
time_filter(Watcher.where(watchable: observed_user), 'created_at').count
end
@platform_follow_count = Rails.cache.fetch("platform-follow-count-#{Watcher.where(watchable_type: 'User').maximum('created_at').to_i}") do
time_filter(Watcher.where(watchable_type: 'User'), 'created_at').count
end
# 用户pr数量
@pullrequest_count = Rails.cache.fetch("user-pullrequest-count-#{observed_user.id}-#{PullRequest.where(user_id: observed_user.id).maximum('created_at').to_i}") do
time_filter(PullRequest.where(user_id: observed_user.id), 'created_at').count
end
@platform_pullrequest_count = Rails.cache.fetch("platform-pullrequest-count-#{PullRequest.maximum('created_at').to_i}") do
time_filter(PullRequest, 'created_at').count
end
# 用户issue数量
@issues_count = Rails.cache.fetch("user-issue-count-#{observed_user.id}-#{Issue.where(author_id: observed_user.id).maximum('created_on').to_i}") do
time_filter(Issue.where(author_id: observed_user.id), 'created_on').count
end
@platform_issues_count = Rails.cache.fetch("platform-issue-count-#{Issue.maximum('created_on').to_i}") do
time_filter(Issue, 'created_on').count
end
# 用户总项目数
@project_count = Rails.cache.fetch("user-project-count-#{observed_user.id}-#{Project.where(user_id:observed_user.id).maximum('created_on').to_i}") do
time_filter(Project.where(user_id:observed_user.id), 'created_on').count
end
@platform_project_count = Rails.cache.fetch("platform-project-count-#{Project.maximum('created_on').to_i}") do
time_filter(Project, 'created_on').count
end
# 用户项目被fork数量
@fork_count = Rails.cache.fetch("user-fork-count-#{observed_user.id}-#{ForkUser.joins(:project).where(projects: {user_id: observed_user.id}).maximum('created_at').to_i}") do
time_filter(Project.where(user_id:observed_user.id), 'created_on').sum("forked_count")
end
@platform_fork_count = Rails.cache.fetch("platform-fork-count-#{ForkUser.maximum('created_at').to_i}") do
time_filter(Project, 'created_on').sum("forked_count")
end
# 用户项目关注数
@project_watchers_count = Rails.cache.fetch("user-watchers-count-#{observed_user.id}-#{Watcher.where(watchable_type: 'Project', watchable_id: observed_user.projects).maximum('created_at').to_i}") do
time_filter(Project.where(user_id: observed_user.id), 'created_on').sum("watchers_count")
end
@platform_project_watchers_count = Rails.cache.fetch("platform-watchers-count-#{Watcher.where(watchable_type: 'Project').maximum('created_at').to_i}") do
time_filter(Project, 'created_on').sum("watchers_count")
end
# 用户项目点赞数
@project_praises_count = Rails.cache.fetch("user-praises-count-#{observed_user.id}-#{PraiseTread.where(praise_tread_object_type: 'Project', praise_tread_object_id: observed_user.projects).maximum('created_at').to_i}") do
time_filter(Project.where(user_id: observed_user.id), 'created_on').sum("praises_count")
end
@platform_project_praises_count = Rails.cache.fetch("user-praises-count-#{observed_user.id}-#{PraiseTread.where(praise_tread_object_type: 'Project', praise_tread_object_id: observed_user.projects).maximum('created_at').to_i}") do
time_filter(Project, 'created_on').sum("praises_count")
end
# 用户不同语言项目数量
@project_languages_count = Rails.cache.fetch("user-languages-count-#{observed_user.id}-#{Project.where(user_id:observed_user.id).maximum('created_on').to_i}") do
time_filter(Project.where(user_id: observed_user.id), 'created_on').joins(:project_language).group("project_languages.name").count
end
@platform_project_languages_count = Rails.cache.fetch("platform-languages-count-#{Project.maximum('created_on').to_i}") do
time_filter(Project, 'created_on').joins(:project_language).group("project_languages.name").count
end
end
end
end