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