diff --git a/app/workers/articles/rss_reader_worker.rb b/app/workers/articles/rss_reader_worker.rb new file mode 100644 index 000000000..ef29a3946 --- /dev/null +++ b/app/workers/articles/rss_reader_worker.rb @@ -0,0 +1,17 @@ +module Articles + class RssReaderWorker + include Sidekiq::Worker + + sidekiq_options queue: :medium_priority, retry: 10 + + def perform + # Temporary + # @sre:mstruve This is temporary until we have an efficient way to handle this job + # for our large DEV community. Smaller Forems should be able to handle it no problem + return if SiteConfig.community_name == "DEV" + + # don't force fetch. Fetch "random" subset instead of all of them. + RssReader.get_all_articles(force: false) + end + end +end diff --git a/config/schedule.yml b/config/schedule.yml index 28ac9d9d4..7a13ea24a 100644 --- a/config/schedule.yml +++ b/config/schedule.yml @@ -1,3 +1,6 @@ +fetch_all_rss: + cron: "20 * * * *" # every hour, 20 min after the hour + class: "Articles::RssReaderWorker" log_worker_queue_stats: cron: "*/10 * * * *" # every 10 minutes class: "Metrics::RecordBackgroundQueueStatsWorker" diff --git a/spec/workers/articles/rss_reader_worker_spec.rb b/spec/workers/articles/rss_reader_worker_spec.rb new file mode 100644 index 000000000..d8f814261 --- /dev/null +++ b/spec/workers/articles/rss_reader_worker_spec.rb @@ -0,0 +1,15 @@ +require "rails_helper" + +RSpec.describe Articles::RssReaderWorker, type: :worker do + let(:worker) { subject } + + include_examples "#enqueues_on_correct_queue", "medium_priority" + + describe "#perform" do + it "updates RssReader articles" do + allow(RssReader).to receive(:get_all_articles) + worker.perform + expect(RssReader).to have_received(:get_all_articles).with(force: false) + end + end +end