class Turnstile::CLI::Parser
Attributes
argv[RW]
options[RW]
system[RW]
Public Class Methods
new(argv, system)
click to toggle source
# File lib/turnstile/cli/parser.rb, line 15 def initialize(argv, system) self.system = system self.argv = argv.dup self.options = Hashie::Mash.new self.argv << '-h' if argv.empty? end
Public Instance Methods
parse()
click to toggle source
# File lib/turnstile/cli/parser.rb, line 22 def parse begin OptionParser.new do |opts| opts.banner = ' ' opts.separator 'DESCRIPTION:'.bold.magenta opts.separator ' ' + ::Turnstile::GEM_DESCRIPTION.gsub(/\n/, "\n ").strip opts.separator '' opts.separator "USAGE:\n".bold.magenta + " # Tail the log file as a proper daemon\n".bold.black + " turnstile -f <file> [ --daemon ] [ options ]\n\n".yellow + " # Add a single item and exit\n".bold.black + " turnstile -a 'platform:ip:user' [ options ]\n\n".yellow + " # Print the summary stats and exit\n".bold.black + ' turnstile -s [ json | csv | nad ] [ options ]'.yellow opts.separator '' opts.separator 'DETAILS:'.bold.magenta opts.separator ' ' + ::Turnstile::DESCRIPTION.gsub(/\n/, "\n ").strip opts.separator '' opts.separator 'OPTIONS:'.bold.magenta opts.separator "\n Mode of Operation:".bold.green opts.on('-f', '--file FILE', 'Starts Turnstile in a file-tailing mode', ' ') do |file| options[:file] = file end opts.on('-s', '--show [FORMAT]', 'Print current stats and exit. Optional ', 'format can be "json" (default), "nad",', '"yaml", or "csv"', ' ') do |v| options[:show] = true options[:show_format] = (v || 'json').to_sym end opts.on('-w', '--web [PORT]', 'Starts a Sinatra app on a given port', 'offering /turnstile/<json|yaml> end point.', 'Can be used with file tailing mode, or', 'standalone. Default port is ' + ::Turnstile::DEFAULT_PORT.to_s, ' ' ) do |v| options[:web] = true Turnstile.config.port = v.to_i if v end opts.on('-a', '--add TOKEN', 'Registers an event from the token, such as ', '"ios:123.4.4.4:32442". Use -l to customize', 'the delimiter', ' ') do |v| options[:token] = v end opts.on('-p', '--print-keys', 'Prints all Turnstile keys in Redis', ' ') do |v| options[:print_keys] = true end opts.on('--flushdb', 'Wipes Redis database, and exit', ' ') do |v| options[:flushdb] = true end opts.separator ' Tailing log file:'.bold.green opts.on('-d', '--daemonize', 'Daemonize to watch the logs', ' ') do |v| options[:daemonize] = true end opts.on('-b', '--read-backwards [LINES]', 'Like tail, read last LINES lines', 'instead of tailing from the end', ' ') do |lines| options[:tail] = lines ? lines.to_i : -1 end opts.on('-F', '--format FORMAT', 'Log file format (see above)', ' ') do |format| options[:filetype] = format end opts.on('-l', '--delimiter CHAR', 'Forces "delimited" file type, and ', 'uses CHAR as the delimiter', ' ') do |v| options[:delimiter] = v end opts.on('-c', '--config FILE', 'Ruby config file that can define the', 'custom matcher, supporting arbitrary ', 'complex logs') do |file| options[:config_file] = file end opts.separator "\n Redis Server:".bold.green opts.on('-r', '--redis-url URL', 'Redis server URL') { |host| Turnstile.config.redis_url = host } opts.on('--redis-host HOST', 'Redis server host') { |host| Turnstile.config.redis_host = host } opts.on('--redis-port PORT', 'Redis server port') { |port| Turnstile.config.redis_port = port } opts.on('--redis-db DB', 'Redis server db') { |db| Turnstile.config.redis_db = db } opts.on('--hiredis', 'Use hiredis high performance library') do |_value| begin require 'redis/connection/hiredis' rescue LoadError => e raise HiredisDriverNotFound, "Can not use hiredis driver: #{e.message}" end Turnstile.config.redis_use_hiredis = true end opts.separator "\n Miscellaneous:".bold.green opts.on('-i', '--idle-sleep SECONDS', 'When no work was detected, pause the ', 'threads for several seconds.') do |v| Turnstile.config.flush_interval = v.to_i end opts.on('-v', '--verbose', 'Print status to stdout') { |v| options[:verbose] = true } opts.on('-t', '--trace', 'Enable trace mode') do |v| options[:trace] = true Turnstile.config.trace = true end opts.on_tail('-h', '--help', 'Show this message') do puts opts return end end.parse!(argv) options rescue OptionParser::MissingArgument => e terr 'Invalid Usage: ' + e.message.red, stderr nil rescue Exception => e terr e.message.bold.red, stderr nil end end