class GitLab::Exporter::ProcessProber

Probes a process for info then writes metrics to a target

Public Class Methods

new(name:, metrics: PrometheusMetrics.new, quantiles: false, **options) click to toggle source
# File lib/gitlab_exporter/process.rb, line 62
def initialize(name:, metrics: PrometheusMetrics.new, quantiles: false, **options)
  @metrics = metrics
  @name    = name
  @pids    = if options[:pid_or_pattern] =~ /^\d+$/
               [options[:pid_or_pattern]]
             else
               Utils.pgrep(options[:pid_or_pattern])
             end
  @use_quantiles = quantiles
end

Public Instance Methods

probe_count() click to toggle source
# File lib/gitlab_exporter/process.rb, line 94
def probe_count
  puts "[DEPRECATED] probe_count and ProcessProber are now considered obsolete"\
    " and will be removed in future major versions,"\
    " please use metrics produced by application processes instead"

  @metrics.add("process_count", @pids.count, name: @name.downcase)

  self
end
probe_smaps() click to toggle source
# File lib/gitlab_exporter/process.rb, line 104
def probe_smaps
  puts "[DEPRECATED] probe_smaps and ProcessProber are now considered obsolete"\
    " and will be removed in future major versions,"\
    " please use metrics produced by application processes instead"

  @pids.each do |pid|
    stats = ::GitLab::Exporter::MemStats::Aggregator.new(pid)

    next unless stats.valid?

    labels = { name: @name.downcase }
    labels[:pid] = pid unless @use_quantiles

    ::GitLab::Exporter::MemStats::Mapping::FIELDS.each do |field|
      value = stats.totals[field]

      @metrics.add("process_smaps_#{field}_bytes", value * 1024, @use_quantiles, **labels) if value >= 0
    end
  end

  self
end
probe_stat() click to toggle source
# File lib/gitlab_exporter/process.rb, line 73
def probe_stat
  puts "[DEPRECATED] probe_stat and ProcessProber are now considered obsolete"\
    " and will be removed in future major versions,"\
    " please use metrics produced by application processes instead"

  @pids.each do |pid|
    stats = ProcessStats.new(pid)
    next unless stats.valid?

    labels = { name: @name.downcase }
    labels[:pid] = pid unless @use_quantiles

    @metrics.add("process_cpu_seconds_total", stats.cpu_time, @use_quantiles, **labels)
    @metrics.add("process_resident_memory_bytes", stats.rss, @use_quantiles, **labels)
    @metrics.add("process_virtual_memory_bytes", stats.vsize, @use_quantiles, **labels)
    @metrics.add("process_start_time_seconds", stats.start_time, @use_quantiles, **labels)
  end

  self
end
write_to(target) click to toggle source
# File lib/gitlab_exporter/process.rb, line 127
def write_to(target)
  target.write(@metrics.to_s)
end