parent
713b249fa5
commit
c00336e7b5
|
@ -0,0 +1,25 @@
|
|||
class StatisticController < ApplicationController
|
||||
|
||||
# 平台概况
|
||||
def platform_profile
|
||||
@platform_user_query = Statistic::PlatformUserQuery.new(params).call
|
||||
@platform_project_query = Statistic::PlatformProjectQuery.new(params).call
|
||||
@platform_course_query = Statistic::PlatformCourseQuery.new(params).call
|
||||
end
|
||||
|
||||
# 平台代码提交数据
|
||||
def platform_code
|
||||
@platform_pull_request_query = Statistic::PlatformPullRequestQuery.new(params).call
|
||||
@platform_commit_query = Statistic::PlatformCommitQuery.new(params,current_user).call
|
||||
end
|
||||
|
||||
# 项目案例活跃度排行榜
|
||||
def active_project_rank
|
||||
@active_project_rank_query = Statistic::ActiveProjectRankQuery.new(params, current_user).call
|
||||
end
|
||||
|
||||
# 开发者活跃度排行榜
|
||||
def active_developer_rank
|
||||
@active_developer_rank_query = Statistic::ActiveDeveloperRankQuery.new(params, current_user).call
|
||||
end
|
||||
end
|
|
@ -0,0 +1,12 @@
|
|||
module Trustie
|
||||
class Database < ActiveRecord::Base
|
||||
self.abstract_class = true
|
||||
|
||||
def self.set_connection
|
||||
trustie_server_config = Rails.configuration.database_configuration[Rails.env]["trustie_web_server"]
|
||||
raise 'trustie database config missing' if trustie_server_config.blank?
|
||||
|
||||
establish_connection trustie_server_config
|
||||
end
|
||||
end
|
||||
end
|
|
@ -0,0 +1,4 @@
|
|||
class Trustie::Course < Trustie::Database
|
||||
has_many :course_groups, class_name: "Trustie::CourseGroup"
|
||||
has_many :homework_commons, class_name: "Trustie::HomeworkCommon"
|
||||
end
|
|
@ -0,0 +1,3 @@
|
|||
class Trustie::CourseGroup < Trustie::Database
|
||||
belongs_to :course, class_name: "Trustie::Course"
|
||||
end
|
|
@ -0,0 +1,3 @@
|
|||
class Trustie::HomeworkCommon < Trustie::Database
|
||||
belongs_to :course, class_name: "Trustie::Course"
|
||||
end
|
|
@ -0,0 +1,34 @@
|
|||
class Statistic::ActiveDeveloperRankQuery < ApplicationQuery
|
||||
attr_reader :params, :user
|
||||
|
||||
def initialize(params, user)
|
||||
@params = params
|
||||
@user = user
|
||||
end
|
||||
|
||||
def call
|
||||
begin
|
||||
result = Gitea::Activity::DevelopService.call(start_time, end_time, top, user.gitea_token)
|
||||
|
||||
return result["develop"]
|
||||
rescue
|
||||
return []
|
||||
end
|
||||
end
|
||||
|
||||
private
|
||||
def start_time
|
||||
params.fetch(:start_time, Time.now.beginning_of_day.to_i).to_i
|
||||
end
|
||||
|
||||
def end_time
|
||||
params.fetch(:end_time, Time.now.to_i).to_i
|
||||
end
|
||||
|
||||
def top
|
||||
top = params.fetch(:top, 5).to_i
|
||||
top = top >= 20 ? 20 : top
|
||||
top = top <= 0 ? 5 : top
|
||||
top
|
||||
end
|
||||
end
|
|
@ -0,0 +1,34 @@
|
|||
class Statistic::ActiveProjectRankQuery < ApplicationQuery
|
||||
attr_reader :params, :user
|
||||
|
||||
def initialize(params, user)
|
||||
@params = params
|
||||
@user = user
|
||||
end
|
||||
|
||||
def call
|
||||
begin
|
||||
result = Gitea::Activity::ProjectService.call(start_time, end_time, top, user.gitea_token)
|
||||
|
||||
return result["project"]
|
||||
rescue
|
||||
return []
|
||||
end
|
||||
end
|
||||
|
||||
private
|
||||
def start_time
|
||||
params.fetch(:start_time, Time.now.beginning_of_day.to_i).to_i
|
||||
end
|
||||
|
||||
def end_time
|
||||
params.fetch(:end_time, Time.now.to_i).to_i
|
||||
end
|
||||
|
||||
def top
|
||||
top = params.fetch(:top, 5).to_i
|
||||
top = top >= 20 ? 20 : top
|
||||
top = top <= 0 ? 5 : top
|
||||
top
|
||||
end
|
||||
end
|
|
@ -0,0 +1,28 @@
|
|||
class Statistic::PlatformCommitQuery < ApplicationQuery
|
||||
attr_reader :params, :user
|
||||
|
||||
def initialize(params, user)
|
||||
@params = params
|
||||
@user = user
|
||||
end
|
||||
|
||||
def call
|
||||
begin
|
||||
result = Gitea::Activity::GetService.call(start_time, end_time, user.gitea_token)
|
||||
result = result["commit"]
|
||||
|
||||
return [result["total_count"], result["active_count"]]
|
||||
rescue
|
||||
return [0, 0]
|
||||
end
|
||||
end
|
||||
|
||||
private
|
||||
def start_time
|
||||
params.fetch(:start_time, Time.now.beginning_of_day.to_i).to_i
|
||||
end
|
||||
|
||||
def end_time
|
||||
params.fetch(:end_time, Time.now.to_i).to_i
|
||||
end
|
||||
end
|
|
@ -0,0 +1,29 @@
|
|||
class Statistic::PlatformCourseQuery < ApplicationQuery
|
||||
attr_reader :params
|
||||
|
||||
def initialize(params)
|
||||
@params = params
|
||||
end
|
||||
|
||||
def call
|
||||
Trustie::Database.set_connection
|
||||
course_total_count = Trustie::Course.count
|
||||
course_active_count = Trustie::Course.joins(:course_groups)
|
||||
.where("course_groups.created_at > ? and course_groups.created_at < ?", start_time, end_time).count
|
||||
+
|
||||
Trustie::Course.joins(:homework_commons)
|
||||
.where("homework_commons.created_at > ? and homework_commons.created_at < ?", start_time, end_time).count
|
||||
course_fresh_count = Trustie::Course.where("created_at > ? and created_at < ?", start_time, end_time).count
|
||||
|
||||
[course_total_count, course_active_count, course_fresh_count]
|
||||
end
|
||||
|
||||
private
|
||||
def start_time
|
||||
Time.at(params.fetch(:start_time, Time.now.beginning_of_day.to_i).to_i)
|
||||
end
|
||||
|
||||
def end_time
|
||||
Time.at(params.fetch(:end_time, Time.now.to_i).to_i)
|
||||
end
|
||||
end
|
|
@ -0,0 +1,24 @@
|
|||
class Statistic::PlatformProjectQuery < ApplicationQuery
|
||||
attr_reader :params
|
||||
|
||||
def initialize(params)
|
||||
@params = params
|
||||
end
|
||||
|
||||
def call
|
||||
project_total_count = Project.count
|
||||
project_active_count = Project.where("updated_on > ? and updated_on < ?", start_time, end_time).count
|
||||
project_fresh_count = Project.where("created_on > ? and created_on < ?", start_time, end_time).count
|
||||
|
||||
[project_total_count, project_active_count, project_fresh_count]
|
||||
end
|
||||
|
||||
private
|
||||
def start_time
|
||||
Time.at(params.fetch(:start_time, Time.now.beginning_of_day.to_i).to_i)
|
||||
end
|
||||
|
||||
def end_time
|
||||
Time.at(params.fetch(:end_time, Time.now.to_i).to_i)
|
||||
end
|
||||
end
|
|
@ -0,0 +1,23 @@
|
|||
class Statistic::PlatformPullRequestQuery < ApplicationQuery
|
||||
attr_reader :params
|
||||
|
||||
def initialize(params)
|
||||
@params = params
|
||||
end
|
||||
|
||||
def call
|
||||
pull_request_total_count = PullRequest.count
|
||||
pull_request_fresh_count = PullRequest.where("created_at > ? and created_at < ?", start_time, end_time).count
|
||||
|
||||
[pull_request_total_count, pull_request_fresh_count]
|
||||
end
|
||||
|
||||
private
|
||||
def start_time
|
||||
Time.at(params.fetch(:start_time, Time.now.beginning_of_day.to_i).to_i)
|
||||
end
|
||||
|
||||
def end_time
|
||||
Time.at(params.fetch(:end_time, Time.now.to_i).to_i)
|
||||
end
|
||||
end
|
|
@ -0,0 +1,24 @@
|
|||
class Statistic::PlatformUserQuery < ApplicationQuery
|
||||
attr_reader :params
|
||||
|
||||
def initialize(params)
|
||||
@params = params
|
||||
end
|
||||
|
||||
def call
|
||||
user_total_count = User.count
|
||||
user_active_count = User.where("last_login_on > ? and last_login_on < ?", start_time, end_time).count
|
||||
user_fresh_count = User.where("created_on > ? and created_on < ?", start_time, end_time).count
|
||||
|
||||
[user_total_count, user_active_count, user_fresh_count]
|
||||
end
|
||||
|
||||
private
|
||||
def start_time
|
||||
Time.at(params.fetch(:start_time, Time.now.beginning_of_day.to_i).to_i)
|
||||
end
|
||||
|
||||
def end_time
|
||||
Time.at(params.fetch(:end_time, Time.now.to_i).to_i)
|
||||
end
|
||||
end
|
|
@ -0,0 +1,24 @@
|
|||
class Gitea::Activity::DevelopService < Gitea::ClientService
|
||||
attr_reader :from, :to, :top, :token
|
||||
|
||||
def initialize(from, to, top, token)
|
||||
@from = from
|
||||
@to = to
|
||||
@top = top
|
||||
@token = token
|
||||
end
|
||||
|
||||
def call
|
||||
response = get(url, params)
|
||||
render_200_response(response)
|
||||
end
|
||||
|
||||
private
|
||||
def params
|
||||
Hash.new.merge(from: from, to: to, top: top, token: token)
|
||||
end
|
||||
|
||||
def url
|
||||
"/activity/develop".freeze
|
||||
end
|
||||
end
|
|
@ -0,0 +1,23 @@
|
|||
class Gitea::Activity::GetService < Gitea::ClientService
|
||||
attr_reader :from, :to, :token
|
||||
|
||||
def initialize(from, to, token)
|
||||
@from = from
|
||||
@to = to
|
||||
@token = token
|
||||
end
|
||||
|
||||
def call
|
||||
response = get(url, params)
|
||||
render_200_response(response)
|
||||
end
|
||||
|
||||
private
|
||||
def params
|
||||
Hash.new.merge(from: from, to: to, token: token)
|
||||
end
|
||||
|
||||
def url
|
||||
"/activity".freeze
|
||||
end
|
||||
end
|
|
@ -0,0 +1,24 @@
|
|||
class Gitea::Activity::ProjectService < Gitea::ClientService
|
||||
attr_reader :from, :to, :top, :token
|
||||
|
||||
def initialize(from, to, top, token)
|
||||
@from = from
|
||||
@to = to
|
||||
@top = top
|
||||
@token = token
|
||||
end
|
||||
|
||||
def call
|
||||
response = get(url, params)
|
||||
render_200_response(response)
|
||||
end
|
||||
|
||||
private
|
||||
def params
|
||||
Hash.new.merge(from: from, to: to, top: top, token: token)
|
||||
end
|
||||
|
||||
def url
|
||||
"/activity/project".freeze
|
||||
end
|
||||
end
|
|
@ -0,0 +1,13 @@
|
|||
json.total_count @active_developer_rank_query.size
|
||||
json.developers @active_developer_rank_query.each_with_index.to_a do |item, index|
|
||||
user = User.find_by(login: item["develop_name"])
|
||||
projects = user.projects
|
||||
json.no index + 1
|
||||
json.login item["develop_name"]
|
||||
json.name user.full_name
|
||||
json.develop_projects projects do |project|
|
||||
json.(project, :name, :identifier, :description)
|
||||
end
|
||||
json.total_commit_count item["total_count"]
|
||||
json.active_commit_count item["active_count"]
|
||||
end
|
|
@ -0,0 +1,10 @@
|
|||
json.total_count @active_project_rank_query.size
|
||||
json.projects @active_project_rank_query.each_with_index.to_a do |item, index|
|
||||
project = Project.find_by(identifier: item["name"])
|
||||
json.no index + 1
|
||||
json.identifier item["name"]
|
||||
json.name project.name
|
||||
json.total_commit_count item["total_count"]
|
||||
json.active_commit_count item["active_count"]
|
||||
json.member_count project.members.size
|
||||
end
|
|
@ -0,0 +1,9 @@
|
|||
json.commit do
|
||||
json.total_count @platform_commit_query[0]
|
||||
json.fresh_count @platform_commit_query[1]
|
||||
end
|
||||
|
||||
json.pull_request do
|
||||
json.total_count @platform_pull_request_query[0]
|
||||
json.fresh_count @platform_pull_request_query[1]
|
||||
end
|
|
@ -0,0 +1,17 @@
|
|||
json.user do
|
||||
json.total_count @platform_user_query[0]
|
||||
json.active_count @platform_user_query[1]
|
||||
json.fresh_count @platform_user_query[2]
|
||||
end
|
||||
|
||||
json.project do
|
||||
json.total_count @platform_project_query[0]
|
||||
json.active_count @platform_project_query[1]
|
||||
json.fresh_count @platform_project_query[2]
|
||||
end
|
||||
|
||||
json.course do
|
||||
json.total_count @platform_course_query[0]
|
||||
json.active_count @platform_course_query[1]
|
||||
json.fresh_count @platform_course_query[2]
|
||||
end
|
|
@ -69,6 +69,14 @@ Rails.application.routes.draw do
|
|||
# end
|
||||
end
|
||||
|
||||
resources :statistic, only: [:index] do
|
||||
collection do
|
||||
get :platform_profile
|
||||
get :platform_code
|
||||
get :active_project_rank
|
||||
get :active_developer_rank
|
||||
end
|
||||
end
|
||||
resources :sync_forge, only: [:create] do
|
||||
collection do
|
||||
post :sync_users
|
||||
|
|
Loading…
Reference in New Issue