class Cuetip::Worker
Attributes
status[R]
Public Class Methods
new(group, id, queues)
click to toggle source
# File lib/cuetip/worker.rb, line 13 def initialize(group, id, queues) @group = group @id = id @queues = queues end
Public Instance Methods
request_exit!()
click to toggle source
# File lib/cuetip/worker.rb, line 19 def request_exit! @exit_requested = true interrupt_sleep end
run()
click to toggle source
# File lib/cuetip/worker.rb, line 24 def run set_status('idle') loop do unless run_once interruptible_sleep(Cuetip.config.polling_interval + rand) end break if @exit_requested end end
run_once()
click to toggle source
# File lib/cuetip/worker.rb, line 35 def run_once set_status('polling') run_callbacks :poll do queued_job = silence do if @queues.any? scope = Cuetip::Models::QueuedJob.from_queues(@queues) else scope = Cuetip::Models::QueuedJob end scope.find_and_lock end if queued_job set_status("executing #{queued_job.job.id}") run_callbacks :execute do queued_job.job.execute end set_status('idle') true else set_status('idle') false end end end
Private Instance Methods
interrupt_sleep()
click to toggle source
# File lib/cuetip/worker.rb, line 75 def interrupt_sleep @sleep_interrupt&.close end
interruptible_sleep(seconds)
click to toggle source
# File lib/cuetip/worker.rb, line 68 def interruptible_sleep(seconds) sleep_check, @sleep_interrupt = IO.pipe IO.select([sleep_check], nil, nil, seconds) sleep_check.close @sleep_interrupt.close end
set_status(status)
click to toggle source
# File lib/cuetip/worker.rb, line 63 def set_status(status) @status = status @group&.set_process_name end
silence(&block)
click to toggle source
# File lib/cuetip/worker.rb, line 79 def silence(&block) if ActiveRecord::Base.logger ActiveRecord::Base.logger.silence(&block) else block.call end end