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