class GitLab::Monitor::Database::CiBuildsProber
The prober which is called when gathering metrics
Public Class Methods
new(opts, metrics: PrometheusMetrics.new)
click to toggle source
# File lib/gitlab_monitor/database/ci_builds.rb, line 411 def initialize(opts, metrics: PrometheusMetrics.new) @metrics = metrics collector_opts = { connection_string: opts[:connection_string], 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] } @collector = CiBuildsCollector.new(collector_opts) end
Public Instance Methods
probe_db()
click to toggle source
# File lib/gitlab_monitor/database/ci_builds.rb, line 421 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 repeated_commands_metrics unarchived_traces_metrics self rescue PG::ConnectionBad self end
write_to(target)
click to toggle source
# File lib/gitlab_monitor/database/ci_builds.rb, line 436 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_monitor/database/ci_builds.rb, line 462 def add_ci_created_pending_builds(metric_name, value, labels) add_metric_with_namespace_label(metric_name, [:namespace, :shared_runners, :has_minutes], value, labels) end
add_ci_running_builds(value, labels)
click to toggle source
# File lib/gitlab_monitor/database/ci_builds.rb, line 496 def add_ci_running_builds(value, labels) add_metric_with_namespace_label( "ci_running_builds", [:runner, :namespace, :shared_runner, :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_monitor/database/ci_builds.rb, line 506 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, selected_labels) end
ci_builds_metrics(results_list, metric_name)
click to toggle source
# File lib/gitlab_monitor/database/ci_builds.rb, line 442 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], 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_monitor/database/ci_builds.rb, line 469 def ci_stale_builds_metrics @metrics.add("ci_stale_builds", @results[:stale_builds]) end
metrics_per_runner()
click to toggle source
# File lib/gitlab_monitor/database/ci_builds.rb, line 473 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], shared_runner: metric[:shared_runner], 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
repeated_commands_metrics()
click to toggle source
# File lib/gitlab_monitor/database/ci_builds.rb, line 513 def repeated_commands_metrics @results[:repeated_commands].each do |metric| value = metric.delete(:value) @metrics.add("ci_repeated_commands_builds", value, metric) end end
unarchived_traces_metrics()
click to toggle source
# File lib/gitlab_monitor/database/ci_builds.rb, line 521 def unarchived_traces_metrics @metrics.add("ci_unarchived_traces", @results[:unarchived_traces]) end