class Swarm::Engine::Worker

Attributes

hive[R]
queue[R]

Public Class Methods

new(hive: Hive.default) click to toggle source
# File lib/swarm/engine/worker.rb, line 10
def initialize(hive: Hive.default)
  @hive = hive
end

Public Instance Methods

process_next_job() click to toggle source
# File lib/swarm/engine/worker.rb, line 31
def process_next_job
  begin
    @current_job = queue.reserve_job(self)
    @working = true
    work_on(@current_job)
    queue.delete_job(@current_job) if @current_job
  rescue Queue::JobReservationFailed
    retry
  rescue StandardError
    queue.bury_job(@current_job) if @current_job
  ensure
    queue.clean_up_job(@current_job) if @current_job
    @working = false
    @current_job = nil
  end
end
run!() click to toggle source
# File lib/swarm/engine/worker.rb, line 22
def run!
  setup
  @running = true
  while running?
    process_next_job
  end
  teardown
end
running?() click to toggle source
# File lib/swarm/engine/worker.rb, line 52
def running?
  @running == true && queue
end
setup() click to toggle source
# File lib/swarm/engine/worker.rb, line 14
def setup
  @queue = hive.work_queue.prepare_for_work(self)
end
stop!() click to toggle source
# File lib/swarm/engine/worker.rb, line 56
def stop!
  @running = false
  @current_job = nil
end
teardown() click to toggle source
# File lib/swarm/engine/worker.rb, line 18
def teardown
  @queue = nil
end
work_on(queue_job) click to toggle source
# File lib/swarm/engine/worker.rb, line 61
def work_on(queue_job)
  raise NotRunningError unless running?
  command = Command.from_job(queue_job, hive: hive)
  if command.stop?
    queue.remove_worker(self, :stop_job => queue_job)
    stop!
  else
    command.run!
  end
end
working?() click to toggle source
# File lib/swarm/engine/worker.rb, line 48
def working?
  @working == true
end