Sha256: e214a2d7480f86b5e15e09e3834c564654db1678465df330b596e0cde75c475e

Contents?: true

Size: 1.44 KB

Versions: 9

Compression:

Stored size: 1.44 KB

Contents

require 'digest/sha1'

module SnowmanIO
  # The command line interface for SnowmanIO.
  class CLI
    attr_reader :options

    def self.run
      options = Options.new.parse!(ARGV)
      new(options).run
    end

    def initialize(options = {})
      @options = options
    end

    def run
      setup_logger

      # Self-pipe for deferred signal-handling (http://cr.yp.to/docs/selfpipe.html)
      self_read, self_write = IO.pipe

      %w(INT TERM USR1 USR2 TTIN).each do |sig|
        begin
          trap sig do
            self_write.puts(sig)
          end
        rescue ArgumentError
          puts "Signal #{sig} not supported"
        end
      end

      launcher = Launcher.new(options)

      begin
        launcher.start
        while readable_io = IO.select([self_read])
          signal = readable_io.first[0].gets.strip
          handle_signal(signal)
        end
      rescue Interrupt
        SnowmanIO.logger.info 'Shutting down'
        launcher.stop
        exit(0)
      end
    end

    private

    def handle_signal(sig)
      SnowmanIO.logger.debug "Received #{sig} signal"
      case sig
      when 'TERM'
        raise Interrupt
      when 'INT'
        raise Interrupt
      end
    end

    def setup_logger
      Celluloid.logger = (options[:verbose] ? SnowmanIO.logger : nil)
      if options[:verbose]
        SnowmanIO.logger.level = ::Logger::DEBUG
      else
        SnowmanIO.logger.level = ::Logger::INFO
      end
    end
  end
end

Version data entries

9 entries across 9 versions & 1 rubygems

Version Path
snowman-io-0.5.1 lib/snowman-io/cli.rb
snowman-io-0.5.0 lib/snowman-io/cli.rb
snowman-io-0.4.0 lib/snowman-io/cli.rb
snowman-io-0.3.1 lib/snowman-io/cli.rb
snowman-io-0.3.0 lib/snowman-io/cli.rb
snowman-io-0.2.0 lib/snowman-io/cli.rb
snowman-io-0.1.0 lib/snowman-io/cli.rb
snowman-io-0.0.6 lib/snowman-io/cli.rb
snowman-io-0.0.5 lib/snowman-io/cli.rb