Jobs: add hourly cleaning of expired nonces/cached videos

This commit is contained in:
Samantaz Fox 2022-09-01 00:10:16 +02:00
parent a7d9df5516
commit d6a7df3adc
No known key found for this signature in database
GPG Key ID: F42821059186176E
4 changed files with 44 additions and 1 deletions

View File

@ -172,6 +172,8 @@ end
CONNECTION_CHANNEL = Channel({Bool, Channel(PQ::Notification)}).new(32)
Invidious::Jobs.register Invidious::Jobs::NotificationJob.new(CONNECTION_CHANNEL, CONFIG.database_url)
Invidious::Jobs.register Invidious::Jobs::ClearExpiredItemsJob.new
Invidious::Jobs.start_all
def popular_videos

View File

@ -4,7 +4,7 @@ module Invidious::Database::Nonces
extend self
# -------------------
# Insert
# Insert / Delete
# -------------------
def insert(nonce : String, expire : Time)
@ -17,6 +17,15 @@ module Invidious::Database::Nonces
PG_DB.exec(request, nonce, expire)
end
def delete_expired
request = <<-SQL
DELETE FROM nonces *
WHERE expire < now()
SQL
PG_DB.exec(request)
end
# -------------------
# Update
# -------------------

View File

@ -22,6 +22,15 @@ module Invidious::Database::Videos
PG_DB.exec(request, id)
end
def delete_expired
request = <<-SQL
DELETE FROM videos *
WHERE updated < (now() - interval '6 hours')
SQL
PG_DB.exec(request)
end
def update(video : Video)
request = <<-SQL
UPDATE videos

View File

@ -0,0 +1,23 @@
class Invidious::Jobs::ClearExpiredItemsJob < Invidious::Jobs::BaseJob
# Remove items (videos, nonces, etc..) whose cache is outdated every hour.
# Removes the need for a cron job.
def begin
loop do
failed = false
begin
Invidious::Database::Videos.delete_expired
Invidious::Database::Nonces.delete_expired
rescue DB::Error
failed = true
end
# Retry earlier than scheduled on DB error
if failed
sleep 10.minutes
else
sleep 1.hour
end
end
end
end