Module: Buildkite::TestCollector
- Defined in:
- lib/buildkite/test_collector.rb,
lib/buildkite/test_collector.rb,
lib/buildkite/test_collector/error.rb,
lib/buildkite/test_collector/trace.rb,
lib/buildkite/test_collector/object.rb,
lib/buildkite/test_collector/tracer.rb,
lib/buildkite/test_collector/network.rb,
lib/buildkite/test_collector/session.rb,
lib/buildkite/test_collector/version.rb,
lib/buildkite/test_collector/uploader.rb,
lib/buildkite/test_collector/http_client.rb
Defined Under Namespace
Modules: CucumberPlugin, MinitestPlugin, RSpecPlugin Classes: CI, Error, HTTPClient, MinDurationSpanFilter, Network, Object, Session, TimeoutError, Trace, Tracer, UUID, UnsupportedFrameworkError, Uploader
Constant Summary collapse
- DEFAULT_URL =
"https://analytics-api.buildkite.com/v1/uploads"- DEFAULT_UPLOAD_BATCH_SIZE =
500- VERSION =
"2.11.0"- NAME =
"buildkite-test_collector"
Class Attribute Summary collapse
-
.api_token ⇒ Object
Returns the value of attribute api_token.
-
.artifact_path ⇒ Object
Returns the value of attribute artifact_path.
-
.batch_size ⇒ Object
Returns the value of attribute batch_size.
-
.env ⇒ Object
Returns the value of attribute env.
-
.location_prefix ⇒ Object
Returns the value of attribute location_prefix.
-
.session ⇒ Object
Returns the value of attribute session.
-
.span_filters ⇒ Object
Returns the value of attribute span_filters.
-
.tags ⇒ Object
Returns the value of attribute tags.
-
.trace_min_duration ⇒ Object
Returns the value of attribute trace_min_duration.
-
.tracing_enabled ⇒ Object
Returns the value of attribute tracing_enabled.
-
.uploader ⇒ Object
Returns the value of attribute uploader.
-
.url ⇒ Object
Returns the value of attribute url.
Class Method Summary collapse
- .annotate(content) ⇒ Object
- .configure(hook:, token: nil, url: nil, tracing_enabled: true, artifact_path: nil, location_prefix: nil, env: {}, tags: {}) ⇒ Object
- .enable_tracing! ⇒ Object
- .hook_into(hook) ⇒ Object
-
.tag_execution(key, value) ⇒ Object
Set a key=value tag on the current test execution.
Class Attribute Details
.api_token ⇒ Object
Returns the value of attribute api_token.
33 34 35 |
# File 'lib/buildkite/test_collector.rb', line 33 def api_token @api_token end |
.artifact_path ⇒ Object
Returns the value of attribute artifact_path.
38 39 40 |
# File 'lib/buildkite/test_collector.rb', line 38 def artifact_path @artifact_path end |
.batch_size ⇒ Object
Returns the value of attribute batch_size.
42 43 44 |
# File 'lib/buildkite/test_collector.rb', line 42 def batch_size @batch_size end |
.env ⇒ Object
Returns the value of attribute env.
40 41 42 |
# File 'lib/buildkite/test_collector.rb', line 40 def env @env end |
.location_prefix ⇒ Object
Returns the value of attribute location_prefix.
39 40 41 |
# File 'lib/buildkite/test_collector.rb', line 39 def location_prefix @location_prefix end |
.session ⇒ Object
Returns the value of attribute session.
36 37 38 |
# File 'lib/buildkite/test_collector.rb', line 36 def session @session end |
.span_filters ⇒ Object
Returns the value of attribute span_filters.
44 45 46 |
# File 'lib/buildkite/test_collector.rb', line 44 def span_filters @span_filters end |
.tags ⇒ Object
Returns the value of attribute tags.
41 42 43 |
# File 'lib/buildkite/test_collector.rb', line 41 def end |
.trace_min_duration ⇒ Object
Returns the value of attribute trace_min_duration.
43 44 45 |
# File 'lib/buildkite/test_collector.rb', line 43 def trace_min_duration @trace_min_duration end |
.tracing_enabled ⇒ Object
Returns the value of attribute tracing_enabled.
37 38 39 |
# File 'lib/buildkite/test_collector.rb', line 37 def tracing_enabled @tracing_enabled end |
.uploader ⇒ Object
Returns the value of attribute uploader.
35 36 37 |
# File 'lib/buildkite/test_collector.rb', line 35 def uploader @uploader end |
.url ⇒ Object
Returns the value of attribute url.
34 35 36 |
# File 'lib/buildkite/test_collector.rb', line 34 def url @url end |
Class Method Details
.annotate(content) ⇒ Object
81 82 83 84 85 |
# File 'lib/buildkite/test_collector.rb', line 81 def self.annotate(content) tracer = Buildkite::TestCollector::Uploader.tracer tracer&.enter("annotation", **{ content: content }) tracer&.leave end |
.configure(hook:, token: nil, url: nil, tracing_enabled: true, artifact_path: nil, location_prefix: nil, env: {}, tags: {}) ⇒ Object
47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 |
# File 'lib/buildkite/test_collector.rb', line 47 def self.configure(hook:, token: nil, url: nil, tracing_enabled: true, artifact_path: nil, location_prefix: nil, env: {}, tags: {}) if hook.to_sym == :cucumber && Gem::Version.new(RUBY_VERSION) < Gem::Version.new('2.7') raise UnsupportedFrameworkError.new("Cucumber is only supported in versions of Ruby >= 2.7") end self.api_token = (token || ENV["BUILDKITE_ANALYTICS_TOKEN"])&.strip self.url = url || ENV["BUILDKITE_ANALYTICS_ENDPOINT"] || DEFAULT_URL self.tracing_enabled = tracing_enabled self.artifact_path = artifact_path self.location_prefix = location_prefix || ENV["BUILDKITE_ANALYTICS_LOCATION_PREFIX"] self.env = env self. = 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 |
.enable_tracing! ⇒ Object
99 100 101 102 103 104 105 106 107 108 109 110 111 112 |
# File 'lib/buildkite/test_collector.rb', line 99 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 |
.hook_into(hook) ⇒ Object
74 75 76 77 78 79 |
# File 'lib/buildkite/test_collector.rb', line 74 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 |
.tag_execution(key, value) ⇒ Object
Set a key=value tag on the current test execution.
88 89 90 91 92 93 94 95 96 97 |
# File 'lib/buildkite/test_collector.rb', line 88 def self.tag_execution(key, value) = Thread.current[:_buildkite_tags] raise "_buildkite_tags not available" unless unless key.is_a?(String) && value.is_a?(String) raise ArgumentError, "tag key and value expected string" end [key] = value end |