module Buildkite::TestCollector

def self.annotate(content)

def self.annotate(content)
  tracer = Buildkite::TestCollector::Uploader.tracer
  tracer&.enter("annotation", **{ content: content })
  tracer&.leave
end

def self.configure(hook:, token: nil, url: nil, tracing_enabled: true, artifact_path: nil, env: {}, tags: {})

def self.configure(hook:, token: nil, url: nil, tracing_enabled: true, artifact_path: nil, env: {}, tags: {})
  self.api_token = (token || ENV["BUILDKITE_ANALYTICS_TOKEN"])&.strip
  self.url = url || DEFAULT_URL
  self.tracing_enabled = tracing_enabled
  self.artifact_path = artifact_path
  self.env = env
  self.tags = tags
  self.batch_size = ENV.fetch("BUILDKITE_ANALYTICS_UPLOAD_BATCH_SIZE") { DEFAULT_UPLOAD_BATCH_SIZE }.to_i
  trace_min_ms_string = ENV["BUILDKITE_ANALYTICS_TRACE_MIN_MS"]
  self.trace_min_duration = if trace_min_ms_string && !trace_min_ms_string.empty?
    Float(trace_min_ms_string) / 1000
  end
  self.span_filters = []
  unless self.trace_min_duration.nil?
    self.span_filters << MinDurationSpanFilter.new(self.trace_min_duration)
  end
  self.hook_into(hook)
end

def self.enable_tracing!

def self.enable_tracing!
  return unless self.tracing_enabled
  Buildkite::TestCollector::Network.configure
  Buildkite::TestCollector::Object.configure
  return unless defined?(ActiveSupport)
  require "active_support/notifications"
  ActiveSupport::Notifications.subscribe("sql.active_record") do |name, start, finish, id, payload|
    Buildkite::TestCollector::Uploader.tracer&.backfill(:sql, finish - start, **{ query: payload[:sql] })
  end
end

def self.hook_into(hook)

def self.hook_into(hook)
  file = "test_collector/library_hooks/#{hook}"
  require_relative file
rescue LoadError
  raise ArgumentError.new("#{hook.inspect} is not a supported Buildkite Analytics Test library hook.")
end