Sha256: c83dd21c1a414b3f559c0bd04b1ae4a5ab253c8cd628a72a5977ac4752b57a6e

Contents?: true

Size: 1.13 KB

Versions: 3

Compression:

Stored size: 1.13 KB

Contents

module QueueKit
  class SignalChecker
    COMMON_SIGNALS = %w(TERM INT)
    JRUBY_SIGNALS = %w(QUIT USR1)
    OPTIONAL_SIGNALS = %w(USR2 CONT HUP)

    attr_reader :worker
    attr_reader :handler

    def self.trap(worker, handler)
      new(worker, handler).trap_signals
    end

    def initialize(worker, handler)
      @worker = worker
      @handler = handler
    end

    def trap_signals(signals = nil)
      if signals.nil?
        trap_signals(COMMON_SIGNALS)
        trap_signals(JRUBY_SIGNALS) unless defined?(JRUBY_VERSION)
        trap_signals(OPTIONAL_SIGNALS)
      else
        signals.each { |sig| trap_signal(sig) }
      end

    rescue ArgumentError
      warn "Signals are not supported: #{signals.inspect}"
    end

    def trap_signal(sig)
      trap_method = "trap_#{sig}"
      return unless @handler.respond_to?(trap_method)

      debug :setup, sig

      old_handler = trap sig do
        debug :trap, sig
        @handler.send(trap_method, @worker)
        old_handler.call if old_handler.respond_to?(:call)
      end
    end

    def debug(key, sig)
      @worker.debug { ["signals.#{key}", {:signal => sig}] }
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
queue_kit-0.0.9 lib/queue_kit/signal_checker.rb
queue_kit-0.0.8 lib/queue_kit/signal_checker.rb
queue_kit-0.0.6 lib/queue_kit/signal_checker.rb