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