class Riemann::Tools::AgedProcessMonitor
Public Class Methods
new()
click to toggle source
# File bin/riemann-aged-process-monitor, line 16 def initialize if opts[:username] userid = get_uid opts[:username] process_uid_select = -> proc { proc.uid == userid } end if opts[:process] process_name_select = -> proc { proc.name =~ /#{opts[:process]}/ } end @age_flag = convert_age opts[:age] process_age_select = -> proc { File.exists?("/proc/#{proc.pid}") && (Time.now - File.ctime("/proc/#{proc.pid}")) > @age_flag } @selects = [ process_uid_select, process_age_select, process_name_select ].compact end
Public Instance Methods
convert_age(age_string)
click to toggle source
# File bin/riemann-aged-process-monitor, line 40 def convert_age age_string age_string_regex = /^(\d+)([s|m|h|d]{1})$/ values = age_string.match(age_string_regex) raise "Invalid age string - must follow convention of a number followed by indicator - s[econds], m[inutes], h[hours], d[days]" unless values conversion = { 's' => 1, 'm' => 60, 'h' => 3600, 'd' => 86400} values[1].to_i * conversion[values[2]] end
description(processes)
click to toggle source
Since: Jan 01, 2015 -> command foobar
# File bin/riemann-aged-process-monitor, line 50 def description processes desc = processes.count > 0 ? "The following processes were found:\n" : "No processes were found that exceed @age_flag" processes.each do |proc| desc << " Since: #{File.ctime("/proc/#{proc.pid}").asctime} -> #{proc.cmdline}\n" end desc end
get_uid(username)
click to toggle source
# File bin/riemann-aged-process-monitor, line 32 def get_uid username begin Etc.getpwnam(username).uid rescue ArgumentError => e raise "Username provided [#{username}] is invalid" end end
tick()
click to toggle source
# File bin/riemann-aged-process-monitor, line 58 def tick processes = ProcTable.ps monitored_processes = @selects.inject(processes) { |processes, selector| processes.select(&selector) } report({ :service => "aged-process-monitor", :state => monitored_processes.count > 0 ? 'critical' : 'ok', :metric => monitored_processes.count, :description => description(monitored_processes), :time => Time.now.to_i }) end