groonga-query-log 1.3.9 → 1.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +5 -5
- data/doc/text/news.md +19 -0
- data/lib/groonga-query-log/command/check-crash.rb +6 -3
- data/lib/groonga-query-log/command/format-regression-test-logs.rb +29 -22
- data/lib/groonga-query-log/command/run-regression-test.rb +14 -0
- data/lib/groonga-query-log/command/verify-server.rb +9 -0
- data/lib/groonga-query-log/filter-rewriter.rb +23 -0
- data/lib/groonga-query-log/server-verifier.rb +10 -1
- data/lib/groonga-query-log/statistic.rb +16 -7
- data/lib/groonga-query-log/version.rb +1 -1
- data/test/command/test-format-regression-test-logs.rb +39 -10
- data/test/test-filter-rewriter.rb +27 -0
- data/test/test-parser.rb +11 -0
- metadata +33 -34
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 815281fff50a93e07460fc0bb35ea453cfc8b36881f685facf2dc61b6481b564
|
4
|
+
data.tar.gz: 6fb79fe569bb61b35dbe7f876348be12c236791cfc53a25118c134f286974ebe
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: '083d46ede2bcb5ef1902210dcd2b4b67b95ec475704efd4c3c768827772e67fd667e6d8dc53b0d250ed5a5896366af5e7ff9b42d5708f5c3b0c90b6143d3bd6f'
|
7
|
+
data.tar.gz: 8d5f90bf96d8815f8c4dccdca755d3e49b13f5586b56e90d5ddd3f4af5561480b3394ed3a62c6c5b2ba5662e88fceab1a5d36c07280307a4e25094cc9fd7c8ae
|
data/doc/text/news.md
CHANGED
@@ -1,5 +1,24 @@
|
|
1
1
|
# News
|
2
2
|
|
3
|
+
## 1.4.0: 2019-03-13
|
4
|
+
|
5
|
+
### Improvements
|
6
|
+
|
7
|
+
* `groonga-query-log-run-regression-test`:
|
8
|
+
|
9
|
+
* Added support for rewriting `"column1 @ \"keyword\" && column2 @~ \"^(?!.*keyword1|keyword2|...).+$\""`.
|
10
|
+
Specify --rewrite-not-or-regular-expression option to enable it.
|
11
|
+
|
12
|
+
### Fixes
|
13
|
+
|
14
|
+
* `groonga-query-log-check-crash`:
|
15
|
+
|
16
|
+
* Fixed missing nil check when request path is "/".
|
17
|
+
|
18
|
+
* `GroongaQueryLog::Statistic`:
|
19
|
+
|
20
|
+
* Fixed missing nil check in `#to_hash` when request path is "/".
|
21
|
+
|
3
22
|
## 1.3.9: 2018-11-20
|
4
23
|
|
5
24
|
### Improvements
|
@@ -209,7 +209,10 @@ module GroongaQueryLog
|
|
209
209
|
end
|
210
210
|
|
211
211
|
def check_query_log_statistic(path, statistic)
|
212
|
-
|
212
|
+
command = statistic.command
|
213
|
+
return if command.nil?
|
214
|
+
|
215
|
+
case command.command_name
|
213
216
|
when "load"
|
214
217
|
@flushed = false
|
215
218
|
@unflushed_statistics << statistic
|
@@ -220,10 +223,10 @@ module GroongaQueryLog
|
|
220
223
|
@flushed = false
|
221
224
|
@unflushed_statistics << statistic
|
222
225
|
when "io_flush"
|
223
|
-
check_io_flush(
|
226
|
+
check_io_flush(command)
|
224
227
|
when "database_unmap"
|
225
228
|
@unflushed_statistics.reject! do |statistic|
|
226
|
-
|
229
|
+
command.name == "load"
|
227
230
|
end
|
228
231
|
when "table_list", "column_list"
|
229
232
|
# ignore
|
@@ -28,7 +28,8 @@ require "groonga-query-log/version"
|
|
28
28
|
module GroongaQueryLog
|
29
29
|
module Command
|
30
30
|
class FormatRegressionTestLogs
|
31
|
-
def initialize
|
31
|
+
def initialize(options={})
|
32
|
+
@output = options[:output] || $stdout
|
32
33
|
end
|
33
34
|
|
34
35
|
def run(command_line)
|
@@ -68,8 +69,8 @@ module GroongaQueryLog
|
|
68
69
|
|
69
70
|
input.each_line do |line|
|
70
71
|
unless line.valid_encoding?
|
71
|
-
puts("invalid encoding line")
|
72
|
-
puts("#{path}:#{input.lineno}:#{line}")
|
72
|
+
@output.puts("invalid encoding line")
|
73
|
+
@output.puts("#{path}:#{input.lineno}:#{line}")
|
73
74
|
next
|
74
75
|
end
|
75
76
|
case line
|
@@ -97,18 +98,18 @@ module GroongaQueryLog
|
|
97
98
|
begin
|
98
99
|
JSON.parse(response_old)
|
99
100
|
rescue JSON::ParserError
|
100
|
-
puts(command)
|
101
|
-
puts("failed to parse old response: #{$!.message}")
|
102
|
-
puts(response_old)
|
101
|
+
@output.puts(command)
|
102
|
+
@output.puts("failed to parse old response: #{$!.message}")
|
103
|
+
@output.puts(response_old)
|
103
104
|
valid = false
|
104
105
|
end
|
105
106
|
|
106
107
|
begin
|
107
108
|
JSON.parse(response_new)
|
108
109
|
rescue JSON::ParserError
|
109
|
-
puts(command)
|
110
|
-
puts("failed to parse new response: #{$!.message}")
|
111
|
-
puts(response_new)
|
110
|
+
@output.puts(command)
|
111
|
+
@output.puts("failed to parse new response: #{$!.message}")
|
112
|
+
@output.puts(response_new)
|
112
113
|
valid = false
|
113
114
|
end
|
114
115
|
|
@@ -125,33 +126,39 @@ module GroongaQueryLog
|
|
125
126
|
PP.pp(JSON.parse(response_new), response_new_file)
|
126
127
|
response_new_file.flush
|
127
128
|
report_command(command)
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
129
|
+
Tempfile.open("response-diff") do |response_diff_file|
|
130
|
+
system("diff",
|
131
|
+
"--label=old",
|
132
|
+
"--label=new",
|
133
|
+
"-u",
|
134
|
+
response_old_file.path,
|
135
|
+
response_new_file.path,
|
136
|
+
out: response_diff_file)
|
137
|
+
response_diff_file.rewind
|
138
|
+
@output.puts(response_diff_file.read)
|
139
|
+
end
|
133
140
|
end
|
134
141
|
end
|
135
142
|
end
|
136
143
|
|
137
144
|
def report_error(command, message, backtrace)
|
138
145
|
report_command(command)
|
139
|
-
puts("Error: #{message}")
|
140
|
-
puts("Backtrace:")
|
141
|
-
puts(backtrace)
|
146
|
+
@output.puts("Error: #{message}")
|
147
|
+
@output.puts("Backtrace:")
|
148
|
+
@output.puts(backtrace)
|
142
149
|
end
|
143
150
|
|
144
151
|
def report_command(command)
|
145
|
-
puts("Command:")
|
146
|
-
puts(command)
|
152
|
+
@output.puts("Command:")
|
153
|
+
@output.puts(command)
|
147
154
|
parsed_command = Groonga::Command::Parser.parse(command)
|
148
|
-
puts("Name: #{parsed_command.name}")
|
149
|
-
puts("Arguments:")
|
155
|
+
@output.puts("Name: #{parsed_command.name}")
|
156
|
+
@output.puts("Arguments:")
|
150
157
|
sorted_arguments = parsed_command.arguments.sort_by do |key, value|
|
151
158
|
key
|
152
159
|
end
|
153
160
|
sorted_arguments.each do |key, value|
|
154
|
-
puts(" #{key}: #{value}")
|
161
|
+
@output.puts(" #{key}: #{value}")
|
155
162
|
end
|
156
163
|
end
|
157
164
|
end
|
@@ -50,6 +50,7 @@ module GroongaQueryLog
|
|
50
50
|
@vector_accessors = []
|
51
51
|
@rewrite_nullable_reference_number = false
|
52
52
|
@nullable_reference_number_accessors = []
|
53
|
+
@rewrite_not_or_regular_expression = false
|
53
54
|
|
54
55
|
@care_order = true
|
55
56
|
@ignored_drilldown_keys = []
|
@@ -187,6 +188,14 @@ module GroongaQueryLog
|
|
187
188
|
"specifying this option multiple times") do |accessor|
|
188
189
|
@nullable_reference_number_accessors << accessor
|
189
190
|
end
|
191
|
+
parser.on("--[no-]rewrite-not-or-regular-expression",
|
192
|
+
"Rewrite 'column1 @ \"keyword1\" && column2 @~ " +
|
193
|
+
"\"^(?!.*keyword2|keyword3|...).+$\"' " +
|
194
|
+
"with 'column1 @ \"keyword1\" &! column2 @ \"keyword2\" " +
|
195
|
+
"&! column2 @ \"keyword3\" &! ...'",
|
196
|
+
"(#{@rewrite_not_or_regular_expression})") do |boolean|
|
197
|
+
@rewrite_not_or_regular_expression = boolean
|
198
|
+
end
|
190
199
|
|
191
200
|
parser.separator("")
|
192
201
|
parser.separator("Comparisons:")
|
@@ -252,6 +261,8 @@ module GroongaQueryLog
|
|
252
261
|
@rewrite_nullable_reference_number,
|
253
262
|
:nullable_reference_number_accessors =>
|
254
263
|
@nullable_reference_number_accessors,
|
264
|
+
:rewrite_not_or_regular_expression =>
|
265
|
+
@rewrite_not_or_regular_expression,
|
255
266
|
:target_command_names => @target_command_names,
|
256
267
|
:read_timeout => @read_timeout,
|
257
268
|
}
|
@@ -547,6 +558,9 @@ module GroongaQueryLog
|
|
547
558
|
command_line << "--nullable-reference-number-accessor"
|
548
559
|
command_line << accessor
|
549
560
|
end
|
561
|
+
if @options[:rewrite_not_or_regular_expression]
|
562
|
+
command_line << "--rewrite-not-or-regular-expression"
|
563
|
+
end
|
550
564
|
if @options[:target_command_names]
|
551
565
|
command_line << "--target-command-names"
|
552
566
|
command_line << @options[:target_command_names].join(",")
|
@@ -230,6 +230,15 @@ module GroongaQueryLog
|
|
230
230
|
@options.rewrite_nullable_reference_number = boolean
|
231
231
|
end
|
232
232
|
|
233
|
+
parser.on("--[no-]rewrite-not-or-regular-expression",
|
234
|
+
"Rewrite 'column1 @ \"keyword1\" && column2 @~ " +
|
235
|
+
"\"^(?!.*keyword2|keyword3|...).+$\"' " +
|
236
|
+
"with 'column1 @ \"keyword1\" &! column2 @ \"keyword2\" " +
|
237
|
+
"&! column2 @ \"keyword3\" &! ...'",
|
238
|
+
"(#{@options.rewrite_not_or_regular_expression?})") do |boolean|
|
239
|
+
@options.rewrite_not_or_regular_expression = boolean
|
240
|
+
end
|
241
|
+
|
233
242
|
parser.on("--nullable-reference-number-accessor=ACCESSOR",
|
234
243
|
"Mark ACCESSOR as rewrite nullable reference number targets",
|
235
244
|
"You can specify multiple accessors by",
|
@@ -35,6 +35,9 @@ module GroongaQueryLog
|
|
35
35
|
if @options[:rewrite_nullable_reference_number]
|
36
36
|
rewritten = rewrite_nullable_reference_number(rewritten)
|
37
37
|
end
|
38
|
+
if @options[:rewrite_not_or_regular_expression]
|
39
|
+
rewritten = rewrite_not_or_regular_expression(rewritten)
|
40
|
+
end
|
38
41
|
rewritten
|
39
42
|
end
|
40
43
|
|
@@ -77,5 +80,25 @@ module GroongaQueryLog
|
|
77
80
|
end
|
78
81
|
end
|
79
82
|
end
|
83
|
+
|
84
|
+
def rewrite_not_or_regular_expression(filter)
|
85
|
+
filter.gsub(/&& *(?<target_column>[a-zA-Z0-9_.]+) *@~ *"(?<pattern>.*?)"/) do |matched|
|
86
|
+
target_column = $LAST_MATCH_INFO[:target_column]
|
87
|
+
pattern = $LAST_MATCH_INFO[:pattern]
|
88
|
+
|
89
|
+
case pattern
|
90
|
+
when /\A(?<header>(?:\^|\\A)\(\?\!\.\*)
|
91
|
+
(?<body>.+)
|
92
|
+
(?<footer>\)\.[+*](?:\$|\\z))\z/x
|
93
|
+
body = $LAST_MATCH_INFO[:body]
|
94
|
+
conditions = body.split("|").collect do |word|
|
95
|
+
"&! #{target_column} @ \"#{word.strip}\""
|
96
|
+
end
|
97
|
+
conditions.join(" ")
|
98
|
+
else
|
99
|
+
matched
|
100
|
+
end
|
101
|
+
end
|
102
|
+
end
|
80
103
|
end
|
81
104
|
end
|
@@ -240,6 +240,7 @@ module GroongaQueryLog
|
|
240
240
|
attr_accessor :vector_accessors
|
241
241
|
attr_writer :rewrite_nullable_reference_number
|
242
242
|
attr_accessor :nullable_reference_number_accessors
|
243
|
+
attr_writer :rewrite_not_or_regular_expression
|
243
244
|
def initialize
|
244
245
|
@groonga1 = GroongaOptions.new
|
245
246
|
@groonga2 = GroongaOptions.new
|
@@ -268,6 +269,7 @@ module GroongaQueryLog
|
|
268
269
|
@vector_accessors = []
|
269
270
|
@rewrite_nullable_reference_number = false
|
270
271
|
@nullable_reference_number_accessors = []
|
272
|
+
@rewrite_not_or_regular_expression = false
|
271
273
|
end
|
272
274
|
|
273
275
|
def request_queue_size
|
@@ -298,6 +300,10 @@ module GroongaQueryLog
|
|
298
300
|
@rewrite_nullable_reference_number
|
299
301
|
end
|
300
302
|
|
303
|
+
def rewrite_not_or_regular_expression?
|
304
|
+
@rewrite_not_or_regular_expression
|
305
|
+
end
|
306
|
+
|
301
307
|
def target_command_name?(name)
|
302
308
|
return false if name.nil?
|
303
309
|
|
@@ -326,7 +332,8 @@ module GroongaQueryLog
|
|
326
332
|
def need_filter_rewrite?
|
327
333
|
rewrite_vector_equal? or
|
328
334
|
rewrite_vector_not_equal_empty_string? or
|
329
|
-
rewrite_nullable_reference_number?
|
335
|
+
rewrite_nullable_reference_number? or
|
336
|
+
rewrite_not_or_regular_expression
|
330
337
|
end
|
331
338
|
|
332
339
|
def to_filter_rewriter_options
|
@@ -339,6 +346,8 @@ module GroongaQueryLog
|
|
339
346
|
rewrite_nullable_reference_number?,
|
340
347
|
:nullable_reference_number_accessors =>
|
341
348
|
nullable_reference_number_accessors,
|
349
|
+
:rewrite_not_or_regular_expression =>
|
350
|
+
rewrite_not_or_regular_expression?,
|
342
351
|
}
|
343
352
|
end
|
344
353
|
end
|
@@ -121,14 +121,17 @@ module GroongaQueryLog
|
|
121
121
|
"return_code" => return_code,
|
122
122
|
"slow" => slow?,
|
123
123
|
}
|
124
|
-
|
125
|
-
|
124
|
+
if command
|
125
|
+
data["command"] = {
|
126
|
+
"raw" => raw_command,
|
127
|
+
"name" => command.name,
|
128
|
+
"parameters" => command_arguments,
|
129
|
+
}
|
130
|
+
else
|
131
|
+
data["command"] = {
|
132
|
+
"raw" => raw_command
|
133
|
+
}
|
126
134
|
end
|
127
|
-
data["command"] = {
|
128
|
-
"raw" => raw_command,
|
129
|
-
"name" => command.name,
|
130
|
-
"parameters" => arguments,
|
131
|
-
}
|
132
135
|
operations = []
|
133
136
|
each_operation do |operation|
|
134
137
|
operation_data = {}
|
@@ -192,5 +195,11 @@ module GroongaQueryLog
|
|
192
195
|
def slow_operation?(elapsed)
|
193
196
|
elapsed >= @slow_operation_threshold
|
194
197
|
end
|
198
|
+
|
199
|
+
def command_arguments
|
200
|
+
command.arguments.collect do |key, value|
|
201
|
+
{"key" => key, "value" => value}
|
202
|
+
end
|
203
|
+
end
|
195
204
|
end
|
196
205
|
end
|
@@ -1,3 +1,4 @@
|
|
1
|
+
# coding: utf-8
|
1
2
|
# Copyright (C) 2014-2018 Kouhei Sutou <kou@clear-code.com>
|
2
3
|
#
|
3
4
|
# This library is free software; you can redistribute it and/or
|
@@ -29,13 +30,13 @@ class FormatRegressionTestLogsCommandTest < Test::Unit::TestCase
|
|
29
30
|
success = false
|
30
31
|
begin
|
31
32
|
$stdout.reopen(output)
|
32
|
-
|
33
|
+
success = @command.run(command_line)
|
33
34
|
ensure
|
34
35
|
$stdout.reopen(stdout)
|
35
36
|
end
|
36
37
|
output.close
|
37
38
|
output.open
|
38
|
-
[
|
39
|
+
[success, output.read]
|
39
40
|
end
|
40
41
|
|
41
42
|
def fixture_path(*components)
|
@@ -59,10 +60,10 @@ Arguments:
|
|
59
60
|
+++ new
|
60
61
|
@@ -1,4 +1,4 @@
|
61
62
|
[[[2],
|
62
|
-
[[
|
63
|
-
[1,
|
64
|
-
- [2,
|
65
|
-
+ [3,
|
63
|
+
[["_id", "UInt32"], ["message", "Text"]],
|
64
|
+
[1, "log message1"],
|
65
|
+
- [2, "log message2"]]]
|
66
|
+
+ [3, "log message3"]]]
|
66
67
|
OUTPUT
|
67
68
|
assert_equal([true, output],
|
68
69
|
run_command([fixture_path("command-format.log")]))
|
@@ -81,10 +82,10 @@ Arguments:
|
|
81
82
|
+++ new
|
82
83
|
@@ -1,4 +1,4 @@
|
83
84
|
[[[2],
|
84
|
-
[[
|
85
|
-
[1,
|
86
|
-
- [2,
|
87
|
-
+ [3,
|
85
|
+
[["_id", "UInt32"], ["message", "Text"]],
|
86
|
+
[1, "log message1: 焼肉"],
|
87
|
+
- [2, "log message2: 焼肉"]]]
|
88
|
+
+ [3, "log message3: 焼肉"]]]
|
88
89
|
OUTPUT
|
89
90
|
assert_equal([true, output],
|
90
91
|
run_command([fixture_path("url-format.log")]))
|
@@ -108,4 +109,32 @@ Backtrace:
|
|
108
109
|
assert_equal([true, output],
|
109
110
|
run_command([fixture_path("error.log")]))
|
110
111
|
end
|
112
|
+
|
113
|
+
sub_test_case(".new") do
|
114
|
+
def setup
|
115
|
+
end
|
116
|
+
|
117
|
+
def test_output
|
118
|
+
output = StringIO.new
|
119
|
+
options = {:output => output}
|
120
|
+
command = GroongaQueryLog::Command::FormatRegressionTestLogs.new(options)
|
121
|
+
command.run([fixture_path("command-format.log")])
|
122
|
+
expected = <<-OUTPUT
|
123
|
+
Command:
|
124
|
+
select Logs
|
125
|
+
Name: select
|
126
|
+
Arguments:
|
127
|
+
table: Logs
|
128
|
+
--- old
|
129
|
+
+++ new
|
130
|
+
@@ -1,4 +1,4 @@
|
131
|
+
[[[2],
|
132
|
+
[["_id", "UInt32"], ["message", "Text"]],
|
133
|
+
[1, "log message1"],
|
134
|
+
- [2, "log message2"]]]
|
135
|
+
+ [3, "log message3"]]]
|
136
|
+
OUTPUT
|
137
|
+
assert_equal(expected, output.string)
|
138
|
+
end
|
139
|
+
end
|
111
140
|
end
|
@@ -110,4 +110,31 @@ class FilterRewriterTest < Test::Unit::TestCase
|
|
110
110
|
["ref_column.number"]))
|
111
111
|
end
|
112
112
|
end
|
113
|
+
|
114
|
+
class RegularExpressionTest < self
|
115
|
+
def rewrite(filter, enabled = true)
|
116
|
+
super(filter,
|
117
|
+
:rewrite_not_or_regular_expression => enabled)
|
118
|
+
end
|
119
|
+
|
120
|
+
def test_rewrite_one
|
121
|
+
assert_equal("column1 @ \"value1\" &! column2 @ \"value2\"",
|
122
|
+
rewrite("column1 @ \"value1\" && column2 @~ \"^(?!.*value2).+$\""))
|
123
|
+
end
|
124
|
+
|
125
|
+
def test_reference
|
126
|
+
assert_equal("column1 @ \"value1\" &! reference.column2 @ \"value2\"",
|
127
|
+
rewrite("column1 @ \"value1\" && reference.column2 @~ \"^(?!.*value2).+$\""))
|
128
|
+
end
|
129
|
+
|
130
|
+
def test_under_score
|
131
|
+
assert_equal("column1 @ \"value1\" &! column_2 @ \"value_2\"",
|
132
|
+
rewrite("column1 @ \"value1\" && column_2 @~ \"^(?!.*value_2).+$\""))
|
133
|
+
end
|
134
|
+
|
135
|
+
def test_rewrite_multiple
|
136
|
+
assert_equal("column1 @ \"value1\" &! column2 @ \"value2\" &! column2 @ \"value3\" &! column2 @ \"value4\"",
|
137
|
+
rewrite("column1 @ \"value1\" && column2 @~ \"^(?!.*value2 | value3 | value4).+$\""))
|
138
|
+
end
|
139
|
+
end
|
113
140
|
end
|
data/test/test-parser.rb
CHANGED
@@ -43,6 +43,17 @@ class ParserTest < Test::Unit::TestCase
|
|
43
43
|
assert_equal([nil], statistics.collect(&:command))
|
44
44
|
end
|
45
45
|
|
46
|
+
def test_no_command_to_hash
|
47
|
+
statistics = parse(<<-LOG)
|
48
|
+
2012-12-13 11:15:20.628105|0x7fff148c8a50|>/
|
49
|
+
2012-12-13 11:15:21.645119|0x7fff148c8a50|<000000017041150 rc=0
|
50
|
+
LOG
|
51
|
+
expected = {
|
52
|
+
"raw" => "/"
|
53
|
+
}
|
54
|
+
assert_equal(expected, statistics[0].to_hash["command"])
|
55
|
+
end
|
56
|
+
|
46
57
|
private
|
47
58
|
def parse(log)
|
48
59
|
statistics = []
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: groonga-query-log
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Kouhei Sutou
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2019-03-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: groonga-command-parser
|
@@ -154,17 +154,17 @@ description: ''
|
|
154
154
|
email:
|
155
155
|
- kou@clear-code.com
|
156
156
|
executables:
|
157
|
-
- groonga-query-log-
|
157
|
+
- groonga-query-log-format-regression-test-logs
|
158
158
|
- groonga-query-log-run-regression-test
|
159
|
-
- groonga-query-log-analyze-load
|
160
159
|
- groonga-query-log-check-crash
|
161
|
-
- groonga-query-log-
|
162
|
-
- groonga-query-log-verify-server
|
160
|
+
- groonga-query-log-replay
|
163
161
|
- groonga-query-log-check-command-version-compatibility
|
164
|
-
- groonga-query-log-
|
165
|
-
- groonga-query-log-format-regression-test-logs
|
162
|
+
- groonga-query-log-verify-server
|
166
163
|
- groonga-query-log-show-running-queries
|
167
|
-
- groonga-query-log-
|
164
|
+
- groonga-query-log-analyze
|
165
|
+
- groonga-query-log-extract
|
166
|
+
- groonga-query-log-detect-memory-leak
|
167
|
+
- groonga-query-log-analyze-load
|
168
168
|
extensions: []
|
169
169
|
extra_rdoc_files: []
|
170
170
|
files:
|
@@ -280,8 +280,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
280
280
|
- !ruby/object:Gem::Version
|
281
281
|
version: '0'
|
282
282
|
requirements: []
|
283
|
-
|
284
|
-
rubygems_version: 2.5.2.1
|
283
|
+
rubygems_version: 3.0.2
|
285
284
|
signing_key:
|
286
285
|
specification_version: 4
|
287
286
|
summary: Groonga-query-log is a collection of library and tools to process [Groonga](http://groonga.org/)'s
|
@@ -289,35 +288,35 @@ summary: Groonga-query-log is a collection of library and tools to process [Groo
|
|
289
288
|
as a library. You can analyze your Groonga's queries and test with your Groonga's
|
290
289
|
query log by using groonga-query-log as a tool.
|
291
290
|
test_files:
|
292
|
-
- test/
|
293
|
-
- test/
|
294
|
-
- test/test-replayer.rb
|
295
|
-
- test/test-parser.rb
|
296
|
-
- test/helper.rb
|
297
|
-
- test/fixtures/query.log
|
298
|
-
- test/fixtures/n_entries.expected
|
299
|
-
- test/fixtures/other-query.log
|
300
|
-
- test/fixtures/no-report-summary.expected
|
291
|
+
- test/fixtures/reporter/console.expected
|
292
|
+
- test/fixtures/reporter/html.expected
|
301
293
|
- test/fixtures/reporter/json-stream.expected
|
302
294
|
- test/fixtures/reporter/json.expected
|
303
|
-
- test/fixtures/reporter/html.expected
|
304
|
-
- test/fixtures/reporter/console.expected
|
305
|
-
- test/fixtures/regression-test-logs/command-format.log
|
306
|
-
- test/fixtures/regression-test-logs/url-format.log
|
307
|
-
- test/fixtures/regression-test-logs/error.log
|
308
|
-
- test/fixtures/target-commands.expected
|
309
|
-
- test/fixtures/multi.expected
|
310
|
-
- test/fixtures/run-regression-test/query-logs/query.log
|
311
|
-
- test/fixtures/run-regression-test/schema/schema.grn
|
312
|
-
- test/fixtures/run-regression-test/indexes/indexes.grn
|
313
|
-
- test/fixtures/run-regression-test/data/data.grn
|
314
|
-
- test/fixtures/order/-elapsed.expected
|
315
295
|
- test/fixtures/order/start-time.expected
|
316
296
|
- test/fixtures/order/-start-time.expected
|
297
|
+
- test/fixtures/order/-elapsed.expected
|
317
298
|
- test/fixtures/order/elapsed.expected
|
299
|
+
- test/fixtures/no-report-summary.expected
|
300
|
+
- test/fixtures/target-commands.expected
|
301
|
+
- test/fixtures/run-regression-test/data/data.grn
|
302
|
+
- test/fixtures/run-regression-test/query-logs/query.log
|
303
|
+
- test/fixtures/run-regression-test/indexes/indexes.grn
|
304
|
+
- test/fixtures/run-regression-test/schema/schema.grn
|
305
|
+
- test/fixtures/other-query.log
|
306
|
+
- test/fixtures/query.log
|
318
307
|
- test/fixtures/target-tables.expected
|
319
|
-
- test/
|
308
|
+
- test/fixtures/n_entries.expected
|
309
|
+
- test/fixtures/multi.expected
|
310
|
+
- test/fixtures/regression-test-logs/command-format.log
|
311
|
+
- test/fixtures/regression-test-logs/url-format.log
|
312
|
+
- test/fixtures/regression-test-logs/error.log
|
320
313
|
- test/command/test-format-regression-test-logs.rb
|
321
|
-
- test/command/test-extract.rb
|
322
314
|
- test/command/test-analyzer.rb
|
315
|
+
- test/command/test-extract.rb
|
316
|
+
- test/test-response-comparer.rb
|
317
|
+
- test/test-replayer.rb
|
323
318
|
- test/test-incompatibility-detector.rb
|
319
|
+
- test/test-filter-rewriter.rb
|
320
|
+
- test/test-parser.rb
|
321
|
+
- test/helper.rb
|
322
|
+
- test/run-test.rb
|