Module: ResqueAdmin::Scheduler::SchedulingExtensions
- Included in:
- Extension
- Defined in:
- lib/resque/scheduler/scheduling_extensions.rb,
lib/resque/scheduler_admin/scheduling_extensions.rb,
lib/resque_admin/scheduler/scheduling_extensions.rb
Instance Method Summary collapse
-
#all_schedules ⇒ Object
gets the schedules as it exists in redis.
-
#fetch_schedule(name) ⇒ Object
retrive the schedule configuration for the given name.
-
#reload_schedule! ⇒ Object
reloads the schedule from redis and memory.
-
#remove_schedule(name) ⇒ Object
remove a given schedule by name.
-
#schedule ⇒ Object
Returns the schedule hash.
-
#schedule=(schedule_hash) ⇒ Object
Accepts a new schedule configuration of the form:.
-
#set_schedule(name, config, reload = true) ⇒ Object
Create or update a schedule with the provided name and configuration.
Instance Method Details
#all_schedules ⇒ Object
gets the schedules as it exists in redis
70 71 72 |
# File 'lib/resque/scheduler/scheduling_extensions.rb', line 70 def all_schedules non_persistent_schedules.merge(persistent_schedules) end |
#fetch_schedule(name) ⇒ Object
retrive the schedule configuration for the given name
99 100 101 |
# File 'lib/resque/scheduler/scheduling_extensions.rb', line 99 def fetch_schedule(name) schedule[name] end |
#reload_schedule! ⇒ Object
reloads the schedule from redis and memory
65 66 67 |
# File 'lib/resque/scheduler/scheduling_extensions.rb', line 65 def reload_schedule! @schedule = all_schedules end |
#remove_schedule(name) ⇒ Object
remove a given schedule by name
104 105 106 107 108 109 110 |
# File 'lib/resque/scheduler/scheduling_extensions.rb', line 104 def remove_schedule(name) non_persistent_schedules.delete(name) redis.hdel(:persistent_schedules, name) redis.sadd(:schedules_changed, name) reload_schedule! end |
#schedule ⇒ Object
Returns the schedule hash
59 60 61 62 |
# File 'lib/resque/scheduler/scheduling_extensions.rb', line 59 def schedule @schedule ||= all_schedules @schedule || {} end |
#schedule=(schedule_hash) ⇒ Object
Accepts a new schedule configuration of the form:
{
"MakeTea" => {
"every" => "1m" },
"some_name" => {
"cron" => "5/* * * *",
"class" => "DoSomeWork",
"args" => "work on this string",
"description" => "this thing works it"s butter off" },
...
}
Hash keys can be anything and are used to describe and reference the scheduled job. If the “class” argument is missing, the key is used implicitly as “class” argument - in the “MakeTea” example, “MakeTea” is used both as job name and resque_admin worker class.
Any jobs that were in the old schedule, but are not present in the new schedule, will be removed.
:cron can be any cron scheduling string
:every can be used in lieu of :cron. see rufus-scheduler’s ‘every’ usage for valid syntax. If :cron is present it will take precedence over :every.
:class must be a resque_admin worker class. If it is missing, the job name (hash key) will be used as :class.
:args can be any yaml which will be converted to a ruby literal and passed in a params. (optional)
:rails_envs is the list of envs where the job gets loaded. Envs are comma separated (optional)
:description is just that, a description of the job (optional). If params is an array, each element in the array is passed as a separate param, otherwise params is passed in as the only parameter to perform.
46 47 48 49 50 51 52 53 54 55 56 |
# File 'lib/resque/scheduler/scheduling_extensions.rb', line 46 def schedule=(schedule_hash) @non_persistent_schedules = nil prepared_schedules = prepare_schedules(schedule_hash) prepared_schedules.each do |schedule, config| set_schedule(schedule, config, false) end # ensure only return the successfully saved data! reload_schedule! end |
#set_schedule(name, config, reload = true) ⇒ Object
Create or update a schedule with the provided name and configuration.
Note: values for class and custom_job_class need to be strings, not constants.
ResqueAdmin.set_schedule('some_job', {:class => 'SomeJob',
:every => '15mins',
:queue => 'high',
:args => '/tmp/poop'})
Preventing a reload is optional and available to batch operations
85 86 87 88 89 90 91 92 93 94 95 96 |
# File 'lib/resque/scheduler/scheduling_extensions.rb', line 85 def set_schedule(name, config, reload = true) persist = config.delete(:persist) || config.delete('persist') if persist redis.hset(:persistent_schedules, name, encode(config)) else non_persistent_schedules[name] = decode(encode(config)) end redis.sadd(:schedules_changed, name) reload_schedule! if reload end |