class AreWeThereYet::Profiler

Public Class Methods

new(db_connection_string) click to toggle source
# File lib/are_we_there_yet/profiler.rb, line 3
def initialize(db_connection_string)
  @db = AreWeThereYet::Persistence::Connection.create(db_connection_string)
end

Public Instance Methods

list_examples(file_path) click to toggle source
# File lib/are_we_there_yet/profiler.rb, line 13
def list_examples(file_path)
  if metrics_by_file[file_path]
    metrics_by_example = metrics_by_file[file_path].group_by { |m| m.description }

    averages_by_example = get_average_per_key(metrics_by_example)

    sorted_output(transform_averages_for_sorting(averages_by_example, :example))
  else
    []
  end
end
list_files() click to toggle source
# File lib/are_we_there_yet/profiler.rb, line 7
def list_files
  averages_by_file = get_average_per_key(metrics_by_file)

  sorted_output(transform_averages_for_sorting(averages_by_file, :file))
end

Private Instance Methods

find_average_time_for(runs) click to toggle source
# File lib/are_we_there_yet/profiler.rb, line 31
def find_average_time_for(runs)
  total_per_run = runs.inject([]) do |memo, (run,metrics)|
    memo << metrics.inject(0.0) { |total,m| total + m.execution_time }
  end

  (total_per_run.inject(:+))/total_per_run.size
end
get_average_per_key(metric_set) click to toggle source
# File lib/are_we_there_yet/profiler.rb, line 43
def get_average_per_key(metric_set)
  # Merging a hash with itself is really just a sneaky way to do a map
  metrics_by_key_per_run = metric_set.merge(metric_set) do |key,metrics,metrics|
    metrics.group_by { |m| m.run_id }
  end

  averages_by_key = metrics_by_key_per_run.merge(metrics_by_key_per_run) do |key, runs, runs|
    find_average_time_for runs
  end
end
metrics_by_file() click to toggle source
# File lib/are_we_there_yet/profiler.rb, line 39
def metrics_by_file
  @metrics_by_file || Metric.all(@db).group_by { |m| m.path }
end
sorted_output(data_to_sort) click to toggle source
# File lib/are_we_there_yet/profiler.rb, line 27
def sorted_output(data_to_sort)
  data_to_sort.sort { |x,y| y[:average_execution_time] <=> x[:average_execution_time] }
end
transform_averages_for_sorting(averages_by_key, key_name) click to toggle source
# File lib/are_we_there_yet/profiler.rb, line 54
def transform_averages_for_sorting(averages_by_key, key_name)
  averages_by_key.map do |key, average_execution_time|
    { key_name.to_sym => key, :average_execution_time => average_execution_time }
  end
end