class GitLab::Exporter::Database::CiBuildsProber

The prober which is called when gathering metrics

Public Class Methods

new(metrics: PrometheusMetrics.new, **opts) click to toggle source
# File lib/gitlab_exporter/database/ci_builds.rb, line 297
def initialize(metrics: PrometheusMetrics.new, **opts)
  @metrics = metrics
  @collector = CiBuildsCollector.new(**opts)
end

Public Instance Methods

probe_db() click to toggle source
# File lib/gitlab_exporter/database/ci_builds.rb, line 302
def probe_db
  @results = @collector.run

  ci_builds_metrics(@results[:created_builds], "ci_created_builds") if @results[:created_builds]
  ci_builds_metrics(@results[:pending_builds], "ci_pending_builds")
  ci_stale_builds_metrics
  metrics_per_runner
  unarchived_traces_metrics

  self
rescue PG::ConnectionBad
  self
end
write_to(target) click to toggle source
# File lib/gitlab_exporter/database/ci_builds.rb, line 316
def write_to(target)
  target.write(@metrics.to_s)
end

Private Instance Methods

add_ci_created_pending_builds(metric_name, value, labels) click to toggle source
# File lib/gitlab_exporter/database/ci_builds.rb, line 342
def add_ci_created_pending_builds(metric_name, value, labels)
  add_metric_with_namespace_label(metric_name,
                                  %i[namespace shared_runners has_minutes],
                                  value,
                                  labels)
end
add_ci_running_builds(value, labels) click to toggle source
# File lib/gitlab_exporter/database/ci_builds.rb, line 376
def add_ci_running_builds(value, labels)
  add_metric_with_namespace_label(
    "ci_running_builds",
    %i[runner namespace runner_type scheduled
       triggered mirror mirror_trigger_builds has_minutes],
    value,
    labels
  )
end
add_metric_with_namespace_label(metric_name, allowed_labels, value, labels) click to toggle source
# File lib/gitlab_exporter/database/ci_builds.rb, line 386
def add_metric_with_namespace_label(metric_name, allowed_labels, value, labels)
  labels[:namespace] = "" unless labels[:namespace]

  selected_labels = labels.select { |k, _| allowed_labels.include?(k) }.sort.to_h
  @metrics.add(metric_name, value.to_f, **selected_labels)
end
ci_builds_metrics(results_list, metric_name) click to toggle source
# File lib/gitlab_exporter/database/ci_builds.rb, line 322
def ci_builds_metrics(results_list, metric_name)
  other_values = {}

  results_list.each do |metric|
    # If we have a low value, put the value into an "other" bucket.
    if metric[:value] < 10
      key = { shared_runners: metric[:shared_runners] }
      key[:has_minutes] = metric[:has_minutes] if metric[:has_minutes]

      other_values[key] ||= 0
      other_values[key] += metric[:value]
    else
      add_ci_created_pending_builds(metric_name, metric[:value].to_f, metric)
    end
  end

  # Add metrics for the "other" bucket.
  other_values.each { |key, value| add_ci_created_pending_builds(metric_name, value, key) }
end
ci_stale_builds_metrics() click to toggle source
# File lib/gitlab_exporter/database/ci_builds.rb, line 349
def ci_stale_builds_metrics
  @metrics.add("ci_stale_builds", @results[:stale_builds].to_f)
end
metrics_per_runner() click to toggle source
# File lib/gitlab_exporter/database/ci_builds.rb, line 353
def metrics_per_runner
  other_values = {}

  @results[:per_runner].each do |metric|
    # If we have a low value, put the value into an "other" bucket.
    if metric[:value] < 10
      key = { runner: metric[:runner], runner_type: metric[:runner_type],
              scheduled: metric[:scheduled], triggered: metric[:triggered] }
      key[:mirror] = metric[:mirror] if metric[:mirror]
      key[:mirror_trigger_builds] = metric[:mirror_trigger_builds] if metric[:mirror_trigger_builds]
      key[:has_minutes] = metric[:has_minutes] if metric[:has_minutes]

      other_values[key] ||= 0
      other_values[key] += metric[:value]
    else
      add_ci_running_builds(metric[:value], metric)
    end
  end

  # Add metrics for the "other" bucket.
  other_values.each { |key, value| add_ci_running_builds(value, key) }
end
unarchived_traces_metrics() click to toggle source
# File lib/gitlab_exporter/database/ci_builds.rb, line 393
def unarchived_traces_metrics
  @metrics.add("ci_unarchived_traces", @results[:unarchived_traces].to_f)
end