module TestProf::Vernier
def build_path(name)
def build_path(name) TestProf.artifact_path( "vernier-report-#{config.mode}-#{name}.json" ) end
def check_vernier_version
def check_vernier_version if Utils.verify_gem_version("vernier", at_least: "0.3.0") true else log :error, <<~MSG Please, upgrade 'vernier' to version >= 0.3.0. MSG false end end
def config
def config @config ||= Configuration.new end
def configure
def configure yield config end
def dump(collector, name)
def dump(collector, name) result = collector.stop path = build_path(name) File.write(path, ::Vernier::Output::Firefox.new(result).output) log :info, "Vernier report generated: #{path}" end
def init_vernier
def init_vernier return @initialized if instance_variable_defined?(:@initialized) @locked = false @initialized = TestProf.require( "vernier", <<~MSG Please, install 'vernier' first: # Gemfile gem 'vernier', '>= 0.3.0', require: false MSG ) { check_vernier_version } end
def locked?
def locked? @locked == true end
def profile(name = nil)
def profile(name = nil) if locked? log :warn, <<~MSG Vernier has been already activated. Make sure you do not have the TEST_VERNIER environmental variable set somewhere. MSG return false end return false unless init_vernier options = {} options[:interval] = config.interval if config.interval options[:hooks] = config.hooks if config.hooks if block_given? options[:mode] = config.mode options[:out] = build_path(name) ::Vernier.trace(**options) { yield } else collector = ::Vernier::Collector.new(config.mode, **options) collector.start collector end end
def run
Run Vernier and automatically dump
def run collector = profile return unless collector @locked = true @default_collector = collector log :info, "Vernier enabled globally: " \ "mode – #{config.mode}, target – #{config.target}" at_exit { dump(collector, "total") } if config.suite? end