debian-mirror-gitlab/config/initializers/rspec_profiling.rb

66 lines
1.8 KiB
Ruby
Raw Normal View History

2019-07-07 11:18:12 +05:30
# frozen_string_literal: true
return unless Rails.env.test?
2017-08-17 22:00:37 +05:30
module RspecProfilingExt
2019-07-07 11:18:12 +05:30
module Collectors
class CSVWithTimestamps < ::RspecProfiling::Collectors::CSV
TIMESTAMP_FIELDS = %w(created_at updated_at).freeze
HEADERS = (::RspecProfiling::Collectors::CSV::HEADERS + TIMESTAMP_FIELDS).freeze
def insert(attributes)
output << HEADERS.map do |field|
if TIMESTAMP_FIELDS.include?(field)
Time.now
else
attributes.fetch(field.to_sym)
end
end
end
private
def output
@output ||= ::CSV.open(path, "w").tap { |csv| csv << HEADERS }
end
2017-08-17 22:00:37 +05:30
end
end
module Git
def branch
if ENV['CI_COMMIT_REF_NAME']
"#{defined?(Gitlab::License) ? 'ee' : 'ce'}:#{ENV['CI_COMMIT_REF_NAME']}"
else
2019-07-07 11:18:12 +05:30
super&.chomp
2017-08-17 22:00:37 +05:30
end
end
2019-07-07 11:18:12 +05:30
def sha
super&.chomp
end
2017-08-17 22:00:37 +05:30
end
module Run
def example_finished(*args)
super
rescue => err
2018-03-17 18:26:18 +05:30
return if @already_logged_example_finished_error # rubocop:disable Gitlab/ModuleWithInstanceVariables
2017-08-17 22:00:37 +05:30
$stderr.puts "rspec_profiling couldn't collect an example: #{err}. Further warnings suppressed."
2018-03-17 18:26:18 +05:30
@already_logged_example_finished_error = true # rubocop:disable Gitlab/ModuleWithInstanceVariables
2017-08-17 22:00:37 +05:30
end
alias_method :example_passed, :example_finished
alias_method :example_failed, :example_finished
end
end
2019-07-07 11:18:12 +05:30
RspecProfiling.configure do |config|
if ENV.key?('CI') || ENV.key?('RSPEC_PROFILING')
RspecProfiling::VCS::Git.prepend(RspecProfilingExt::Git)
RspecProfiling::Run.prepend(RspecProfilingExt::Run)
config.collector = RspecProfilingExt::Collectors::CSVWithTimestamps
config.csv_path = -> { "rspec_profiling/#{Time.now.to_i}-#{SecureRandom.hex(8)}-rspec-data.csv" }
2017-08-17 22:00:37 +05:30
end
end