class Scheduler::ScheduleInfo
Attributes
current_owner[RW]
next_run[RW]
prev_duration[RW]
prev_result[RW]
prev_run[RW]
Public Class Methods
new(klass, manager)
click to toggle source
# File lib/scheduler/schedule_info.rb, line 9 def initialize(klass, manager) @klass = klass @manager = manager data = nil if data = $redis.get(key) data = JSON.parse(data) end if data @next_run = data["next_run"] @prev_run = data["prev_run"] @prev_result = data["prev_result"] @prev_duration = data["prev_duration"] @current_owner = data["current_owner"] end rescue # corrupt redis @next_run = @prev_run = @prev_result = @prev_duration = @current_owner = nil end
Public Instance Methods
del!()
click to toggle source
# File lib/scheduler/schedule_info.rb, line 102 def del! clear! @next_run = @prev_run = @prev_result = @prev_duration = @current_owner = nil end
key()
click to toggle source
# File lib/scheduler/schedule_info.rb, line 107 def key if @klass.is_per_host Manager.schedule_key(@klass, @manager.hostname) else Manager.schedule_key(@klass) end end
queue_key()
click to toggle source
# File lib/scheduler/schedule_info.rb, line 115 def queue_key if @klass.is_per_host Manager.queue_key(@manager.hostname) else Manager.queue_key end end
redis()
click to toggle source
# File lib/scheduler/schedule_info.rb, line 123 def redis @manager.redis end
schedule!()
click to toggle source
# File lib/scheduler/schedule_info.rb, line 78 def schedule! if @klass.every schedule_every! elsif @klass.daily schedule_daily! end write! end
schedule_daily!()
click to toggle source
# File lib/scheduler/schedule_info.rb, line 62 def schedule_daily! return if valid? at = @klass.daily[:at] || 0 today_begin = Time.now.midnight.to_i today_offset = DateTime.now.seconds_since_midnight # If it's later today if at > today_offset @next_run = today_begin + at else # Otherwise do it tomorrow @next_run = today_begin + 1.day + at end end
schedule_every!()
click to toggle source
# File lib/scheduler/schedule_info.rb, line 50 def schedule_every! if !valid? && @prev_run mixup = @klass.every * @manager.random_ratio mixup = (mixup * Random.rand - mixup / 2).to_i @next_run = @prev_run + mixup + @klass.every end if !valid? @next_run = Time.now.to_i + 5.minutes * Random.rand end end
valid?()
click to toggle source
# File lib/scheduler/schedule_info.rb, line 31 def valid? return false unless @next_run (!@prev_run && @next_run < Time.now.to_i + 5.minutes) || valid_every? || valid_daily? end
valid_daily?()
click to toggle source
# File lib/scheduler/schedule_info.rb, line 43 def valid_daily? return false unless @klass.daily !!@prev_run && @prev_run <= Time.now.to_i && @next_run < @prev_run + 1.day end
valid_every?()
click to toggle source
# File lib/scheduler/schedule_info.rb, line 36 def valid_every? return false unless @klass.every !!@prev_run && @prev_run <= Time.now.to_i && @next_run < @prev_run + @klass.every * (1 + @manager.random_ratio) end
write!()
click to toggle source
# File lib/scheduler/schedule_info.rb, line 88 def write! clear! redis.set key, { next_run: @next_run, prev_run: @prev_run, prev_duration: @prev_duration, prev_result: @prev_result, current_owner: @current_owner }.to_json redis.zadd queue_key, @next_run , @klass end
Private Instance Methods
clear!()
click to toggle source
# File lib/scheduler/schedule_info.rb, line 128 def clear! redis.del key redis.zrem queue_key, @klass end