class GitLab::Exporter::GitProcessProber
A special prober for git processes
Public Class Methods
extract_subcommand(cmd)
click to toggle source
# File lib/gitlab_exporter/git.rb, line 138 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(metrics: PrometheusMetrics.new, quantiles: nil, **opts)
click to toggle source
# File lib/gitlab_exporter/git.rb, line 90 def initialize(metrics: PrometheusMetrics.new, quantiles: nil, **opts) # rubocop:disable Lint/UnusedMethodArgument @metrics = metrics @quantiles = quantiles end
Public Instance Methods
probe_git()
click to toggle source
# File lib/gitlab_exporter/git.rb, line 95 def probe_git # rubocop:disable Metrics/MethodLength puts "[DEPRECATED] probe_git and GitProcessProber are now considered obsolete"\ " and will be removed in future major versions,"\ " please use git metrics produced by Gitaly instead" counts = Hash.new(0) Utils.pgrep("^git ").each do |pid| process_cmd = begin File.read("/proc/#{pid}/cmdline") rescue StandardError "" # 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: @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_exporter/git.rb, line 134 def write_to(target) target.write(@metrics.to_s) end