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