REFACTOR: extract scheduler to the mini_scheduler gem

This commit is contained in:
Neil Lalonde
2018-07-31 17:12:55 -04:00
parent fd29ecb91a
commit 4ad7ce70ce
16 changed files with 28 additions and 1106 deletions

View File

@@ -1,4 +1,5 @@
require "sidekiq/pausable"
require "sidekiq/web"
Sidekiq.configure_client do |config|
config.redis = Discourse.sidekiq_redis_config
@@ -12,6 +13,24 @@ Sidekiq.configure_server do |config|
end
end
MiniScheduler.configure do |config|
config.redis = $redis
config.job_exception_handler do |ex, context|
Discourse.handle_job_exception(ex, context)
end
config.job_ran do |stat|
DiscourseEvent.trigger(:scheduled_job_ran, stat)
end
config.before_sidekiq_web_request do
RailsMultisite::ConnectionManagement.establish_connection(db: 'default')
end
end
if Sidekiq.server?
# defer queue should simply run in sidekiq
Scheduler::Defer.async = false
@@ -27,22 +46,7 @@ if Sidekiq.server?
scheduler_hostname = ENV["UNICORN_SCHEDULER_HOSTNAME"]
if !scheduler_hostname || scheduler_hostname.split(',').include?(`hostname`.strip)
require 'scheduler/scheduler'
manager = Scheduler::Manager.new($redis.without_namespace)
Scheduler::Manager.discover_schedules.each do |schedule|
manager.ensure_schedule!(schedule)
end
Thread.new do
while true
begin
manager.tick
rescue => e
# the show must go on
Discourse.handle_job_exception(e, message: "While ticking scheduling manager")
end
sleep 1
end
end
MiniScheduler.start
end
end
end

View File

@@ -1,5 +1,5 @@
require "sidekiq/web"
require_dependency "scheduler/web"
require "mini_scheduler/web"
require_dependency "admin_constraint"
require_dependency "staff_constraint"
require_dependency "homepage_constraint"