class GroongaQueryLog::PerformanceVerifier

Public Class Methods

new(command, old_responses, new_responses, options) click to toggle source
# File lib/groonga-query-log/performance-verifier.rb, line 29
def initialize(command, old_responses, new_responses, options)
  @command = command
  @old_responses = old_responses
  @new_responses = new_responses
  @options = options
  @threshold_diff = 0.1
  @threshold_ratio = 1.1
end

Public Instance Methods

diff_ratio() click to toggle source
# File lib/groonga-query-log/performance-verifier.rb, line 66
def diff_ratio
  compute_diff_ratio
end
new_elapsed_time() click to toggle source
# File lib/groonga-query-log/performance-verifier.rb, line 62
def new_elapsed_time
  choose_target_elapsed_time(@new_responses)
end
new_elapsed_times() click to toggle source
# File lib/groonga-query-log/performance-verifier.rb, line 58
def new_elapsed_times
  collect_elapsed_times(@new_responses)
end
old_elapsed_time() click to toggle source
# File lib/groonga-query-log/performance-verifier.rb, line 54
def old_elapsed_time
  choose_target_elapsed_time(@old_responses)
end
old_elapsed_times() click to toggle source
# File lib/groonga-query-log/performance-verifier.rb, line 50
def old_elapsed_times
  collect_elapsed_times(@old_responses)
end
slow?() click to toggle source
# File lib/groonga-query-log/performance-verifier.rb, line 38
def slow?
  if error?(@old_responses) or error?(@new_responses)
    return false
  end

  if (old_elapsed_time - new_elapsed_time).abs < @threshold_diff
    return false
  end

  diff_ratio > @threshold_ratio
end

Private Instance Methods

choose_target_elapsed_time(responses) click to toggle source
# File lib/groonga-query-log/performance-verifier.rb, line 83
def choose_target_elapsed_time(responses)
  sorted_elapsed_times = collect_elapsed_times(responses).sort

  strategy = @options.choose_strategy
  case strategy
  when :fastest
    sorted_elapsed_times.first
  when :median
    sorted_elapsed_times[sorted_elapsed_times.size / 2]
  else
    message =
      "choose strategy must be :fastest or :median: #{strategy.inspect}"
    raise ArgumentError, message
  end
end
collect_elapsed_times(responses) click to toggle source
# File lib/groonga-query-log/performance-verifier.rb, line 77
def collect_elapsed_times(responses)
  responses.collect do |response|
    response.elapsed_time
  end
end
compute_diff_ratio() click to toggle source
# File lib/groonga-query-log/performance-verifier.rb, line 99
def compute_diff_ratio
  if old_elapsed_time.zero?
    1.0
  else
    new_elapsed_time / old_elapsed_time
  end
end
error?(responses) click to toggle source
# File lib/groonga-query-log/performance-verifier.rb, line 71
def error?(responses)
  responses.any? do |response|
    response.is_a?(Groonga::Client::Response::Error)
  end
end