Spaces:
Build error
Build error
class InfoController < ApplicationController | |
@@license ||= File.read("LICENSE") | |
@@isolate ||= `isolate --version` | |
def system_info | |
render json: SystemInfo.sys_info | |
end | |
def config_info | |
render json: Config.config_info | |
end | |
def about | |
render json: { | |
version: ENV["JUDGE0_VERSION"], | |
homepage: ENV["JUDGE0_HOMEPAGE"], | |
source_code: ENV["JUDGE0_SOURCE_CODE"], | |
maintainer: ENV["JUDGE0_MAINTAINER"] | |
} | |
end | |
def version | |
render plain: ENV["JUDGE0_VERSION"] | |
end | |
def license | |
render plain: @@license | |
end | |
def isolate | |
render plain: @@isolate | |
end | |
def statistics | |
Rails.cache.delete("statistics") if params[:invalidate_cache] == "true" | |
@@cache_duration ||= 10.minutes | |
render json: Rails.cache.fetch("statistics", expires_in: @@cache_duration) { | |
@@language_name ||= Hash[Language.unscoped.pluck(:id, :name)] | |
count_by_language = [] | |
Submission.unscoped.group(:language_id).count.each do |language_id, count| | |
count_by_language << { | |
language: { | |
id: language_id, | |
name: @@language_name[language_id] | |
}, | |
count: count | |
} | |
end | |
count_by_language = count_by_language.sort_by { |x| x[:count] }.reverse | |
count_by_status = [] | |
Submission.unscoped.group(:status_id).count.each do |status_id, count| | |
count_by_status << { | |
status: { | |
id: status_id, | |
name: Status.find_by(id: status_id).name # Not a SQL query! | |
}, | |
count: count | |
} | |
end | |
count_by_status = count_by_status.sort_by{ |x| x[:count] }.reverse | |
now = DateTime.now | |
today = DateTime.now.beginning_of_day.to_date | |
last_30_days = Submission.unscoped.group("created_at::DATE").where("created_at::DATE >= ?", today - 30).count | |
last_30_days[today] ||= 0 | |
last_30_days_result = {} | |
(today-30...today).each do |day| | |
last_30_days_result[day.to_date] = last_30_days[day] || 0 | |
end | |
last_30_days_result = last_30_days_result.sort.reverse.to_h | |
database_size = ActiveRecord::Base.connection.execute( | |
"SELECT | |
pg_size_pretty(pg_database_size('#{ENV['POSTGRES_DB']}')) AS size_pretty, | |
pg_database_size('#{ENV['POSTGRES_DB']}') AS size_in_bytes | |
" | |
).to_a[0] | |
{ | |
created_at: now, | |
cached_until: now + @@cache_duration, | |
submissions: { | |
total: Submission.count, | |
today: last_30_days[today], | |
last_30_days: last_30_days_result | |
}, | |
languages: count_by_language, | |
statuses: count_by_status, | |
database: { | |
size_pretty: database_size["size_pretty"], | |
size_in_bytes: database_size["size_in_bytes"] | |
} | |
} | |
} | |
end | |
end |