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