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

a report when the process exits or when the application is booted.
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