deliveroo/routemaster

View on GitHub
bin/worker

Summary

Maintainability
Test Coverage
#!/usr/bin/env ruby
 
require_relative '../config/bootstrap.rb'
require 'routemaster/models/counters'
require 'routemaster/services/thread_group'
require 'routemaster/services/worker'
require 'routemaster/services/ticker'
require 'routemaster/services/scheduler'
require 'routemaster/mixins/log'
 
include Routemaster::Mixins::Log
 
Routemaster.configure(
redis_pool_size: Integer(ENV.fetch('ROUTEMASTER_WORKER_THREADS')) + 2,
process_type: 'worker',
)
 
 
_log.info { 'creating thread group' }
Routemaster::Services::ThreadGroup.new.tap do |group|
# job promoter
group.add Routemaster::Services::Scheduler.new, name: 'scheduler'
 
# ticker threads
group.add Routemaster::Services::Ticker.new(
queue: Routemaster.aux_queue, name: 'autodrop', every: 10_000
), name: 'ticker.autodrop'
group.add Routemaster::Services::Ticker.new(
queue: Routemaster.aux_queue, name: 'monitor', every: ENV.fetch('ROUTEMASTER_MONITOR_INTERVAL').to_i * 1_000
), name: 'ticker.monitor'
group.add Routemaster::Services::Ticker.new(
queue: Routemaster.aux_queue, name: 'scrub_queues', every: 60_000
), name: 'ticker.scrub_queues'
group.add Routemaster::Services::Ticker.new(
queue: Routemaster.aux_queue, name: 'scrub_workers', every: 120_000
), name: 'ticker.scrub_workers'
 
# aux worker thread
group.add Routemaster::Services::Worker.new(
queue: Routemaster.aux_queue
), name: "worker.aux"
 
# main worker threads
Integer(ENV.fetch('ROUTEMASTER_WORKER_THREADS')).times do |idx|
group.add Routemaster::Services::Worker.new(
queue: Routemaster.batch_queue
), name: "worker.main.#{idx + 1}"
end
 
_log.info { 'trapping signals for clean exit' }
%w(INT TERM QUIT).each do |signal|
Kernel.trap(signal) { Thread.new { group.stop } }
end
 
_log.info { 'job worker: started' }
group.wait
end
 
 
Routemaster.teardown
_log.info { 'job worker: completed' }
Kernel.exit(0)