class HydroponicBean::Job
Attributes
created_at[RW]
data[RW]
delay[RW]
id[RW]
pri[RW]
reserved_at[RW]
reserved_by[RW]
state[RW]
stats[RW]
ttr[RW]
tube[RW]
Public Class Methods
new(tube, pri, delay, ttr, data)
click to toggle source
# File lib/hydroponic_bean/job.rb, line 10 def initialize(tube, pri, delay, ttr, data) @id = self.class.next_id @created_at = Time.now.utc @tube = tube @pri = pri.to_i @delay = delay.to_i @reserved_at = nil @ttr = ttr.to_i @state = @delay > 0 ? State.delayed : State.ready @data = data @deleted = false @stats = { 'reserves' => 0, 'timeouts' => 0, 'releases' => 0, 'buries' => 0, 'kicks' => 0, } @tube.push(self) end
next_id()
click to toggle source
# File lib/hydroponic_bean/job.rb, line 3 def self.next_id HydroponicBean.jobs.length + 1 end
Public Instance Methods
age()
click to toggle source
# File lib/hydroponic_bean/job.rb, line 41 def age (Time.now.utc - created_at).to_i end
buried?()
click to toggle source
# File lib/hydroponic_bean/job.rb, line 53 def buried?; exists? && state == State.buried; end
bury(connection, pri)
click to toggle source
# File lib/hydroponic_bean/job.rb, line 81 def bury(connection, pri) if reserved_by?(connection) stats['buries'] += 1 @pri = pri.to_i @reserved_at = nil @reserved_by = nil @state = State.buried end end
deadline_soon?()
click to toggle source
# File lib/hydroponic_bean/job.rb, line 119 def deadline_soon? ttr_left <= 1 end
delayed?()
click to toggle source
# File lib/hydroponic_bean/job.rb, line 52 def delayed?; exists? && state == State.delayed; end
delete(connection)
click to toggle source
# File lib/hydroponic_bean/job.rb, line 91 def delete(connection) if exists? && (!reserved? || reserved_by?(connection)) @tube.job_deleted! @deleted = true end end
deleted?()
click to toggle source
# File lib/hydroponic_bean/job.rb, line 137 def deleted?; @deleted; end
exists?()
click to toggle source
# File lib/hydroponic_bean/job.rb, line 138 def exists?; !@deleted; end
kick()
click to toggle source
# File lib/hydroponic_bean/job.rb, line 104 def kick if buried? || delayed? stats['kicks'] += 1 @state = State.ready end end
ready?()
click to toggle source
# File lib/hydroponic_bean/job.rb, line 50 def ready?; exists? && state == State.ready; end
release(connection, pri, delay)
click to toggle source
# File lib/hydroponic_bean/job.rb, line 70 def release(connection, pri, delay) if reserved_by?(connection) stats['releases'] += 1 @pri = pri.to_i @delay = delay.to_i @reserved_at = nil @reserved_by = nil @state = @delay > 0 ? State.delayed : State.ready end end
reserve(connection)
click to toggle source
# File lib/hydroponic_bean/job.rb, line 59 def reserve(connection) if ready? stats['reserves'] += 1 @state = State.reserved @reserved_by = connection @reserved_at = Time.now.utc # For convenience and one-liners return self end end
reserved?()
click to toggle source
# File lib/hydroponic_bean/job.rb, line 51 def reserved?; exists? && state == State.reserved; end
reserved_by?(connection)
click to toggle source
# File lib/hydroponic_bean/job.rb, line 55 def reserved_by?(connection) reserved? && reserved_by == connection end
serialize_stats()
click to toggle source
# File lib/hydroponic_bean/job.rb, line 123 def serialize_stats { 'id' => id, 'tube' => tube.name, 'state' => state.to_s, 'pri' => pri, 'age' => age, 'delay' => delay, 'ttr' => ttr, 'time-left' => time_left, 'file' => 0, }.merge(stats) end
time_left()
click to toggle source
# File lib/hydroponic_bean/job.rb, line 115 def time_left reserved? ? ttr_left : [delay - age, 0].max end
touch(connection)
click to toggle source
# File lib/hydroponic_bean/job.rb, line 98 def touch(connection) if reserved_by?(connection) @reserved_at = Time.now.utc end end
ttr_left()
click to toggle source
# File lib/hydroponic_bean/job.rb, line 111 def ttr_left [ttr - (Time.now.utc - reserved_at).to_i, 0].max end
tube_name()
click to toggle source
# File lib/hydroponic_bean/job.rb, line 45 def tube_name @tube.name end
update_time!()
click to toggle source
# File lib/hydroponic_bean/job.rb, line 32 def update_time! if (delayed? || reserved?) && time_left == 0 if reserved? stats['timeouts'] += 1 end @state = State.ready end end
urgent?()
click to toggle source
# File lib/hydroponic_bean/job.rb, line 49 def urgent?; exists? && pri <= 1024; end