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
|
module RspecProfiling
module Collectors
class JSON
KEYS = %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.output_file_path ||= 'tmp/spec_benchmarks.json'
@config = config
end
def insert(attributes)
output << merge_attributes_and_events(attributes) + "\n"
end
private
attr_reader :config
def output
@output ||= ::File.open(path, "w")
end
def path
config.output_file_path.call
end
def merge_attributes_and_events(attributes)
config.events.flat_map do |event|
attributes["#{event}_counts"] = attributes[:event_counts][event]
attributes["#{event}_times"] = attributes[:event_times][event]
attributes["#{event}_events"] = attributes[:event_events][event]
end
attributes.merge!(config.additional_data)
attributes.except(:event_counts, :event_times, :event_events, :events).to_json
end
end
end
end
|