Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Refactor Scheduler and Manager classes #238

Merged
merged 1 commit into from
May 28, 2018
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 6 additions & 6 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -228,7 +228,7 @@ require 'sidekiq-scheduler'
Sidekiq.configure_server do |config|
config.on(:startup) do
Sidekiq.schedule = YAML.load_file(File.expand_path('../../sidekiq_scheduler.yml', __FILE__))
Sidekiq::Scheduler.reload_schedule!
SidekiqScheduler::Scheduler.instance.reload_schedule!
end
end
```
Expand Down Expand Up @@ -256,7 +256,7 @@ If `:dynamic` flag is set to `false`, you'll have to reload the schedule manuall
side:

``` ruby
Sidekiq::Scheduler.reload_schedule!
SidekiqScheduler::Scheduler.instance.reload_schedule!
```

Invoke `Sidekiq.get_schedule` to obtain the current schedule:
Expand Down Expand Up @@ -367,12 +367,12 @@ if Rails.env == 'production' && (defined?(Rails::Server) || defined?(Unicorn))

config.on(:startup) do
Sidekiq.schedule = YAML.load_file(File.expand_path('../../scheduler.yml', __FILE__))
Sidekiq::Scheduler.reload_schedule!
SidekiqScheduler::Scheduler.instance.reload_schedule!
end
end
else
Sidekiq::Scheduler.enabled = false
puts "Sidekiq::Scheduler.enabled is #{Sidekiq::Scheduler.enabled.inspect}"
SidekiqScheduler::Scheduler.instance.enabled = false
puts "SidekiqScheduler::Scheduler.instance.enabled is #{SidekiqScheduler::Scheduler.instance.enabled.inspect}"
end
```

Expand All @@ -382,6 +382,6 @@ MIT License

## Copyright

Copyright 2013 - 2017 Moove-IT.
Copyright 2013 - 2018 Moove-IT.
Copyright 2012 Morton Jonuschat.
Some parts copyright 2010 Ben VandenBos.
27 changes: 1 addition & 26 deletions lib/sidekiq-scheduler.rb
Original file line number Diff line number Diff line change
Expand Up @@ -10,35 +10,10 @@
Sidekiq.configure_server do |config|

config.on(:startup) do
dynamic = Sidekiq::Scheduler.dynamic
dynamic = dynamic.nil? ? config.options.fetch(:dynamic, false) : dynamic

dynamic_every = Sidekiq::Scheduler.dynamic_every
dynamic_every = dynamic_every.nil? ? config.options.fetch(:dynamic_every, '5s') : dynamic_every

enabled = Sidekiq::Scheduler.enabled
enabled = enabled.nil? ? config.options.fetch(:enabled, true) : enabled

scheduler = config.options.fetch(:scheduler, {})

listened_queues_only = Sidekiq::Scheduler.listened_queues_only
listened_queues_only = listened_queues_only.nil? ? scheduler[:listened_queues_only] : listened_queues_only

schedule = Sidekiq.schedule
schedule ||= config.options[:schedule] || {}

scheduler_options = {
dynamic: dynamic,
dynamic_every: dynamic_every,
enabled: enabled,
schedule: schedule,
listened_queues_only: listened_queues_only
}

# schedules_changed's type was changed from SET to ZSET, so we remove old versions at startup
SidekiqScheduler::RedisManager.clean_schedules_changed

schedule_manager = SidekiqScheduler::Manager.new(scheduler_options)
schedule_manager = SidekiqScheduler::Manager.new(config.options)
config.options[:schedule_manager] = schedule_manager
config.options[:schedule_manager].start
end
Expand Down
38 changes: 30 additions & 8 deletions lib/sidekiq-scheduler/manager.rb
Original file line number Diff line number Diff line change
Expand Up @@ -14,26 +14,48 @@ module SidekiqScheduler
class Manager
include Sidekiq::Util

DEFAULT_SCHEDULER_OPTIONS = {
enabled: true,
dynamic: false,
dynamic_every: '5s',
schedule: {}
}

def initialize(options)
SidekiqScheduler::Scheduler.enabled = options[:enabled]
SidekiqScheduler::Scheduler.dynamic = options[:dynamic]
SidekiqScheduler::Scheduler.dynamic_every = options[:dynamic_every]
SidekiqScheduler::Scheduler.listened_queues_only = options[:listened_queues_only]
Sidekiq.schedule = options[:schedule] if SidekiqScheduler::Scheduler.enabled
scheduler_options = load_scheduler_options(options)

@scheduler_instance = SidekiqScheduler::Scheduler.new(scheduler_options)
SidekiqScheduler::Scheduler.instance = @scheduler_instance
Sidekiq.schedule = scheduler_options[:schedule] if @scheduler_instance.enabled
end

def stop
SidekiqScheduler::Scheduler.clear_schedule!
@scheduler_instance.clear_schedule!
end

def start
SidekiqScheduler::Scheduler.load_schedule!
@scheduler_instance.load_schedule!
end

def reset
clear_scheduled_work
end

end
private

def load_scheduler_options(options)
options[:listened_queues_only] = options.fetch(:scheduler, {})[:listened_queues_only]
scheduler_options = DEFAULT_SCHEDULER_OPTIONS.merge(options)

current_options = {
enabled: SidekiqScheduler::Scheduler.enabled,
dynamic: SidekiqScheduler::Scheduler.dynamic,
dynamic_every: SidekiqScheduler::Scheduler.dynamic_every,
schedule: Sidekiq.schedule,
listened_queues_only: SidekiqScheduler::Scheduler.listened_queues_only
}.delete_if { |_, value| value.nil? }

scheduler_options.merge(current_options)
end
end
end
Loading