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