class GitLab::Monitor::GitProcessProber
A special prober for git processes
Public Class Methods
extract_subcommand(cmd)
click to toggle source
# File lib/gitlab_monitor/git.rb, line 132 def self.extract_subcommand(cmd) return if cmd.empty? cmd_splitted = cmd.split("\u0000") # cmdline does not return it space-separated cmd_splitted.shift # Because it's "git" cmd_splitted.shift while cmd_splitted.first && (cmd_splitted.first.empty? || cmd_splitted.first !~ /^[^-][a-z\-]*$/) cmd_splitted[0] end
new(opts, metrics: PrometheusMetrics.new)
click to toggle source
# File lib/gitlab_monitor/git.rb, line 88 def initialize(opts, metrics: PrometheusMetrics.new) @opts = opts @metrics = metrics end
Public Instance Methods
probe_git()
click to toggle source
# File lib/gitlab_monitor/git.rb, line 93 def probe_git # rubocop:disable Metrics/MethodLength counts = Hash.new(0) Utils.pgrep("^git ").each do |pid| process_cmd = begin File.read("/proc/#{pid}/cmdline") rescue "" # Process file is gone (race condition) end subcommand = self.class.extract_subcommand(process_cmd) next unless subcommand # Unlikely, but just to be safe name = "git #{subcommand}" counts[name] += 1 prober = ProcessProber.new( { name: name, pid_or_pattern: pid, quantiles: @opts[:quantiles] }, metrics: @metrics ) prober .probe_stat end counts.each do |name, count| @metrics.add("process_count", count, name: name) end self end
write_to(target)
click to toggle source
# File lib/gitlab_monitor/git.rb, line 128 def write_to(target) target.write(@metrics.to_s) end