forked from midou/invidious
Move DB queries related to statistics in a separate module
This commit is contained in:
parent
46d08237c6
commit
d94d4c2045
49
src/invidious/database/statistics.cr
Normal file
49
src/invidious/database/statistics.cr
Normal file
@ -0,0 +1,49 @@
|
|||||||
|
require "./base.cr"
|
||||||
|
|
||||||
|
module Invidious::Database::Statistics
|
||||||
|
extend self
|
||||||
|
|
||||||
|
# -------------------
|
||||||
|
# User stats
|
||||||
|
# -------------------
|
||||||
|
|
||||||
|
def count_users_total : Int64
|
||||||
|
request = <<-SQL
|
||||||
|
SELECT count(*) FROM users
|
||||||
|
SQL
|
||||||
|
|
||||||
|
PG_DB.query_one(request, as: Int64)
|
||||||
|
end
|
||||||
|
|
||||||
|
def count_users_active_1m : Int64
|
||||||
|
request = <<-SQL
|
||||||
|
SELECT count(*) FROM users
|
||||||
|
WHERE CURRENT_TIMESTAMP - updated < '6 months'
|
||||||
|
SQL
|
||||||
|
|
||||||
|
PG_DB.query_one(request, as: Int64)
|
||||||
|
end
|
||||||
|
|
||||||
|
def count_users_active_6m : Int64
|
||||||
|
request = <<-SQL
|
||||||
|
SELECT count(*) FROM users
|
||||||
|
WHERE CURRENT_TIMESTAMP - updated < '1 month'
|
||||||
|
SQL
|
||||||
|
|
||||||
|
PG_DB.query_one(request, as: Int64)
|
||||||
|
end
|
||||||
|
|
||||||
|
# -------------------
|
||||||
|
# Channel stats
|
||||||
|
# -------------------
|
||||||
|
|
||||||
|
def channel_last_update : Time?
|
||||||
|
request = <<-SQL
|
||||||
|
SELECT updated FROM channels
|
||||||
|
ORDER BY updated DESC
|
||||||
|
LIMIT 1
|
||||||
|
SQL
|
||||||
|
|
||||||
|
PG_DB.query_one?(request, as: Time)
|
||||||
|
end
|
||||||
|
end
|
@ -47,12 +47,14 @@ class Invidious::Jobs::StatisticsRefreshJob < Invidious::Jobs::BaseJob
|
|||||||
|
|
||||||
private def refresh_stats
|
private def refresh_stats
|
||||||
users = STATISTICS.dig("usage", "users").as(Hash(String, Int64))
|
users = STATISTICS.dig("usage", "users").as(Hash(String, Int64))
|
||||||
users["total"] = db.query_one("SELECT count(*) FROM users", as: Int64)
|
|
||||||
users["activeHalfyear"] = db.query_one("SELECT count(*) FROM users WHERE CURRENT_TIMESTAMP - updated < '6 months'", as: Int64)
|
users["total"] = Invidious::Database::Statistics.count_users_total
|
||||||
users["activeMonth"] = db.query_one("SELECT count(*) FROM users WHERE CURRENT_TIMESTAMP - updated < '1 month'", as: Int64)
|
users["activeHalfyear"] = Invidious::Database::Statistics.count_users_active_1m
|
||||||
|
users["activeMonth"] = Invidious::Database::Statistics.count_users_active_6m
|
||||||
|
|
||||||
STATISTICS["metadata"] = {
|
STATISTICS["metadata"] = {
|
||||||
"updatedAt" => Time.utc.to_unix,
|
"updatedAt" => Time.utc.to_unix,
|
||||||
"lastChannelRefreshedAt" => db.query_one?("SELECT updated FROM channels ORDER BY updated DESC LIMIT 1", as: Time).try &.to_unix || 0_i64,
|
"lastChannelRefreshedAt" => Invidious::Database::Statistics.channel_last_update.try &.to_unix || 0_i64,
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
Loading…
Reference in New Issue
Block a user