Sha256: efaa3f1f1559baa103a7f8fb1db6b9c6a14115ea7cd4513b1ab65d1aac377512
Contents?: true
Size: 2 KB
Versions: 3
Compression:
Stored size: 2 KB
Contents
module Karafka # Class used to catch signals from ruby Signal class in order to manage Karafka shutdown # @note There might be only one process - this class is a singleton class Process include Singleton # Signal types that we handle HANDLED_SIGNALS = %i( SIGINT SIGQUIT ).freeze HANDLED_SIGNALS.each do |signal| # Assigns a callback that will happen when certain signal will be send # to Karafka server instance # @note It does not define the callback itself -it needs to be passed in a block # @example Define an action that should be taken on_sigint # process.on_sigint do # Karafka.logger.info('Log something here') # exit # end define_method :"on_#{signal.to_s.downcase}" do |&block| @callbacks[signal] << block end end # Creates an instance of process and creates empty hash for callbacks def initialize @callbacks = {} HANDLED_SIGNALS.each { |signal| @callbacks[signal] = [] } end # Method catches all HANDLED_SIGNALS and performs appropriate callbacks (if defined) # @note If there are no callbacks, this method will just ignore a given signal that was sent # @yield [Block] block of code that we want to execute and supervise def supervise HANDLED_SIGNALS.each { |signal| trap_signal(signal) } yield end private # Traps a single signal and performs callbacks (if any) or just ignores this signal # @param [Symbol] signal type that we want to catch def trap_signal(signal) trap(signal) do notice_signal(signal) (@callbacks[signal] || []).each(&:call) end end # Informs monitoring about trapped signal # @param [Symbol] signal type that we received # @note We cannot perform logging from trap context, that's why # we have to spin up a new thread to do this def notice_signal(signal) Thread.new do Karafka.monitor.notice(self.class, signal: signal) end end end end
Version data entries
3 entries across 3 versions & 1 rubygems
Version | Path |
---|---|
karafka-0.5.0.2 | lib/karafka/process.rb |
karafka-0.5.0.1 | lib/karafka/process.rb |
karafka-0.5.0 | lib/karafka/process.rb |