Sha256: 5a6806f603e43d35fe9014c055d93d40703fd4d5ad5d988796d14452525a5994

Contents?: true

Size: 1.32 KB

Versions: 3

Compression:

Stored size: 1.32 KB

Contents

module Eventboss
  class Runner
    extend Logging

    class << self
      def launch
        queues = Eventboss::QueueListener.select(
          include: Eventboss.configuration.listeners[:include],
          exclude: Eventboss.configuration.listeners[:exclude]
        )
        client = Eventboss.configuration.sqs_client
        config = Eventboss.configuration

        Eventboss::Instrumentation.add(queues)

        launcher = Launcher.new(queues, client, worker_count: config.concurrency)

        self_read = setup_signals([:SIGTERM])

        logger.info('Active Listeners:')
        logger.info(queues.to_s)
        begin
          launcher.start
          handle_signals(self_read, launcher)
        rescue Interrupt
          launcher.stop
          exit 0
        end
      end

      private

      def setup_signals(signals)
        self_read, self_write = IO.pipe

        signals.each do |signal|
          trap signal do
            self_write.puts signal
          end
        end

        self_read
      end

      def handle_signals(self_read, launcher)
        while readable_io = IO.select([self_read])
          signal = readable_io.first[0].gets.strip
          logger.info('runner') { "Received #{ signal } signal, gracefully shutdowning..." }

          launcher.stop
          exit 0
        end
      end
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
eventboss-1.3.1 lib/eventboss/runner.rb
eventboss-1.3.0 lib/eventboss/runner.rb
eventboss-1.2.1 lib/eventboss/runner.rb