[Groonga-commit] groonga/groonga [master] [query-log][analyzer] support drilldown. refs #939

Back to archive index

null+****@clear***** null+****@clear*****
2011年 6月 2日 (木) 16:28:22 JST


Kouhei Sutou	2011-06-02 07:28:22 +0000 (Thu, 02 Jun 2011)

  New Revision: f09d2334a744d0a6cb686d02290d3d6c5efdca68

  Log:
    [query-log][analyzer] support drilldown. 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 (+13 -7)
===================================================================
--- test/unit/tools/test-query-log-analyzer.rb    2011-06-02 07:20:24 +0000 (be53d1c)
+++ test/unit/tools/test-query-log-analyzer.rb    2011-06-02 07:28:22 +0000 (00424f1)
@@ -90,6 +90,8 @@ module QueryLogAalyzerTest
         ["select", nil],
         ["sort", "_score"],
         ["output", "_key"],
+        ["drilldown", "name"],
+        ["drilldown", "class"],
       ]
       assert_equal(expected, steps)
     end
@@ -104,6 +106,8 @@ module QueryLogAalyzerTest
         ["select", 13],
         ["sort", 10],
         ["output", 10],
+        ["drilldown", 3],
+        ["drilldown", 2],
       ]
       assert_equal(expected, steps)
     end
@@ -111,13 +115,15 @@ module QueryLogAalyzerTest
     private
     def log
       <<-EOL
-2011-06-02 14:28:52.951973|28027ba0|>/d/select.join?table=Entries&filter=local_name+%40+%22gsub%22+%26%26+description+%40+%22string%22&sortby=_score&output_columns=_key
-2011-06-02 14:28:52.953499|28027ba0|:000000001523131 filter(15)
-2011-06-02 14:28:52.954335|28027ba0|:000000002362555 filter(13)
-2011-06-02 14:28:52.954381|28027ba0|:000000002408669 select(13)
-2011-06-02 14:28:52.954528|28027ba0|:000000002555263 sort(10)
-2011-06-02 14:28:52.954821|28027ba0|:000000002847858 output(10)
-2011-06-02 14:28:52.954958|28027ba0|<000000002985581 rc=0
+2011-06-02 16:27:04.731685|5091e5c0|>/d/select.join?table=Entries&filter=local_name+%40+%22gsub%22+%26%26+description+%40+%22string%22&sortby=_score&output_columns=_key&drilldown=name,class
+2011-06-02 16:27:04.733539|5091e5c0|:000000001849451 filter(15)
+2011-06-02 16:27:04.734978|5091e5c0|:000000003293459 filter(13)
+2011-06-02 16:27:04.735012|5091e5c0|:000000003327415 select(13)
+2011-06-02 16:27:04.735096|5091e5c0|:000000003411824 sort(10)
+2011-06-02 16:27:04.735232|5091e5c0|:000000003547265 output(10)
+2011-06-02 16:27:04.735606|5091e5c0|:000000003921419 drilldown(3)
+2011-06-02 16:27:04.735762|5091e5c0|:000000004077552 drilldown(2)
+2011-06-02 16:27:04.735808|5091e5c0|<000000004123726 rc=0
 EOL
     end
 

  Modified: tools/groonga-query-log-analyzer.rb (+17 -3)
===================================================================
--- tools/groonga-query-log-analyzer.rb    2011-06-02 07:20:24 +0000 (8baf6bf)
+++ tools/groonga-query-log-analyzer.rb    2011-06-02 07:28:22 +0000 (fb5c2af)
@@ -165,6 +165,10 @@ class GroongaQueryLogAnaylzer
       end
     end
 
+    def drilldowns
+      @drilldowns ||= (@parameters["drilldown"] || "").split(/\s*,\s*/)
+    end
+
     def output_columns
       @parameters["output_columns"]
     end
@@ -208,6 +212,10 @@ class GroongaQueryLogAnaylzer
     def each_step
       previous_elapsed = 0
       ensure_parse_command
+      step_context_context = {
+        :filter_index => 0,
+        :drilldown_index => 0,
+      }
       @steps.each_with_index do |step, i|
         relative_elapsed = step[:elapsed] - previous_elapsed
         previous_elapsed = step[:elapsed]
@@ -218,7 +226,7 @@ class GroongaQueryLogAnaylzer
           :relative_elapsed => relative_elapsed,
           :relative_elapsed_in_seconds => nano_seconds_to_seconds(relative_elapsed),
           :name => step[:name],
-          :context => step_context(step[:name], i),
+          :context => step_context(step[:name], step_context_context),
           :n_records => step[:n_records],
         }
         yield parsed_step
@@ -246,16 +254,22 @@ class GroongaQueryLogAnaylzer
       nano_seconds / 1000.0 / 1000.0 / 1000.0
     end
 
-    def step_context(label, i)
+    def step_context(label, context)
       case label
       when "filter"
-        @select_command.conditions[i]
+        index = context[:filter_index]
+        context[:filter_index] += 1
+        @select_command.conditions[index]
       when "sort"
         @select_command.sortby
       when "score"
         @select_command.scorer
       when "output"
         @select_command.output_columns
+      when "drilldown"
+        index = context[:drilldown_index]
+        context[:drilldown_index] += 1
+        @select_command.drilldowns[index]
       else
         nil
       end




Groonga-commit メーリングリストの案内
Back to archive index