module SidekiqScheduler::RedisManager
Constants
- REGISTERED_JOBS_THRESHOLD_IN_SECONDS
Public Class Methods
Register a schedule change for a given job
@param [String] name The name of the job
# File lib/sidekiq-scheduler/redis_manager.rb, line 121 def self.add_schedule_change(name) Sidekiq.redis { |r| r.zadd(:schedules_changed, Time.now.to_f, name) } end
Remove all the schedule changes records
# File lib/sidekiq-scheduler/redis_manager.rb, line 126 def self.clean_schedules_changed Sidekiq.redis { |r| r.del(:schedules_changed) unless r.type(:schedules_changed) == 'zset' } end
Returns the schedules of all the jobs
@return [Hash] hash with all the job schedules
# File lib/sidekiq-scheduler/redis_manager.rb, line 91 def self.get_all_schedules Sidekiq.redis { |r| r.hgetall(:schedules) } end
Returns the last execution time of a given job
@param [String] name The name of the job
@return [String] last time the job was executed
# File lib/sidekiq-scheduler/redis_manager.rb, line 38 def self.get_job_last_time(name) hget(last_times_key, name) end
Returns the next execution time for a given job
@param [String] name The name of the job
@return [String] next time the job has to be executed
# File lib/sidekiq-scheduler/redis_manager.rb, line 29 def self.get_job_next_time(name) hget(next_times_key, name) end
Returns the schedule of a given job
@param [String] name The name of the job
@return [String] schedule in JSON format
# File lib/sidekiq-scheduler/redis_manager.rb, line 11 def self.get_job_schedule(name) hget(:schedules, name) end
Returns the state of a given job
@param [String] name The name of the job
@return [String] state in JSON format
# File lib/sidekiq-scheduler/redis_manager.rb, line 20 def self.get_job_state(name) hget(schedules_state_key, name) end
Returns all the schedule changes for a given time range.
@param [Float] from The minimum value in the range @param [Float] to The maximum value in the range
@return [Array] array with all the changed job names
# File lib/sidekiq-scheduler/redis_manager.rb, line 114 def self.get_schedule_changes(from, to) Sidekiq.redis { |r| r.zrangebyscore(:schedules_changed, from, "(#{to}") } end
Returns the key of the Redis hash for job's last execution times hash
@return [String] with the key
# File lib/sidekiq-scheduler/redis_manager.rb, line 178 def self.last_times_key 'sidekiq-scheduler:last_times' end
Returns the key of the Redis hash for job's execution times hash
@return [String] with the key
# File lib/sidekiq-scheduler/redis_manager.rb, line 171 def self.next_times_key 'sidekiq-scheduler:next_times' end
Returns the key of the Redis sorted set used to store job enqueues
@param [String] job_name The name of the job
@return [String] the pushed job key
# File lib/sidekiq-scheduler/redis_manager.rb, line 164 def self.pushed_job_key(job_name) "sidekiq-scheduler:pushed:#{job_name}" end
Removes a queued job instance
@param [String] job_name The name of the job @param [Time] time The time at which the job was cleared by the scheduler
@return [Boolean] true if the job was registered, false otherwise
# File lib/sidekiq-scheduler/redis_manager.rb, line 136 def self.register_job_instance(job_name, time) job_key = pushed_job_key(job_name) registered, _ = Sidekiq.redis do |r| r.pipelined do r.zadd(job_key, time.to_i, time.to_i) r.expire(job_key, REGISTERED_JOBS_THRESHOLD_IN_SECONDS) end end registered end
Removes instances of the job older than 24 hours
@param [String] job_name The name of the job
# File lib/sidekiq-scheduler/redis_manager.rb, line 151 def self.remove_elder_job_instances(job_name) seconds_ago = Time.now.to_i - REGISTERED_JOBS_THRESHOLD_IN_SECONDS Sidekiq.redis do |r| r.zremrangebyscore(pushed_job_key(job_name), 0, seconds_ago) end end
Removes the next execution time for a given job
@param [String] name The name of the job
# File lib/sidekiq-scheduler/redis_manager.rb, line 84 def self.remove_job_next_time(name) hdel(next_times_key, name) end
Removes the schedule for a given job
@param [String] name The name of the job
# File lib/sidekiq-scheduler/redis_manager.rb, line 77 def self.remove_job_schedule(name) hdel(:schedules, name) end
Returns boolean value that indicates if the schedules value exists
@return [Boolean] true if the schedules key is set, false otherwise
# File lib/sidekiq-scheduler/redis_manager.rb, line 98 def self.schedule_exist? Sidekiq.redis do |r| if r.respond_to?(:exists?) r.exists?(:schedules) else !!r.exists(:schedules) end end end
Returns the Redis's key for saving schedule states.
@return [String] with the key
# File lib/sidekiq-scheduler/redis_manager.rb, line 185 def self.schedules_state_key 'sidekiq-scheduler:states' end
Sets the last execution time for a given job
@param [String] name The name of the job @param [String] last_time The last time the job was executed
# File lib/sidekiq-scheduler/redis_manager.rb, line 70 def self.set_job_last_time(name, last_time) hset(last_times_key, name, last_time) end
Sets the next execution time for a given job
@param [String] name The name of the job @param [String] next_time The next time the job has to be executed
# File lib/sidekiq-scheduler/redis_manager.rb, line 62 def self.set_job_next_time(name, next_time) hset(next_times_key, name, next_time) end
Sets the schedule for a given job
@param [String] name The name of the job @param [Hash] config The new schedule for the job
# File lib/sidekiq-scheduler/redis_manager.rb, line 46 def self.set_job_schedule(name, config) hset(:schedules, name, JSON.generate(config)) end
Sets the state for a given job
@param [String] name The name of the job @param [Hash] state The new state for the job
# File lib/sidekiq-scheduler/redis_manager.rb, line 54 def self.set_job_state(name, state) hset(schedules_state_key, name, JSON.generate(state)) end
Private Class Methods
Removes the value of a Redis stored hash field
@param [String] hash_key The key name of the hash @param [String] field_key The key name of the field
# File lib/sidekiq-scheduler/redis_manager.rb, line 214 def self.hdel(hash_key, field_key) Sidekiq.redis { |r| r.hdel(hash_key, field_key) } end
Returns the value of a Redis stored hash field
@param [String] hash_key The key name of the hash @param [String] field_key The key name of the field
@return [String]
# File lib/sidekiq-scheduler/redis_manager.rb, line 197 def self.hget(hash_key, field_key) Sidekiq.redis { |r| r.hget(hash_key, field_key) } end
Sets the value of a Redis stored hash field
@param [String] hash_key The key name of the hash @param [String] field_key The key name of the field @param [String] value The new value name for the field
# File lib/sidekiq-scheduler/redis_manager.rb, line 206 def self.hset(hash_key, field_key, value) Sidekiq.redis { |r| r.hset(hash_key, field_key, value) } end