class Atatus::Metrics::CpuMemSet

@api private

Attributes

config[R]

Public Class Methods

new(config) click to toggle source
Calls superclass method
# File lib/atatus/metrics/cpu_mem_set.rb, line 62
def initialize(config)
  @vmset_disabled = false
  super

  @sampler = sampler_for_platform(Metrics.platform)
  read! # set @previous on boot
end

Public Instance Methods

collect() click to toggle source
Calls superclass method
# File lib/atatus/metrics/cpu_mem_set.rb, line 72
def collect
  read!
  super
end

Private Instance Methods

calculate_deltas(current, previous) click to toggle source
# File lib/atatus/metrics/cpu_mem_set.rb, line 143
def calculate_deltas(current, previous)
  system_cpu_total =
    current.system_cpu_total - previous.system_cpu_total
  system_cpu_usage =
    current.system_cpu_usage - previous.system_cpu_usage
  process_cpu_usage =
    current.process_cpu_usage - previous.process_cpu_usage

  cpu_usage_pct = system_cpu_usage.to_f / system_cpu_total
  cpu_process_pct = process_cpu_usage.to_f / system_cpu_total

  [cpu_usage_pct, cpu_process_pct]
end
read!() click to toggle source
# File lib/atatus/metrics/cpu_mem_set.rb, line 97
def read!
  return if disabled?

  current = @sampler.sample

  unless @previous
    @previous = current
    return
  end

  cpu_usage_pct, cpu_process_pct = calculate_deltas(current, @previous)

  gauge(:'system.cpu.total.norm.pct').value = cpu_usage_pct
  gauge(:'system.memory.actual.free').value = current.system_memory_free
  gauge(:'system.memory.total').value = current.system_memory_total
  gauge(:'system.process.cpu.total.norm.pct').value = cpu_process_pct
  gauge(:'system.process.memory.size').value = current.process_memory_size
  gauge(:'system.process.memory.rss.bytes').value =
    current.process_memory_rss * current.page_size

  @previous = current

  return if vmset_disabled?

  stat = GC.stat

  gauge(:'ruby.gc.count').value = stat[:count]
  gauge(:'ruby.threads').value = Thread.list.count
  gauge(:'ruby.heap.slots.live').value = stat[:heap_live_slots]

  gauge(:'ruby.heap.slots.free').value = stat[:heap_free_slots]
  gauge(:'ruby.heap.allocations.total').value =
    stat[:total_allocated_objects]

  return unless GC::Profiler.enabled?
  @total_time ||= 0
  @total_time += GC::Profiler.total_time
  GC::Profiler.clear
  gauge(:'ruby.gc.time').value = @total_time
rescue TypeError => e
  error 'VM metrics encountered error: %s', e
  debug('Backtrace:') { e.backtrace.join("\n") }

  vmset_disable!
end
sampler_for_platform(platform) click to toggle source
# File lib/atatus/metrics/cpu_mem_set.rb, line 87
def sampler_for_platform(platform)
  case platform
  when :linux then Linux.new
  else
    warn "Unsupported platform '#{platform}' - Disabling system metrics"
    disable!
    nil
  end
end
vmset_disable!() click to toggle source
# File lib/atatus/metrics/cpu_mem_set.rb, line 79
def vmset_disable!
  @vmset_disabled = true
end
vmset_disabled?() click to toggle source
# File lib/atatus/metrics/cpu_mem_set.rb, line 83
def vmset_disabled?
  @vmset_disabled
end