Sha256: 184337ce761f8b8af6cc3d2ef94516908698d3a108b5bd5896c5f5b6210f8ce0

Contents?: true

Size: 1.23 KB

Versions: 1

Compression:

Stored size: 1.23 KB

Contents

require 'optparse'
require_relative '../upperkut'
require_relative 'manager'

module Upperkut
  class CLI
    def initialize(args = ARGV)
      @options = {}
      parse_options(args)
    end

    def start
      if file = @options[:file]
        require file
      end

      manager = Manager.new(@options)

      r, w = IO.pipe
      signals = %w(INT TERM)

      signals.each do |signal|
        w.puts(signal)
      end

      begin
        manager.run

        while readable_io = IO.select([r])
          signal = readable_io.first[0].gets.strip
          handle_signal(signal)
        end
      rescue Interrupt
        puts 'Shutting down'
        manager.stop
        exit(0)
      end
    end

    private

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

    def parse_options(args)
      OptionParser.new do |o|
        o.on('-w', '--worker WORKER', 'Define worker to be processed') do |arg|
          @options[:worker] = arg
        end
        o.on('-r', '--require FILE', 'Indicate a file to be required') do |arg|
          @options[:file] = arg
        end

      end.parse!(args)
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
upperkut-0.1.0 lib/upperkut/cli.rb