Sha256: 77f579cda08a8909dd2a47bd77db0adf22da59e75aa8179288643139edad2999
Contents?: true
Size: 1.69 KB
Versions: 2
Compression:
Stored size: 1.69 KB
Contents
require "singleton" require "harmoniser" require "harmoniser/parser" require "harmoniser/launcher" module Harmoniser class CLI class SigUsr1 < StandardError; end include Singleton SIGNAL_HANDLERS = { "INT" => lambda { |cli, signal| raise Interrupt }, "TERM" => lambda { |cli, signal| raise Interrupt }, "USR1" => lambda { |cli, signal| raise SigUsr1 } } SIGNAL_HANDLERS.default = lambda { |cli, signal| cli.logger.info("Default signal handler executed since there is no handler defined: signal = `#{signal}`") } attr_reader :logger def initialize @configuration = Harmoniser.default_configuration @logger = Harmoniser.logger end def call parse_options @launcher = Launcher.call(configuration: @configuration, logger: @logger) run end private attr_reader :configuration def parse_options options = Parser.new(logger: @logger).call(ARGV) configuration.options_with(**options) end def define_signals @read_io, @write_io = IO.pipe ["INT", "TERM", "USR1"].each do |sig| Signal.trap(sig) do @write_io.puts(sig) end end end def run @launcher.start define_signals while @read_io.wait_readable signal = @read_io.gets.strip handle_signal(signal) end rescue Interrupt @write_io.close @read_io.close @launcher.stop exit(0) rescue SigUsr1 @write_io.close @read_io.close @launcher.stop exit(128 + 10) end def handle_signal(signal) logger.info("Signal received: signal = `#{signal}`") SIGNAL_HANDLERS[signal].call(self, signal) end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
harmoniser-0.11.0 | lib/harmoniser/cli.rb |
harmoniser-0.10.0 | lib/harmoniser/cli.rb |