From b3f44aa186487b4f93f3a457607870c90caaf5df Mon Sep 17 00:00:00 2001
From: Eugen Rochko <eugen@zeonfederated.com>
Date: Mon, 15 Jul 2019 07:50:14 +0200
Subject: [PATCH] Add periodic removal of older thumbnails for preview cards
 (#11304)

---
 .../maintenance/uncache_preview_worker.rb     | 18 +++++++++++++++
 .../preview_cards_cleanup_scheduler.rb        | 22 +++++++++++++++++++
 config/sidekiq.yml                            |  3 +++
 3 files changed, 43 insertions(+)
 create mode 100644 app/workers/maintenance/uncache_preview_worker.rb
 create mode 100644 app/workers/scheduler/preview_cards_cleanup_scheduler.rb

diff --git a/app/workers/maintenance/uncache_preview_worker.rb b/app/workers/maintenance/uncache_preview_worker.rb
new file mode 100644
index 0000000000..810ffd8ccf
--- /dev/null
+++ b/app/workers/maintenance/uncache_preview_worker.rb
@@ -0,0 +1,18 @@
+# frozen_string_literal: true
+
+class Maintenance::UncachePreviewWorker
+  include Sidekiq::Worker
+
+  sidekiq_options queue: 'pull'
+
+  def perform(preview_card_id)
+    preview_card = PreviewCard.find(preview_card_id)
+
+    return if preview_card.image.blank?
+
+    preview_card.image.destroy
+    preview_card.save
+  rescue ActiveRecord::RecordNotFound
+    true
+  end
+end
diff --git a/app/workers/scheduler/preview_cards_cleanup_scheduler.rb b/app/workers/scheduler/preview_cards_cleanup_scheduler.rb
new file mode 100644
index 0000000000..2b38792f03
--- /dev/null
+++ b/app/workers/scheduler/preview_cards_cleanup_scheduler.rb
@@ -0,0 +1,22 @@
+# frozen_string_literal: true
+
+class Scheduler::PreviewCardsCleanupScheduler
+  include Sidekiq::Worker
+
+  sidekiq_options unique: :until_executed, retry: 0
+
+  def perform
+    Maintenance::UncachePreviewWorker.push_bulk(recent_link_preview_cards.pluck(:id))
+    Maintenance::UncachePreviewWorker.push_bulk(older_preview_cards.pluck(:id))
+  end
+
+  private
+
+  def recent_link_preview_cards
+    PreviewCard.where(type: :link).where('updated_at < ?', 1.month.ago)
+  end
+
+  def older_preview_cards
+    PreviewCard.where('updated_at < ?', 6.months.ago)
+  end
+end
diff --git a/config/sidekiq.yml b/config/sidekiq.yml
index a16dea9679..5c652792c6 100644
--- a/config/sidekiq.yml
+++ b/config/sidekiq.yml
@@ -27,6 +27,9 @@
   ip_cleanup_scheduler:
     cron: '<%= Random.rand(0..59) %> <%= Random.rand(3..5) %> * * *'
     class: Scheduler::IpCleanupScheduler
+  preview_cards_cleanup_scheduler:
+    cron: '<%= Random.rand(0..59) %> <%= Random.rand(3..5) %> * * *'
+    class: Scheduler::PreviewCardsCleanupScheduler
   email_scheduler:
     cron: '0 10 * * 2'
     class: Scheduler::EmailScheduler
-- 
GitLab