From eb846e27fd2398e7b23d227006fa0652837cecf3 Mon Sep 17 00:00:00 2001 From: Rohan Mitchell Date: Wed, 13 Apr 2016 15:53:53 +1000 Subject: [PATCH] Run a job queue heartbeat every 5 minutes --- app/jobs/heartbeat_job.rb | 5 ++++ .../spree/app_configuration_decorator.rb | 3 +++ config/schedule.rb | 8 ++++++ spec/jobs/heartbeat_job_spec.rb | 27 +++++++++++++++++++ 4 files changed, 43 insertions(+) create mode 100644 app/jobs/heartbeat_job.rb create mode 100644 spec/jobs/heartbeat_job_spec.rb diff --git a/app/jobs/heartbeat_job.rb b/app/jobs/heartbeat_job.rb new file mode 100644 index 0000000000..93e835905f --- /dev/null +++ b/app/jobs/heartbeat_job.rb @@ -0,0 +1,5 @@ +class HeartbeatJob + def perform + Spree::Config.last_job_queue_heartbeat_at = Time.now + end +end diff --git a/app/models/spree/app_configuration_decorator.rb b/app/models/spree/app_configuration_decorator.rb index fc7a8171cc..6ef1e7b848 100644 --- a/app/models/spree/app_configuration_decorator.rb +++ b/app/models/spree/app_configuration_decorator.rb @@ -20,4 +20,7 @@ Spree::AppConfiguration.class_eval do preference :account_invoices_monthly_rate, :decimal, default: 0 preference :account_invoices_monthly_cap, :decimal, default: 0 preference :account_invoices_tax_rate, :decimal, default: 0 + + # Monitoring + preference :last_job_queue_heartbeat_at, :string, default: nil end diff --git a/config/schedule.rb b/config/schedule.rb index 023382330a..6f8e7b582a 100644 --- a/config/schedule.rb +++ b/config/schedule.rb @@ -4,9 +4,13 @@ require 'whenever' env "MAILTO", "rohan@rohanmitchell.com" + # If we use -e with a file containing specs, rspec interprets it and filters out our examples job_type :run_file, "cd :path; :environment_variable=:environment bundle exec script/rails runner :task :output" +job_type :enqueue_job, "cd :path; :environment_variable=:environment bundle exec script/rails runner 'Delayed::Job.enqueue(:task.new, priority: :priority)' :output" + + every 1.hour do rake 'openfoodnetwork:cache:check_products_integrity' end @@ -23,6 +27,10 @@ every 4.hours do rake 'db2fog:backup' end +every 5.minutes do + enqueue_job 'QueueHeartbeatJob', priority: 0 +end + every 1.day, at: '1:00am' do rake 'openfoodnetwork:billing:update_account_invoices' end diff --git a/spec/jobs/heartbeat_job_spec.rb b/spec/jobs/heartbeat_job_spec.rb new file mode 100644 index 0000000000..3bafecd572 --- /dev/null +++ b/spec/jobs/heartbeat_job_spec.rb @@ -0,0 +1,27 @@ +require 'spec_helper' + +describe HeartbeatJob do + context "with time frozen" do + let(:run_time) { Time.zone.local(2016, 4, 13, 13, 0, 0) } + + before { Spree::Config.last_job_queue_heartbeat_at = nil } + + around do |example| + Timecop.freeze(run_time) { example.run } + end + + it "updates the last_job_queue_heartbeat_at config var" do + run_job + Time.parse(Spree::Config.last_job_queue_heartbeat_at).should == run_time + end + end + + + private + + def run_job + clear_jobs + Delayed::Job.enqueue HeartbeatJob.new + flush_jobs ignore_exceptions: false + end +end