class GitLab::Monitor::Database::CiBuildsCollector
A helper class to collect CI builds metrics.
Constants
- BUILDS_QUERY_CE
- BUILDS_QUERY_EE
- DEFAULT_UNARCHIVED_TRACES_OFFSET_MINUTES
- MIRROR_COLUMN_QUERY
- PER_RUNNER_QUERY_CE
- PER_RUNNER_QUERY_EE
- REPEATED_COMMANDS_QUERY_CE
- REPEATED_COMMANDS_QUERY_EE
- SET_RANDOM_PAGE_COST
- STALE_BUILDS_QUERY
- STATUS_CREATED
- STATUS_PENDING
- UNARCHIVED_TRACES_QUERY
Public Class Methods
new(opts)
click to toggle source
Calls superclass method
GitLab::Monitor::Database::Base::new
# File lib/gitlab_monitor/database/ci_builds.rb, line 256 def initialize(opts) super(opts) @allowed_repeated_commands_count = opts[:allowed_repeated_commands_count] @created_builds_counting_disabled = opts[:created_builds_counting_disabled] @unarchived_traces_offset_minutes = opts[:unarchived_traces_offset_minutes] end
Public Instance Methods
run()
click to toggle source
# File lib/gitlab_monitor/database/ci_builds.rb, line 264 def run results = {} results[:created_builds] = builds(STATUS_CREATED) unless @created_builds_counting_disabled results[:pending_builds] = builds(STATUS_PENDING) results[:stale_builds] = stale_builds results[:per_runner] = per_runner_builds results[:repeated_commands] = repeated_commands results[:unarchived_traces] = unarchived_traces results end
Private Instance Methods
allowed_repeated_commands_count()
click to toggle source
# File lib/gitlab_monitor/database/ci_builds.rb, line 343 def allowed_repeated_commands_count @allowed_repeated_commands_count ||= 2 end
builds(status)
click to toggle source
# File lib/gitlab_monitor/database/ci_builds.rb, line 277 def builds(status) results = [] query = mirror_column? ? BUILDS_QUERY_EE : BUILDS_QUERY_CE query = query % [status] # rubocop:disable Style/FormatString exec_query_with_custom_random_page_cost(query).each do |row| results << transform_builds_row_to_values(row) end results rescue PG::UndefinedTable, PG::UndefinedColumn results end
exec_query_with_custom_random_page_cost(query)
click to toggle source
# File lib/gitlab_monitor/database/ci_builds.rb, line 388 def exec_query_with_custom_random_page_cost(query) with_connection_pool do |conn| conn.transaction do |trans| trans.exec(SET_RANDOM_PAGE_COST) trans.exec(query) end end end
include_bool_if_row_defined(row, field)
click to toggle source
# File lib/gitlab_monitor/database/ci_builds.rb, line 383 def include_bool_if_row_defined(row, field) return {} unless row[field.to_s] { field => row[field.to_s] == "t" ? "yes" : "no" } end
include_ee_fields(values, row)
click to toggle source
# File lib/gitlab_monitor/database/ci_builds.rb, line 372 def include_ee_fields(values, row) values.merge!(include_bool_if_row_defined(row, :mirror)) values.merge!(include_bool_if_row_defined(row, :mirror_trigger_builds)) include_has_minutes_field(values, row) end
include_has_minutes_field(values, row)
click to toggle source
# File lib/gitlab_monitor/database/ci_builds.rb, line 378 def include_has_minutes_field(values, row) values.merge!(include_bool_if_row_defined(row, :has_minutes)) values end
mirror_column?()
click to toggle source
# File lib/gitlab_monitor/database/ci_builds.rb, line 397 def mirror_column? @mirror_column ||= begin with_connection_pool do |conn| conn.exec(MIRROR_COLUMN_QUERY)[0]["exists"] == "t" end rescue PG::UndefinedColumn false end end
per_runner_builds()
click to toggle source
# File lib/gitlab_monitor/database/ci_builds.rb, line 306 def per_runner_builds results = [] query = mirror_column? ? PER_RUNNER_QUERY_EE : PER_RUNNER_QUERY_CE exec_query_with_custom_random_page_cost(query).each do |row| results << transform_per_runners_builds_row_to_values(row) end results rescue PG::UndefinedTable, PG::UndefinedColumn [] end
repeated_commands()
click to toggle source
# File lib/gitlab_monitor/database/ci_builds.rb, line 329 def repeated_commands results = [] query = mirror_column? ? REPEATED_COMMANDS_QUERY_EE : REPEATED_COMMANDS_QUERY_CE query = query % [allowed_repeated_commands_count] # rubocop:disable Style/FormatString exec_query_with_custom_random_page_cost(query).each do |row| results << transform_repeated_commands_row_to_values(row) end results rescue PG::UndefinedTable, PG::UndefinedColumn [] end
stale_builds()
click to toggle source
# File lib/gitlab_monitor/database/ci_builds.rb, line 298 def stale_builds with_connection_pool do |conn| conn.exec(STALE_BUILDS_QUERY)[0]["count"].to_i end rescue PG::UndefinedTable, PG::UndefinedColumn 0 end
transform_builds_row_to_values(row)
click to toggle source
# File lib/gitlab_monitor/database/ci_builds.rb, line 291 def transform_builds_row_to_values(row) values = { namespace: row["namespace_id"].to_s, shared_runners: row["shared_runners_enabled"] == "t" ? "yes" : "no", value: row["count"].to_i } include_ee_fields(values, row) end
transform_per_runners_builds_row_to_values(row)
click to toggle source
# File lib/gitlab_monitor/database/ci_builds.rb, line 319 def transform_per_runners_builds_row_to_values(row) values = { runner: row["runner_id"].to_s, shared_runner: row["is_shared"] == "t" ? "yes" : "no", namespace: row["namespace_id"].to_s, scheduled: row["pipeline_schedule_id"] ? "yes" : "no", triggered: row["trigger_request_id"] ? "yes" : "no", value: row["count"].to_i } include_ee_fields(values, row) end
transform_repeated_commands_row_to_values(row)
click to toggle source
# File lib/gitlab_monitor/database/ci_builds.rb, line 347 def transform_repeated_commands_row_to_values(row) values = { namespace: row["namespace_id"].to_s, project: row["project_id"].to_s, shared_runners: row["shared_runners_enabled"] == "t" ? "yes" : "no", status: row["status"].to_s, value: row["count"].to_i } include_has_minutes_field(values, row) end
unarchived_traces()
click to toggle source
# File lib/gitlab_monitor/database/ci_builds.rb, line 357 def unarchived_traces time = Time.now - (unarchived_traces_offset_minutes * 60) query = UNARCHIVED_TRACES_QUERY % [time.strftime("%F %T")] # rubocop:disable Style/FormatString with_connection_pool do |conn| conn.exec(query)[0]["count"].to_i end rescue PG::UndefinedTable, PG::UndefinedColumn 0 end
unarchived_traces_offset_minutes()
click to toggle source
# File lib/gitlab_monitor/database/ci_builds.rb, line 368 def unarchived_traces_offset_minutes @unarchived_traces_offset_minutes ||= DEFAULT_UNARCHIVED_TRACES_OFFSET_MINUTES end