diff --git a/README.md b/README.md index 0e3efe4..536750d 100644 --- a/README.md +++ b/README.md @@ -49,6 +49,7 @@ Before you can run your test is necessary to bootstrap your logstash installatio If you are in 1.5.x: - Run `rake bootstrap` to setup the system. - Run `lsperfm-deps` to install the test dependencies + For 1.4: - Run `bin/logstash deps` to setup everything. diff --git a/lib/lsperfm.rb b/lib/lsperfm.rb index e82dbc8..1282f6f 100644 --- a/lib/lsperfm.rb +++ b/lib/lsperfm.rb @@ -1,5 +1,6 @@ require 'yaml' require 'lsperfm/core' +require 'terminal-table' module LogStash module PerformanceMeter @@ -7,15 +8,30 @@ module PerformanceMeter extend self def invoke - debug = !!ENV['DEBUG'] - headers = !!ENV['HEADERS'] + debug = 'false' != ENV.fetch('DEBUG', 'false') + display_headers = 'false' != ENV.fetch('HEADERS', 'true') + table_output = 'false' != ENV.fetch('TABLE_OUTPUT', 'false') - install_path = ARGV.size > 1 ? ARGV[1] : Dir.pwd - definition = ARGV.size > 0 ? ARGV[0] : "" + install_path = ARGV.size > 1 ? ARGV[1] : Dir.pwd + definition = ARGV.size > 0 ? ARGV[0] : "" runner = LogStash::PerformanceMeter::Core.new(definition, install_path) runner.config = '.lsperfm' if File.exist?('.lsperfm.yml') - puts runner.run(debug, headers).join("\n") + + results = runner.run(debug) + headings = results.slice!(0) + + puts '' + if table_output + table = Terminal::Table.new + table.headings = headings.split(',') if display_headers + table.rows = results.map { |result| result.split(',') } + + puts table + else + puts headings if display_headers + puts results.join('\n') + end end end diff --git a/lib/lsperfm/core.rb b/lib/lsperfm/core.rb index 75985b2..a987fe6 100644 --- a/lib/lsperfm/core.rb +++ b/lib/lsperfm/core.rb @@ -16,9 +16,9 @@ def initialize(definition, install_path, config='', runner = LogStash::Performan @config = load_config(config) end - def run(debug=false, headers=false) + def run(debug=false) tests = load_tests(definition) - lines = (headers ? ["name, #{runner.headers.join(',')}"] : []) + lines = ["name,#{runner.headers.join(',')}"] reporter = LogStash::PerformanceMeter::Reporter.new.start tests.each do |test| events = test[:events].to_i diff --git a/lib/lsperfm/core/run.rb b/lib/lsperfm/core/run.rb index e000088..c8c0cfd 100644 --- a/lib/lsperfm/core/run.rb +++ b/lib/lsperfm/core/run.rb @@ -68,7 +68,7 @@ def self.read_input_file(file_path) def feed_input_events(io, events_count, lines, last_message) loop_count = (events_count / lines.size).ceil # how many time we send the input file over - (1..loop_count).each{lines.each {|line| io.puts(line)}} + loop_count.times{lines.each {|line| io.puts(line)}} io.puts(last_message) io.flush @@ -85,7 +85,7 @@ def feed_input_interval(io, seconds, lines, last_message) count = 0 while true - (1..loop_count).each{lines.each {|line| io.puts(line)}} + loop_count.times{lines.each {|line| io.puts(line)}} count += lines_per_iteration break if (Time.now - start_time) >= seconds end diff --git a/logstash-perftool.gemspec b/logstash-perftool.gemspec index 3d1b2b8..b1f7030 100644 --- a/logstash-perftool.gemspec +++ b/logstash-perftool.gemspec @@ -17,6 +17,7 @@ Gem::Specification.new do |gem| gem.executables = ["lsperfm", "lsperfm-deps"] + gem.add_dependency "terminal-table" gem.add_development_dependency "bundler", "~> 1.7" gem.add_development_dependency "rake", "~> 10.0" gem.add_development_dependency "rspec", '~> 3.3', '>= 3.3.0' #(MIT license) diff --git a/spec/lib/runner_spec.rb b/spec/lib/runner_spec.rb index 5000d4a..7a2274a 100644 --- a/spec/lib/runner_spec.rb +++ b/spec/lib/runner_spec.rb @@ -13,7 +13,7 @@ let(:command) { [File.join(Dir.pwd, LogStash::PerformanceMeter::Runner::LOGSTASH_BIN), "-f", "spec/fixtures/simple.conf"]} it "invokes the logstash command" do - Open3.should_receive(:popen3).with(*command).and_return(true) + expect(Open3).to receive(:popen3).with(*command).and_return(true) runner.run(events, 0, lines) end