#!/usr/bin/env ruby # encoding: utf-8 $:.unshift(File.expand_path('../lib', File.dirname(__FILE__))) require 'request_log_analyzer' require 'cli/command_line_arguments' require 'cli/progressbar' require 'cli/tools' # Parse the arguments given via commandline begin arguments = CommandLine::Arguments.parse do |command_line| command_line.command(:install) do |install| install.parameters = 1 end command_line.command(:console) do |cons| cons.option(:database, :alias => :d, :required => true) end command_line.command(:strip) do |strip| strip.minimum_parameters = 1 strip.option(:format, :alias => :f, :default => 'rails') strip.option(:output, :alias => :o) strip.switch(:discard_teaser_lines, :t) strip.switch(:keep_junk_lines, :j) end command_line.option(:format, :alias => :f) command_line.option(:apache_format) command_line.option(:rails_format) command_line.option(:file, :alias => :e) command_line.option(:mail, :alias => :m) command_line.option(:mailhost, :default => 'localhost') command_line.option(:mailsubject) command_line.option(:parse_strategy, :default => 'assume-correct') command_line.option(:yaml) command_line.option(:dump) # To be deprecated command_line.option(:aggregator, :alias => :a, :multiple => true) command_line.option(:database, :alias => :d) command_line.switch(:reset_database) # filtering options command_line.option(:select, :multiple => true, :parameters => 2) command_line.option(:reject, :multiple => true, :parameters => 2) command_line.option(:after) command_line.option(:before) command_line.switch(:boring, :b) command_line.option(:output, :alias => :o, :default => 'fixedwidth') command_line.option(:report_width, :default => terminal_width - 1) command_line.option(:report_amount, :default => 20) command_line.option(:report_sort, :default => 'sum,mean') command_line.switch(:debug) command_line.switch(:no_progress) command_line.switch(:gets_memory_protection) command_line.switch(:silent) command_line.minimum_parameters = 1 end rescue CommandLine::Error => e puts "Request-log-analyzer, by Willem van Bergen and Bart ten Brinke - version #{RequestLogAnalyzer::VERSION}" puts "Website: http://railsdoctors.com" puts puts "ARGUMENT ERROR: " + e.message if e.message puts puts "Usage: request-log-analyzer [LOGFILES*] <OPTIONS>" puts puts "Input options:" puts " --after <date> Only consider requests from <date> or later." puts " --before <date> Only consider requests before <date>." puts " --format <format>, -f: Log file format. amazon_s3, apache, merb, mysql, rack or rails." puts " --reject <field> <value> Only consider requests where <field> does not match <value>." puts " --select <field> <value> Only consider requests where <field> matches <value>." puts puts "Output options:" puts " --boring, -b Output reports without ASCII colors." puts " --database <filename>, -d: Creates an SQLite3 database of all the parsed request information." puts " --debug Print debug information while parsing." puts " --file <filename> Redirect output to file." puts " --mail <emailaddress> Send report to an email address." puts " --mailhost <server> Use the given server as the SMTP server for sending email." puts " --mailsubject <text> Overwrite default mailsubject." puts " --no-progress Hide the progress bar." puts " --output <format> Output format. Supports 'html' and 'fixed_width'." puts " --report-width <amount> Width of ASCII report. Defaults to terminal width." puts " --report-amount <amount> Maximum numer of results per report." puts " --silent Skip the commercials (includes --no-progress)." puts " --yaml <filename> Dump the results in YAML format in the given file." puts " --parse-strategy <strategy> Legal values are 'assume-correct' or 'cautious'." puts puts "Examples:" puts " request-log-analyzer production.log" puts " request-log-analyzer mongrel.0.log mongrel.1.log --output HTML --mail root@localhost" puts " request-log-analyzer --format merb -d requests.db production.log" puts " request-log-analyzer mysql_slow_query.log --reject query /SQL_NO_CACHE/" puts puts "To install rake tasks in your Rails application, " puts "run the following command in your application's root directory:" puts puts " request-log-analyzer install rails" exit(0) end case arguments.command when :install install_rake_tasks(arguments.parameters[0]) when :console require 'cli/database_console' DatabaseConsole.new(arguments).run! when :strip RequestLogAnalyzer::LogProcessor.build(:strip, arguments).run! else unless arguments[:silent] puts "Request-log-analyzer, by Willem van Bergen and Bart ten Brinke - version #{RequestLogAnalyzer::VERSION}" puts "Website: http://railsdoctors.com" puts end # Run the request_log_analyzer! RequestLogAnalyzer::Controller.build_from_arguments(arguments).run! end