null+****@clear*****
null+****@clear*****
2011年 6月 2日 (木) 15:43:09 JST
Kouhei Sutou 2011-06-02 06:43:09 +0000 (Thu, 02 Jun 2011) New Revision: 607d0484552fca906d747ada948208d0319911b8 Log: [query-log][analyzer] steps returns parsed steps. refs #939 Modified files: test/unit/tools/test-query-log-analyzer.rb tools/groonga-query-log-analyzer.rb Modified: test/unit/tools/test-query-log-analyzer.rb (+21 -5) =================================================================== --- test/unit/tools/test-query-log-analyzer.rb 2011-06-02 06:04:44 +0000 (286e090) +++ test/unit/tools/test-query-log-analyzer.rb 2011-06-02 06:43:09 +0000 (057ccab) @@ -84,11 +84,9 @@ module QueryLogAalyzerTest @parser = GroongaQueryLogAnaylzer::QueryLogParser.new end - def test_name - @parser.parse(StringIO.new(log)) - steps = [] - @parser.statistics.first.each_step do |step| - steps << [step[:name], step[:context]] + def test_context + steps = statistics.first.steps.collect do |step| + [step[:name], step[:context]] end expected = [ ["filter", "local_name @ \"gsub\""], @@ -100,6 +98,20 @@ module QueryLogAalyzerTest assert_equal(expected, steps) end + def test_n_records + steps = statistics.first.steps.collect do |step| + [step[:name], step[:n_records]] + end + expected = [ + ["filter", 15], + ["filter", 13], + ["select", 13], + ["sort", 10], + ["output", 10], + ] + assert_equal(expected, steps) + end + private def log <<-EOL @@ -112,5 +124,9 @@ module QueryLogAalyzerTest 2011-06-02 14:28:52.954958|28027ba0|<000000002985581 rc=0 EOL end + + def statistics + @parser.parse(StringIO.new(log)) + end end end Modified: tools/groonga-query-log-analyzer.rb (+25 -9) =================================================================== --- tools/groonga-query-log-analyzer.rb 2011-06-02 06:04:44 +0000 (df4a83a) +++ tools/groonga-query-log-analyzer.rb 2011-06-02 06:43:09 +0000 (9a6bd83) @@ -177,7 +177,7 @@ class GroongaQueryLogAnaylzer class Statistic attr_reader :context_id, :start_time, :raw_command - attr_reader :steps, :elapsed, :return_code + attr_reader :elapsed, :return_code def initialize(context_id) @context_id = context_id @start_time = nil @@ -224,11 +224,24 @@ class GroongaQueryLogAnaylzer :relative_elapsed_in_seconds => nano_seconds_to_seconds(relative_elapsed), :name => step[:name], :context => step_context(step[:name], i), + :n_records => step[:n_records], } yield parsed_step end end + def add_step(step) + @steps << step + end + + def steps + _steps = [] + each_step do |step| + _steps << step + end + _steps + end + def select_command? command.name == "select" end @@ -309,11 +322,9 @@ class GroongaQueryLogAnaylzer n_records = $3.to_i statistic = current_statistics[context_id] return if statistic.nil? - statistic.steps << { - :elapsed => elapsed.to_i, - :name => name, - :n_records => n_records, - } + statistic.add_step(:name => name, + :elapsed => elapsed.to_i, + :n_records => n_records) when "<" return unless /\A(\d+) rc=(\d+)/ =~ rest elapsed = $1 @@ -546,9 +557,14 @@ class GroongaQueryLogAnaylzer if slow?(relative_elapsed_in_seconds) formatted_elapsed = colorize(formatted_elapsed, :slow) end - step_report = " %2d) %s: %s" % [step[:i] + 1, - formatted_elapsed, - step[:name]] + step_report = " %2d) %s: %10s" % [step[:i] + 1, + formatted_elapsed, + step[:name]] + if step[:n_records] + step_report << "(%6d)" % step[:n_records] + else + step_report << "(%6s)" % "" + end context = step[:context] if context if slow?(relative_elapsed_in_seconds)