class Banter::Server::SubscriberServer

Attributes

banter_worker_id[R]
hostname[R]
pid[R]
process_name[R]
workers[R]

Public Class Methods

instance() click to toggle source
# File lib/banter/server/subscriber_server.rb, line 21
def self.instance
  @instance ||= new
end

Public Instance Methods

set_workers(subscribers) click to toggle source
# File lib/banter/server/subscriber_server.rb, line 25
def set_workers(subscribers)
  @workers = subscribers.map { |subscriber| create_queue_listeners(subscriber) }
end
start() click to toggle source
# File lib/banter/server/subscriber_server.rb, line 29
def start
  set_information
  start_workers
  handle_interrupts
  handle_teardown
ensure
  stop_worker
end

Private Instance Methods

create_queue_listeners(subscriber_class) click to toggle source
# File lib/banter/server/subscriber_server.rb, line 84
def create_queue_listeners(subscriber_class)
  ClientQueueListener.new(subscriber_class)
end
handle_interrupts() click to toggle source
# File lib/banter/server/subscriber_server.rb, line 54
def handle_interrupts
  thread     = Thread.current
  interrupts = ["HUP", "INT", "QUIT", "ABRT", "TERM"]
  interrupts.each do |signal_name|
    Signal.trap(signal_name) {
      puts "Processing #{signal_name}"
      thread.run
    }
  end

  Thread.stop
end
handle_teardown() click to toggle source
# File lib/banter/server/subscriber_server.rb, line 40
def handle_teardown
  ::Banter::RabbitLogger.log_service("all_services", "Starting shutdown of all services")

  workers.each do |worker|
    ::Banter::RabbitLogger.log_service("all_services", "Tearing down worker: #{worker.worker_class.name}")
    begin
      STDOUT.puts "Tearing down subscriber for #{worker.worker_class.name}"
      worker.shutdown
    rescue => e
      ::Banter::RabbitLogger.log_service("all_services", "#{worker.worker_class.name} - did not tear down correctly.  Error - #{e.message}")
    end
  end
end
set_information() click to toggle source
# File lib/banter/server/subscriber_server.rb, line 78
def set_information
  @process_name = $0
  @pid          = Process.pid
  @hostname     = `hostname -f`.chomp
end
start_workers() click to toggle source
# File lib/banter/server/subscriber_server.rb, line 67
def start_workers
  workers.each do |worker|
    puts "starting worker #{worker.inspect}"
    worker.start
  end
end
stop_worker() click to toggle source
# File lib/banter/server/subscriber_server.rb, line 74
def stop_worker
  Banter::CLI.instance.remove_pid
end