class MetricsMonitor::BasicCollector
Constants
- PS_OPTION
- PS_PATTERN
Public Class Methods
new()
click to toggle source
# File lib/metrics_monitor/basic_collector.rb, line 9 def initialize @pid = Process.pid end
Public Instance Methods
calculate()
click to toggle source
# File lib/metrics_monitor/basic_collector.rb, line 25 def calculate calculate_ps end
meta()
click to toggle source
# File lib/metrics_monitor/basic_collector.rb, line 13 def meta { chart_formats: [ { key: :process, title: "Process", type: :line }, { key: :cpu, title: "CPU", type: :area }, { key: :mem, title: "MEM", type: :area }, { key: :rss, title: "RSS", type: :area }, { key: :vsz, title: "VSZ", type: :area }, ] } end
Private Instance Methods
calculate_ps()
click to toggle source
# File lib/metrics_monitor/basic_collector.rb, line 31 def calculate_ps pids = [@pid] output, error, status = Open3.capture3("ps", "-o", PS_OPTION) if status.success? total_cpu = 0.0 total_mem = 0.0 total_rss = 0 total_vsz = 0 output.each_line do |line| match = PS_PATTERN.match(line) next unless match pid = match[:pid].to_i ppid = match[:ppid].to_i cpu = match[:cpu].to_f mem = match[:mem].to_f rss = match[:rss].to_i vsz = match[:vsz].to_i if pids.include?(ppid) pids << pid elsif pid != @pid next end total_cpu += cpu total_mem += mem total_rss += rss total_vsz += vsz end { process: pids.size, cpu: total_cpu, mem: total_mem, rss: total_rss, vsz: total_vsz, } else raise MetricsMonitor::Error, error end end