PERF: Add scheduled job to delete old stylesheet cache rows (#13747)

PERF: Add scheduled job to delete old stylesheet cache rows (#13747)

diff --git a/app/jobs/scheduled/clean_up_stylesheet_cache.rb b/app/jobs/scheduled/clean_up_stylesheet_cache.rb
new file mode 100644
index 0000000..51913a4
--- /dev/null
+++ b/app/jobs/scheduled/clean_up_stylesheet_cache.rb
@@ -0,0 +1,11 @@
+# frozen_string_literal: true
+
+module Jobs
+  class CleanUpStylesheetCache < ::Jobs::Scheduled
+    every 1.week
+
+    def execute(args)
+      StylesheetCache.clean_up
+    end
+  end
+end
diff --git a/app/models/stylesheet_cache.rb b/app/models/stylesheet_cache.rb
index 03d921c..819f9ab 100644
--- a/app/models/stylesheet_cache.rb
+++ b/app/models/stylesheet_cache.rb
@@ -4,6 +4,7 @@ class StylesheetCache < ActiveRecord::Base
   self.table_name = 'stylesheet_cache'
 
   MAX_TO_KEEP = 50
+  CLEANUP_AFTER_DAYS = 150
 
   def self.add(target, digest, content, source_map, max_to_keep: nil)
     max_to_keep ||= MAX_TO_KEEP
@@ -42,6 +43,10 @@ class StylesheetCache < ActiveRecord::Base
     end
   end
 
+  def self.clean_up
+    StylesheetCache.where('created_at < ?', CLEANUP_AFTER_DAYS.days.ago).delete_all
+  end
+
 end
 
 # == Schema Information
diff --git a/spec/models/stylesheet_cache_spec.rb b/spec/models/stylesheet_cache_spec.rb
index c83f6c5..d47e915 100644
--- a/spec/models/stylesheet_cache_spec.rb
+++ b/spec/models/stylesheet_cache_spec.rb
@@ -4,7 +4,7 @@ require 'rails_helper'
 
 describe StylesheetCache do
 
-  describe "add" do
+  describe ".add" do
     it "correctly cycles once MAX_TO_KEEP is hit" do
       StylesheetCache.destroy_all
 
@@ -37,6 +37,26 @@ describe StylesheetCache do
 
       expect(StylesheetCache.order(:id).pluck(:target)).to eq(["desktop", "desktop", "mobile", "mobile"])
     end
+  end
+
+  describe ".clean_up" do
+    it "removes items older than threshold" do
+      StylesheetCache.destroy_all
+
+      StylesheetCache.add("a", "b", "c", "map")
+      StylesheetCache.add("d", "e", "f", "map")
 
+      above_threshold = StylesheetCache::CLEANUP_AFTER_DAYS - 1
+      StylesheetCache.first.update!(created_at: above_threshold.days.ago)
+
+      StylesheetCache.clean_up
+      expect(StylesheetCache.all.size).to eq(2)
+
+      below_threshold = StylesheetCache::CLEANUP_AFTER_DAYS + 1
+      StylesheetCache.first.update!(created_at: below_threshold.days.ago)
+
+      StylesheetCache.clean_up
+      expect(StylesheetCache.all.size).to eq(1)
+    end
   end
 end

GitHub sha: 361c8be547342d6c297eaea51b007594e41bbdf1

This commit appears in #13747 which was approved by eviltrout. It was merged by pmusaraj.