class GemeraldBeanstalk::Tube
Attributes
jobs[R]
name[R]
reservations[R]
Public Class Methods
new(name)
click to toggle source
# File lib/gemerald_beanstalk/tube.rb, line 45 def initialize(name) @name = name @jobs = GemeraldBeanstalk::Jobs.new @reservations = [] @state = :ready @stats = ThreadSafe::Cache.new @stats[:'cmd-delete'] = 0 @stats[:'cmd-pause-tube'] = 0 @stats[:'using'] = 0 @stats[:'waiting'] = 0 @stats[:'watching'] = 0 end
Public Instance Methods
active?()
click to toggle source
# File lib/gemerald_beanstalk/tube.rb, line 6 def active? return !self.deactivated? end
adjust_stats_key(key, adjustment = 1)
click to toggle source
# File lib/gemerald_beanstalk/tube.rb, line 11 def adjust_stats_key(key, adjustment = 1) @stats[key] = [@stats[key] + adjustment, 0].max end
cancel_reservation(connection)
click to toggle source
# File lib/gemerald_beanstalk/tube.rb, line 16 def cancel_reservation(connection) return @reservations.delete(connection) end
deactivate()
click to toggle source
# File lib/gemerald_beanstalk/tube.rb, line 21 def deactivate return false if @state == :deactivated || self.name == 'default' @state = :deactivated return true end
deactivated?()
click to toggle source
# File lib/gemerald_beanstalk/tube.rb, line 28 def deactivated? return @state == :deactivated end
delete(job)
click to toggle source
# File lib/gemerald_beanstalk/tube.rb, line 33 def delete(job) adjust_stats_key(:'cmd-delete') return @jobs.delete(job) end
ignore()
click to toggle source
# File lib/gemerald_beanstalk/tube.rb, line 39 def ignore adjust_stats_key(:'watching', -1) deactivate if should_deactivate? end
next_job(state = :ready, action = :reserve)
click to toggle source
# File lib/gemerald_beanstalk/tube.rb, line 59 def next_job(state = :ready, action = :reserve) return nil if paused? && action == :reserve best_candidate = nil @jobs.each do |candidate| next if candidate.state != state best_candidate = candidate if best_candidate.nil? || candidate < best_candidate end return best_candidate end
next_reservation()
click to toggle source
# File lib/gemerald_beanstalk/tube.rb, line 72 def next_reservation reservation = nil while ready? && @reservations.any? && reservation.nil? reservation = @reservations[0] break if reservation.waiting? @reservations.shift reservation = nil end return reservation end
pause(delay, *args)
click to toggle source
# File lib/gemerald_beanstalk/tube.rb, line 85 def pause(delay, *args) return false unless ready? @state = :paused adjust_stats_key(:'cmd-pause-tube') @pause_delay = delay.to_i @paused_at = Time.now.to_f @resume_at = @paused_at + @pause_delay return true end
paused?()
click to toggle source
# File lib/gemerald_beanstalk/tube.rb, line 96 def paused? return false unless @state == :paused return true if @resume_at > Time.now.to_f @state = :ready @pause_delay = @paused_at = @resume_at = nil return false end
put(job)
click to toggle source
# File lib/gemerald_beanstalk/tube.rb, line 106 def put(job) @jobs.enqueue(job) end
ready?()
click to toggle source
# File lib/gemerald_beanstalk/tube.rb, line 111 def ready? return @state == :ready end
reserve(connection)
click to toggle source
# File lib/gemerald_beanstalk/tube.rb, line 116 def reserve(connection) @reservations << connection end
should_deactivate?()
click to toggle source
# File lib/gemerald_beanstalk/tube.rb, line 121 def should_deactivate? return @jobs.length == 0 && @stats[:'watching'] == 0 && @stats[:'using'] == 0 end
stats()
click to toggle source
# File lib/gemerald_beanstalk/tube.rb, line 126 def stats job_stats = @jobs.counts_by_state # Need to call paused in advance to update state pause_time_left = paused? ? (@resume_at - Time.now.to_f).to_i : 0 return { 'name' => @name, 'current-jobs-urgent' => job_stats['current-jobs-urgent'], 'current-jobs-ready' => job_stats['current-jobs-ready'], 'current-jobs-reserved' => job_stats['current-jobs-reserved'], 'current-jobs-delayed' => job_stats['current-jobs-delayed'], 'current-jobs-buried' => job_stats['current-jobs-buried'], 'total-jobs' => @jobs.total_jobs, 'current-using' => @stats[:'using'], 'current-watching' => @stats[:'watching'], 'current-waiting' => @reservations.length, 'cmd-delete' => @stats[:'cmd-delete'], 'cmd-pause-tube' => @stats[:'cmd-pause-tube'], 'pause' => @pause_delay || 0, 'pause-time-left' => pause_time_left, } end
stop_use()
click to toggle source
# File lib/gemerald_beanstalk/tube.rb, line 149 def stop_use adjust_stats_key(:'using', -1) deactivate if should_deactivate? end
use()
click to toggle source
# File lib/gemerald_beanstalk/tube.rb, line 160 def use adjust_stats_key(:'using') end
watch()
click to toggle source
# File lib/gemerald_beanstalk/tube.rb, line 155 def watch adjust_stats_key(:'watching') end