Class: Sqeduler::Service
- Inherits:
-
Object
- Object
- Sqeduler::Service
- Defined in:
- lib/sqeduler/service.rb
Overview
Singleton class for configuring this Gem.
Constant Summary collapse
- SCHEDULER_TIMEOUT =
60
- MINIMUM_REDIS_VERSION =
"2.6.12"
Class Attribute Summary collapse
-
.config ⇒ Object
Returns the value of attribute config.
Class Method Summary collapse
- .config_redis_pool ⇒ Object
- .config_sidekiq_client ⇒ Object
- .config_sidekiq_server ⇒ Object
- .logger ⇒ Object
- .parse_schedule(path) ⇒ Object
-
.redis_pool ⇒ Object
A singleton redis ConnectionPool for Sidekiq::Scheduler, Sqeduler::Worker::Synchronization, Sqeduler::Worker::KillSwitch.
- .scheduling? ⇒ Boolean
- .setup_sidekiq_redis(config) ⇒ Object
- .start ⇒ Object
- .verify_redis_pool(redis_pool) ⇒ Object
Class Attribute Details
.config ⇒ Object
Returns the value of attribute config.
12 13 14 |
# File 'lib/sqeduler/service.rb', line 12 def config @config end |
Class Method Details
.config_redis_pool ⇒ Object
104 105 106 107 108 109 110 111 112 113 114 |
# File 'lib/sqeduler/service.rb', line 104 def config_redis_pool redis_pool = if config.redis_pool config.redis_pool else # Redis requires config hash to have symbols as keys. redis = { :namespace => "sqeduler" }.merge(symbolize_keys(config.redis_hash)) ::Sidekiq::RedisConnection.create(redis) end verify_redis_pool(redis_pool) redis_pool end |
.config_sidekiq_client ⇒ Object
67 68 69 70 71 72 73 74 75 76 77 |
# File 'lib/sqeduler/service.rb', line 67 def config_sidekiq_client logger.info "Initializing Sidekiq client" ::Sidekiq.configure_client do |config| setup_sidekiq_redis(config) Service.config.on_client_start&.call(config) config.client_middleware do |chain| chain.add(Sqeduler::Middleware::KillSwitch) end end end |
.config_sidekiq_server ⇒ Object
34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 |
# File 'lib/sqeduler/service.rb', line 34 def config_sidekiq_server logger.info "Initializing Sidekiq server" ::Sidekiq.configure_server do |config| setup_sidekiq_redis(config) if Service.scheduling? logger.info "Initializing Sidekiq::Scheduler with schedule #{::Sqeduler::Service.config.schedule_path}" config.on(:startup) do ::Sidekiq::Scheduler. = { :trigger_lock => TriggerLock.new } ::Sidekiq.schedule = ::Sqeduler::Service.parse_schedule(::Sqeduler::Service.config.schedule_path) ::Sidekiq::Scheduler.reload_schedule! end config.on(:shutdown) do # Make sure any scheduling locks are released on shutdown. ::Sidekiq::Scheduler.rufus_scheduler.stop end else logger.warn "No schedule_path provided. Not starting Sidekiq::Scheduler." end # the server can also enqueue jobs config.client_middleware do |chain| chain.add(Sqeduler::Middleware::KillSwitch) end LockMaintainer.new.run if Service.config.maintain_locks Service.config.on_server_start&.call(config) end end |
.logger ⇒ Object
116 117 118 119 120 121 |
# File 'lib/sqeduler/service.rb', line 116 def logger return config.logger if config.logger return Rails.logger if defined?(Rails) raise ArgumentError, "No logger provided and Rails.logger cannot be inferred" end |
.parse_schedule(path) ⇒ Object
85 86 87 88 89 90 |
# File 'lib/sqeduler/service.rb', line 85 def parse_schedule(path) raise "Schedule file #{path} does not exist!" unless File.exist?(path) file_contents = File.read(path) YAML.safe_load(ERB.new(file_contents).result) end |
.redis_pool ⇒ Object
A singleton redis ConnectionPool for Sidekiq::Scheduler, Sqeduler::Worker::Synchronization, Sqeduler::Worker::KillSwitch. Should be separate from Sidekiq's so that we don't saturate the client and server connection pools.
100 101 102 |
# File 'lib/sqeduler/service.rb', line 100 def redis_pool @redis_pool ||= config_redis_pool end |
.scheduling? ⇒ Boolean
92 93 94 |
# File 'lib/sqeduler/service.rb', line 92 def scheduling? !config.schedule_path.to_s.empty? end |
.setup_sidekiq_redis(config) ⇒ Object
79 80 81 82 83 |
# File 'lib/sqeduler/service.rb', line 79 def setup_sidekiq_redis(config) return if Service.config.redis_hash.nil? || Service.config.redis_hash.empty? config.redis = Service.config.redis_hash end |
.start ⇒ Object
14 15 16 17 18 19 |
# File 'lib/sqeduler/service.rb', line 14 def start raise "No config provided" unless config config_sidekiq_server config_sidekiq_client end |
.verify_redis_pool(redis_pool) ⇒ Object
21 22 23 24 25 26 27 28 29 30 31 32 |
# File 'lib/sqeduler/service.rb', line 21 def verify_redis_pool(redis_pool) return @verified if defined?(@verified) redis_pool.with do |redis| version = redis.info["redis_version"] unless Gem::Version.new(version) >= Gem::Version.new(MINIMUM_REDIS_VERSION) raise "Must be using redis >= #{MINIMUM_REDIS_VERSION}" end @verified = true end end |