[Groonga-commit] groonga/groonga [master] [query-log][analyzer] steps returns parsed steps. refs #939

アーカイブの一覧に戻る

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)




Groonga-commit メーリングリストの案内
アーカイブの一覧に戻る