class Splash::Processes::ProcessScanner

Processes scanner and notifier

Public Class Methods

new() click to toggle source

ProcessScanner Constructor : initialize prometheus metrics @return [Splash::Processes::ProcessScanner]

# File lib/splash/processes.rb, line 96
def initialize
  @processes_target = Marshal.load(Marshal.dump(get_config.processes))
  @config = get_config
end

Public Instance Methods

analyse() click to toggle source

start process analyse for process target in config @return [Hash] Exiter case :quiet_exit

# File lib/splash/processes.rb, line 104
def analyse
  @processes_target.each do |record|
    list =  get_processes patterns: record[:patterns], full: true
    if list.empty?
      record[:status] = :inexistant
      record[:cpu] = 0
      record[:mem] = 0
    else
      record[:status] = :running
      record[:cpu] = list[0]['%CPU']
      record[:mem] = list[0]['%MEM']
    end
  end
  return {:case => :quiet_exit }
end
notify(options = {}) click to toggle source

start notification on prometheus for metrics @param [Hash] options @option options [String] :session a session number for log daemon @return [Hash] Exiter case :quiet_exit

# File lib/splash/processes.rb, line 130
def notify(options = {})
  log = get_logger
  unless verify_service url: @config.prometheus_pushgateway_url then
    return  { :case => :service_dependence_missing, :more => "Prometheus Notification not send." }
  end
  session = (options[:session]) ? options[:session] : log.get_session
  log.info "Sending metrics to Prometheus Pushgateway", session
  @processes_target.each do |item|
    processrec = ProcessRecords::new item[:process]
    missing = (item[:status] == :missing)? 1 : 0
    val = (item[:status] == :running )? 1 : 0
    processrec.purge(item[:retention])
    processrec.add_record :status => item[:status],
                     :cpu_percent => item[:cpu],
                     :mem_percent => item[:mem] ,
                     :process => item[:process]
    processmonitor = ProcessNotifier::new({name: item[:process], status: val , cpu_percent: item[:cpu], mem_percent: item[:mem]})
    if processmonitor.notify then
      log.ok "Sending metrics for process #{item[:process]} to Prometheus Pushgateway", session
    else
      log.ko "Failed to send metrics for process #{item[:process]} to Prometheus Pushgateway", session
    end
  end
  return {:case => :quiet_exit }
end
output() click to toggle source

pseudo-accessor on @processes_target @return [Hash] the processes structure

# File lib/splash/processes.rb, line 122
def output
  return @processes_target
end