class Slowproxy::CLI

Public Class Methods

start(argv) click to toggle source
# File lib/slowproxy/cli.rb, line 4
def self.start(argv)
  new.run(argv)
end

Public Instance Methods

parse_bps(str) click to toggle source
# File lib/slowproxy/cli.rb, line 38
def parse_bps(str)
  return unless str
  case str.strip.downcase
  when /\A(\d+)(g|m|k|)(bps)?\z/
    num, order, * = $~.captures
    num.to_i * case order
    when ""
      1
    when "k"
      1024
    when "m"
      1024 ** 2
    when "g"
      1024 ** 3
    end
  end
end
run(argv) click to toggle source
# File lib/slowproxy/cli.rb, line 8
def run(argv)
  options = {
    port: 8989,
    bps: 128 * 1024,
    debug: false,
  }

  OptionParser.new do |o|
    o.banner = "Usage: #{$0} [options] [speed(g|m|k)[bps]]"
    o.on("-p PORT", "--port=PORT", Integer){|i| options[:port] = i }
    o.on("--debug", TrueClass){|b| options[:debug] = b }
    o.parse!(argv)
    options[:bps] = parse_bps(argv.first) unless argv.empty?
  end

  logger = WEBrick::Log::new(STDOUT, options[:debug] ? WEBrick::Log::DEBUG : WEBrick::Log::INFO)

  server = Server.new(
    Logger: logger,
    Port: options[:port],
    BPS: options[:bps],
  )

  Signal.trap('INT') do
    server.shutdown
  end

  server.start
end