class Employer::Boss
Attributes
employees[R]
keep_going[R]
logger[R]
pipeline[R]
sleep_time[R]
Public Class Methods
new(logger)
click to toggle source
# File lib/employer/boss.rb, line 7 def initialize(logger) @logger = logger @pipeline = Employer::Pipeline.new(logger) @employees = [] @sleep_time_index = 0 end
Public Instance Methods
allocate_employee(employee)
click to toggle source
# File lib/employer/boss.rb, line 18 def allocate_employee(employee) employees << employee end
busy_employees()
click to toggle source
# File lib/employer/boss.rb, line 100 def busy_employees employees.select { |employee| !employee.free? } end
delegate_job(job)
click to toggle source
# File lib/employer/boss.rb, line 94 def delegate_job(job) raise Employer::Errors::NoEmployeeFree unless employee = free_employee logger.info("Delegating job #{job.id} to employee #{employee.object_id}") employee.work(job) end
delegate_work()
click to toggle source
# File lib/employer/boss.rb, line 37 def delegate_work while free_employee? && job = get_work delegate_job(job) end end
free_employee()
click to toggle source
# File lib/employer/boss.rb, line 104 def free_employee employees.find(&:free?) end
free_employee?()
click to toggle source
# File lib/employer/boss.rb, line 108 def free_employee? free_employee end
get_work()
click to toggle source
# File lib/employer/boss.rb, line 43 def get_work sleep_times = [0.1, 0.5, 1, 2.5, 5] if job = pipeline.dequeue @sleep_time_index = 0 else @sleep_time_index += 1 unless @sleep_time_index == (sleep_times.count - 1) end @sleep_time = sleep_times[@sleep_time_index] sleep(sleep_time) job end
manage()
click to toggle source
# File lib/employer/boss.rb, line 26 def manage @keep_going = true while keep_going delegate_work progress_update end wait_on_employees end
pipeline_backend=(backend)
click to toggle source
# File lib/employer/boss.rb, line 14 def pipeline_backend=(backend) pipeline.backend = backend end
progress_update()
click to toggle source
# File lib/employer/boss.rb, line 55 def progress_update busy_employees.each do |employee| update_job_status(employee) end end
stop_employees()
click to toggle source
# File lib/employer/boss.rb, line 86 def stop_employees busy_employees.each do |employee| employee.stop_working update_job_status(employee) employee.free end end
stop_managing()
click to toggle source
# File lib/employer/boss.rb, line 22 def stop_managing @keep_going = false end
update_job_status(employee)
click to toggle source
# File lib/employer/boss.rb, line 61 def update_job_status(employee) return if employee.work_in_progress? job = employee.job if employee.work_completed? pipeline.complete(job) elsif employee.work_failed? if job.try_again? pipeline.reset(job) else pipeline.fail(job) end end employee.free end
wait_on_employees()
click to toggle source
# File lib/employer/boss.rb, line 79 def wait_on_employees busy_employees.each do |employee| employee.wait_for_completion update_job_status(employee) end end