groonga-query-log 1.5.1 → 1.5.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: e343f6fe86cf4117900b88baee314e9b4ef2570c15e0257f257d4315fbaecb84
4
- data.tar.gz: 4ef1a78600e75017755da500403667143c80e253cc6f5703856c03fd5d82ec2c
3
+ metadata.gz: 7c4745d088436d712bbc9d1b010c0219008baac00d05f5c5ebb59423912353ab
4
+ data.tar.gz: 3d663956a09c081278a1f6a06534dfcd08e7a46c5ee270d06469be274817f8d7
5
5
  SHA512:
6
- metadata.gz: 561a1599048cab3d12ebc6808ae2c2296ee94cc8612dc10b9aee67d4ddef17a2125bfa15f00b8ab379aa5d675bca4c71d375fde189e6ce003ba779bc4d0e027d
7
- data.tar.gz: 5cc75c283ee307b4951646808a14db37b69e85f73178d4d9e0e425e505a24fc5fe1fdebb5b2f9e5666b7f5c25fd5f973d73341478dad0c1685406f89ca54a753
6
+ metadata.gz: 705cfcf529854898bd27884a714ac123776f8e560e088ebacc5860049061de29c3454bcfafd45ab3655d812492659ced950d9fa66727d831fb4d7b3961cf779c
7
+ data.tar.gz: eccf8a59cb0f6faba614bf9e4beae35228c4b3634a04e3d2a1af0fa50d7da60750e53a6ef891a3295c301bb47301c38685ece802b001b5a2e12ef4df1c384916
@@ -1,5 +1,16 @@
1
1
  # News
2
2
 
3
+
4
+ ## 1.5.2: 2019-09-26
5
+
6
+ ### Improvements
7
+
8
+ * `check-performance-regression`:
9
+
10
+ * Added support that the case which different operations exist.
11
+
12
+ * Added support for multiple operation sets.
13
+
3
14
  ## 1.5.1: 2019-09-13
4
15
 
5
16
  ### Improvements
@@ -1,5 +1,6 @@
1
1
  # Copyright (C) 2019 Kentaro Hayashi <hayashi@clear-code.com>
2
2
  # Copyright (C) 2019 Sutou Kouhei <kou@clear-code.com>
3
+ # Copyright (C) 2019 Horimoto Yasuhiro <horimoto@clear-code.com>
3
4
  #
4
5
  # This library is free software; you can redistribute it and/or
5
6
  # modify it under the terms of the GNU Lesser General Public
@@ -278,6 +279,15 @@ module GroongaQueryLog
278
279
  end
279
280
  end
280
281
 
282
+ class OperationSet
283
+ attr_reader :names
284
+ attr_reader :statistics
285
+ def initialize(names, statistics)
286
+ @names = names
287
+ @statistics = statistics
288
+ end
289
+ end
290
+
281
291
  class QueryStatistic < Statistic
282
292
  attr_reader :query
283
293
  def initialize(query, old, new, threshold)
@@ -289,22 +299,44 @@ module GroongaQueryLog
289
299
  @threshold.slow_query?(diff_elapsed_time, ratio)
290
300
  end
291
301
 
292
- def each_operation_statistic
293
- @old.first.operations.each_with_index do |operation, i|
294
- old_operations = @old.collect do |statistic|
295
- statistic.operations[i]
302
+ def operation_sets
303
+ old_operation_name_sets = @old.group_by do |statistic|
304
+ statistic.operations.collect do |operation|
305
+ operation[:name]
306
+ end
307
+ end
308
+ new_operation_name_sets = @new.group_by do |statistic|
309
+ statistic.operations.collect do |operation|
310
+ operation[:name]
296
311
  end
297
- # TODO: old and new may use different index
298
- new_operations = @new.collect do |statistic|
299
- statistic.operations[i]
312
+ end
313
+
314
+ operation_sets = []
315
+ operation_name_sets =
316
+ (old_operation_name_sets.keys & new_operation_name_sets.keys)
317
+ operation_name_sets.each do |operation_names|
318
+ old = old_operation_name_sets[operation_names]
319
+ next if old.nil?
320
+ new = new_operation_name_sets[operation_names]
321
+ next if new.nil?
322
+ statistics = operation_names.size.times.collect do |i|
323
+ old_operations = old.collect do |statistic|
324
+ statistic.operations[i]
325
+ end
326
+ new_operations = new.collect do |statistic|
327
+ statistic.operations[i]
328
+ end
329
+ operation = old_operations[0]
330
+ OperationStatistic.new(operation,
331
+ i,
332
+ old_operations,
333
+ new_operations,
334
+ @threshold)
300
335
  end
301
- operation_statistic = OperationStatistic.new(operation,
302
- i,
303
- old_operations,
304
- new_operations,
305
- @threshold)
306
- yield(operation_statistic)
336
+ operation_set = OperationSet.new(operation_names, statistics)
337
+ operation_sets << operation_set
307
338
  end
339
+ operation_sets
308
340
  end
309
341
 
310
342
  private
@@ -355,25 +387,31 @@ Query: #{query_statistic.query}
355
387
  Mean (old): #{format_elapsed_time(query_statistic.old_elapsed_time)}
356
388
  Mean (new): #{format_elapsed_time(query_statistic.new_elapsed_time)}
357
389
  Diff: #{format_diff(query_statistic)}
358
- Operations:
359
390
  REPORT
360
- query_statistic.each_operation_statistic do |operation_statistic|
361
- n_target_operations += 1
362
- next unless operation_statistic.slow?
363
-
364
- n_slow_operations += 1
365
- index = operation_statistic.index
366
- name = operation_statistic.name
367
- context = operation_statistic.context
368
- label = [name, context].compact.join(" ")
369
- old_elapsed_time = operation_statistic.old_elapsed_time
370
- new_elapsed_time = operation_statistic.new_elapsed_time
391
+
392
+ operation_sets = query_statistic.operation_sets
393
+ operation_sets.each_with_index do |operation_set, nth_operation_set|
371
394
  @output.puts(<<-REPORT)
395
+ Operation set[#{nth_operation_set}]:
396
+ REPORT
397
+ operation_set.statistics.each do |operation_statistic|
398
+ n_target_operations += 1
399
+ next unless operation_statistic.slow?
400
+
401
+ n_slow_operations += 1
402
+ index = operation_statistic.index
403
+ name = operation_statistic.name
404
+ context = operation_statistic.context
405
+ label = [name, context].compact.join(" ")
406
+ old_elapsed_time = operation_statistic.old_elapsed_time
407
+ new_elapsed_time = operation_statistic.new_elapsed_time
408
+ @output.puts(<<-REPORT)
372
409
  Operation[#{index}]: #{label}
373
410
  Mean (old): #{format_elapsed_time(old_elapsed_time)}
374
411
  Mean (new): #{format_elapsed_time(new_elapsed_time)}
375
412
  Diff: #{format_diff(operation_statistic)}
376
- REPORT
413
+ REPORT
414
+ end
377
415
  end
378
416
  end
379
417
 
@@ -15,5 +15,5 @@
15
15
  # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
16
16
 
17
17
  module GroongaQueryLog
18
- VERSION = "1.5.1"
18
+ VERSION = "1.5.2"
19
19
  end
@@ -1,4 +1,5 @@
1
1
  # Copyright (C) 2019 Kentaro Hayashi <hayashi@clear-code.com>
2
+ # Copyright (C) 2019 Horimoto Yasuhiro <horimoto@clear-code.com>
2
3
  #
3
4
  # This library is free software; you can redistribute it and/or
4
5
  # modify it under the terms of the GNU Lesser General Public
@@ -118,7 +119,7 @@ Query: select --table Site --limit 0
118
119
  Mean (old): 12.0msec
119
120
  Mean (new): 14.0msec
120
121
  Diff: +2.0msec/+1.17
121
- Operations:
122
+ Operation set[0]:
122
123
  Operation[0]: select
123
124
  Mean (old): 5.0msec
124
125
  Mean (new): 6.0msec
@@ -146,7 +147,7 @@ Query: select --table Site --filter "_id >= 4 && _id <= 6"
146
147
  Mean (old): 70.0msec
147
148
  Mean (new): 90.0msec
148
149
  Diff: +20.0msec/+1.29
149
- Operations:
150
+ Operation set[0]:
150
151
  Operation[0]: filter #<accessor _id(Site)> greater_equal 4
151
152
  Mean (old): 40.0msec
152
153
  Mean (new): 80.0msec
@@ -186,7 +187,7 @@ Query: select --table Site --limit 0
186
187
  Mean (old): 12.0msec
187
188
  Mean (new): 14.0msec
188
189
  Diff: +2.0msec/+1.17
189
- Operations:
190
+ Operation set[0]:
190
191
  Operation[0]: select
191
192
  Mean (old): 5.0msec
192
193
  Mean (new): 6.0msec
@@ -233,7 +234,7 @@ Query: select --table Site --limit 0
233
234
  Mean (old): 12.0msec
234
235
  Mean (new): 14.0msec
235
236
  Diff: +2.0msec/+1.17
236
- Operations:
237
+ Operation set[0]:
237
238
  Summary:
238
239
  Slow queries: 1/1(100.00%)
239
240
  Slow operations: 0/2( 0.00%)
@@ -276,7 +277,7 @@ Query: select --table Site --limit 0
276
277
  Mean (old): 12.0msec
277
278
  Mean (new): 14.0msec
278
279
  Diff: +2.0msec/+1.17
279
- Operations:
280
+ Operation set[0]:
280
281
  Operation[0]: select
281
282
  Mean (old): 5.0msec
282
283
  Mean (new): 6.0msec
@@ -308,4 +309,25 @@ Summary:
308
309
  assert_equal(expected, actual)
309
310
  end
310
311
  end
312
+
313
+ def test_different_operations
314
+ actual = run_command("--slow-query-ratio=0.0",
315
+ "--slow-query-second=0.0",
316
+ "--slow-operation-ratio=0.0",
317
+ "--slow-operation-second=0.0",
318
+ fixture_path("different_operations1.log"),
319
+ fixture_path("different_operations2.log"))
320
+ expected = <<-OUTPUT
321
+ Query: select Memos --output_columns _key,tag --filter 'all_records() && (tag == \"groonga\" || tag == \"mroonga\" || tag == \"droonga\")' --sortby _id
322
+ Mean (old): 7.1msec
323
+ Mean (new): 82.8msec
324
+ Diff: +75.7msec/+11.64
325
+ Summary:
326
+ Slow queries: 1/1(100.00%)
327
+ Slow operations: 0/0( 0.00%)
328
+ Caches (old): 0/1( 0.00%)
329
+ Caches (new): 0/1( 0.00%)
330
+ OUTPUT
331
+ assert_equal(expected, actual)
332
+ end
311
333
  end
@@ -0,0 +1,9 @@
1
+ 2019-09-24 11:26:52.247684|0x7ffd3772d330|>select Memos --output_columns _key,tag --filter 'all_records() && (tag == "groonga" || tag == "mroonga" || tag == "droonga")' --sortby _id
2
+ 2019-09-24 11:26:52.254556|0x7ffd3772d330|:000000006876176 filter(2): Memos.tag equal #<record:pat:Tags id:1 key:"groonga">
3
+ 2019-09-24 11:26:52.254577|0x7ffd3772d330|:000000006896105 filter(3): Memos.tag equal #<record:pat:Tags id:2 key:"mroonga">
4
+ 2019-09-24 11:26:52.254589|0x7ffd3772d330|:000000006907737 filter(4): Memos.tag equal #<record:pat:Tags id:4 key:"droonga">
5
+ 2019-09-24 11:26:52.254601|0x7ffd3772d330|:000000006919999 filter(4): all_records()
6
+ 2019-09-24 11:26:52.254608|0x7ffd3772d330|:000000006926366 select(4)
7
+ 2019-09-24 11:26:52.254649|0x7ffd3772d330|:000000006968407 sort(4): _id
8
+ 2019-09-24 11:26:52.254696|0x7ffd3772d330|:000000007015885 output(4)
9
+ 2019-09-24 11:26:52.254795|0x7ffd3772d330|<000000007115023 rc=0
@@ -0,0 +1,7 @@
1
+ 2019-09-24 11:28:16.384410|0x7ffcd86f6b40|>select Memos --output_columns _key,tag --filter 'all_records() && (tag == "groonga" || tag == "mroonga" || tag == "droonga")' --sortby _id
2
+ 2019-09-24 11:28:16.467000|0x7ffcd86f6b40|:000000082594372 filter(4): in_values(Memos.tag, #<record:pat:Tags id:1 key:"groonga">, #<record:pat:Tags id:2 key:"mroonga">, #<record:pat:Tags id:4 key:"droonga">)
3
+ 2019-09-24 11:28:16.467016|0x7ffcd86f6b40|:000000082610035 filter(4): all_records()
4
+ 2019-09-24 11:28:16.467038|0x7ffcd86f6b40|:000000082633089 select(4)
5
+ 2019-09-24 11:28:16.467067|0x7ffcd86f6b40|:000000082662096 sort(4): _id
6
+ 2019-09-24 11:28:16.467129|0x7ffcd86f6b40|:000000082723557 output(4)
7
+ 2019-09-24 11:28:16.467194|0x7ffcd86f6b40|<000000082788858 rc=0
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.5.1
4
+ version: 1.5.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kouhei Sutou
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-09-13 00:00:00.000000000 Z
11
+ date: 2019-09-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: diff-lcs
@@ -239,6 +239,8 @@ files:
239
239
  - test/command/test-format-regression-test-logs.rb
240
240
  - test/command/test-run-regression-test.rb
241
241
  - test/fixtures/check-performance-regression/cache.log
242
+ - test/fixtures/check-performance-regression/different_operations1.log
243
+ - test/fixtures/check-performance-regression/different_operations2.log
242
244
  - test/fixtures/check-performance-regression/nquery.log
243
245
  - test/fixtures/check-performance-regression/nquery2.log
244
246
  - test/fixtures/check-performance-regression/query1.log
@@ -305,9 +307,11 @@ test_files:
305
307
  - test/fixtures/n_entries.expected
306
308
  - test/fixtures/check-performance-regression/query1.log
307
309
  - test/fixtures/check-performance-regression/cache.log
310
+ - test/fixtures/check-performance-regression/different_operations2.log
308
311
  - test/fixtures/check-performance-regression/nquery2.log
309
312
  - test/fixtures/check-performance-regression/nquery.log
310
313
  - test/fixtures/check-performance-regression/query2.log
314
+ - test/fixtures/check-performance-regression/different_operations1.log
311
315
  - test/fixtures/target-tables.expected
312
316
  - test/fixtures/no-report-summary.expected
313
317
  - test/fixtures/order/-start-time.expected