1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79
|
require "csv"
module RspecProfiling
module Collectors
class CSV
HEADERS = %w{
branch
commit_hash
seed
date
file
line_number
owner_tag
description
status
exception
time
query_count
query_time
request_count
request_time
start_memory
end_memory
}
def self.install
# no op
end
def self.uninstall
# no op
end
def self.reset
# no op
end
def initialize(config=RspecProfiling.config)
config.csv_path ||= 'tmp/spec_benchmarks.csv'
@config = config
end
def insert(attributes)
output << static_cells(attributes) + event_cells(attributes)
end
private
attr_reader :config
def output
@output ||= ::CSV.open(path, "w").tap { |csv| csv << HEADERS + event_headers }
end
def path
config.csv_path.call
end
def static_cells(attributes)
HEADERS.map do |field|
attributes.fetch(field.to_sym)
end
end
def event_headers
config.events.flat_map do |event|
["#{event}_count", "#{event}_time", "#{event}_events"]
end
end
def event_cells(attributes)
config.events.flat_map do |event|
[attributes[:event_counts][event], attributes[:event_times][event], attributes[:event_events][event].to_json]
end
end
end
end
end
|