module Processwatch
License: (MIT), Copyright © 2013 Process Watch Author Phil Chen.
Constants
- VERSION
Public Instance Methods
restart()
click to toggle source
# File lib/processwatch/pw_linux.rb, line 5 def restart ps_list = `ps h -eo cmd` require 'socket' host = Socket.gethostname dir = File.dirname("/usr/local/processwatch/conf") load File.expand_path("#{dir}/conf/general_restart_contact") Dir[File.expand_path("#{dir}/conf/restart_*")]. uniq. each do |file| load file list = ps_list.split(/\n/) occurances = list.grep(/.*#$restart_process.*/) if occurances.length == 0 && $restart_mail == "yes" && $restart_start == "yes" usw = Usagewatch diagnostic_msgstr = <<END_OF_MESSAGE #{usw.uw_diskused} Total Gigabytes Disk Used #{usw.uw_diskused_perc} Percentage of Gigabytes Used #{usw.uw_cpuused}% CPU Used #{usw.uw_tcpused} TCP Connections Used #{usw.uw_udpused} UDP Connections Used #{usw.uw_memused}% Active Memory Used #{usw.uw_load} Average System Load Of The Past Minute #{usw.uw_bandrx} Mbit/s Current Bandwidth Received #{usw.uw_bandtx} Mbit/s Current Bandwidth Transmitted #{usw.uw_diskioreads}/s Current Disk Reads Completed #{usw.uw_diskiowrites}/s Current Disk Writes Completed Top Ten Processes By CPU Consumption: #{usw.uw_cputop} Top Ten Processes By Memory Consumption: #{usw.uw_memtop} END_OF_MESSAGE restart_msgstr = <<END_OF_MESSAGE From: #$restart_from <#$restart_from_email> To: #$restart_to <#$restart_to_email> Subject: Dead Process Detected On #{host} Process Watch has detected #{$restart_process} has died. We have started #{$restart_process} again. Below Is a Snapshot Of System Statistics Before The Process Was Started Again #{diagnostic_msgstr} -Process Watch END_OF_MESSAGE system $restart_action require 'net/smtp' Net::SMTP.start("#$restart_smtp_host", "#$restart_smtp_port") do |smtp| smtp.send_message(restart_msgstr, "#$restart_from_email", "#$restart_to_email") end elsif occurances.length == 0 && $restart_mail == "yes" && $restart_start == "no" usw = Usagewatch diagnostic_msgstr = <<END_OF_MESSAGE #{usw.uw_diskused} Total Gigabytes Disk Used #{usw.uw_diskused_perc} Percentage of Gigabytes Used #{usw.uw_cpuused}% CPU Used #{usw.uw_tcpused} TCP Connections Used #{usw.uw_udpused} UDP Connections Used #{usw.uw_memused}% Active Memory Used #{usw.uw_load} Average System Load Of The Past Minute #{usw.uw_bandrx} Mbit/s Current Bandwidth Received #{usw.uw_bandtx} Mbit/s Current Bandwidth Transmitted #{usw.uw_diskioreads}/s Current Disk Reads Completed #{usw.uw_diskiowrites}/s Current Disk Writes Completed Top Ten Processes By CPU Consumption: #{usw.uw_cputop} Top Ten Processes By Memory Consumption: #{usw.uw_memtop} END_OF_MESSAGE dead_process_msgstr = <<END_OF_MESSAGE From: #$restart_from <#$restart_from_email> To: #$restart_to <#$restart_to_email> Subject: Dead Process Detected On #{host} Process Watch has detected #{$restart_process} has died. Below Is A Snapshot Of Current System Statistics #{diagnostic_msgstr} -Process Watch END_OF_MESSAGE require 'net/smtp' Net::SMTP.start("#$restart_smtp_host", "#$restart_smtp_port") do |smtp| smtp.send_message(dead_process_msgstr, "#$restart_from_email", "#$restart_to_email") end elsif occurances.length == 0 && $restart_mail == "no" && $restart_start == "yes" system $restart_action end end end
runaway()
click to toggle source
# File lib/processwatch/pw_linux.rb, line 100 def runaway ps_list = `ps h -eo cputime,pcpu,pid,user,cmd` dir = File.dirname("/usr/local/processwatch/conf") Dir[File.expand_path("#{dir}/conf/runaway")]. uniq. each do |file| load file list = ps_list.split(/\n/) list.each do |p| process = p.split process[0] =~ /(\d+):(\d+):(\d+)/ cpu_time = ($1.to_i*3600.to_i + $2.to_i*60.to_i + $3.to_i) next if cpu_time.to_i < $runaway_max_time.to_i begin if $runaway_mail == "yes" && $runaway_kill == "yes" usw = Usagewatch diagnostic_msgstr = <<END_OF_MESSAGE #{usw.uw_diskused} Total Gigabytes Disk Used #{usw.uw_diskused_perc} Percentage of Gigabytes Used #{usw.uw_cpuused}% CPU Used #{usw.uw_tcpused} TCP Connections Used #{usw.uw_udpused} UDP Connections Used #{usw.uw_memused}% Active Memory Used #{usw.uw_load} Average System Load Of The Past Minute #{usw.uw_bandrx} Mbit/s Current Bandwidth Received #{usw.uw_bandtx} Mbit/s Current Bandwidth Transmitted #{usw.uw_diskioreads}/s Current Disk Reads Completed #{usw.uw_diskiowrites}/s Current Disk Writes Completed Top Ten Processes By CPU Consumption: #{usw.uw_cputop} Top Ten Processes By Memory Consumption: #{usw.uw_memtop} END_OF_MESSAGE kill_msgstr = <<END_OF_MESSAGE From: #$runaway_from <#$runaway_from_email> To: #$runaway_to <#$runaway_to_email> Subject: Runaway Process Detected The Below Runaway Process Has Been Detected #{process[4]} It has been killed! Below Is A Snapshot Of The System Statistics Before It Was Killed #{diagnostic_msgstr} END_OF_MESSAGE require 'net/smtp' Net::SMTP.start("#$runaway_smtp_host", "#$runaway_smtp_port") do |smtp| smtp.send_message(kill_msgstr, "#$runaway_from_email", "#$runaway_to_email") system("/bin/kill" + " " + "-9" + " " + "#{process[2]}") end elsif $runaway_mail == "yes" && $runaway_kill == "no" usw = Usagewatch diagnostic_msgstr = <<END_OF_MESSAGE #{usw.uw_diskused} Total Gigabytes Disk Used #{usw.uw_diskused_perc} Percentage of Gigabytes Used #{usw.uw_cpuused}% CPU Used #{usw.uw_tcpused} TCP Connections Used #{usw.uw_udpused} UDP Connections Used #{usw.uw_memused}% Active Memory Used #{usw.uw_load} Average System Load Of The Past Minute #{usw.uw_bandrx} Mbit/s Current Bandwidth Received #{usw.uw_bandtx} Mbit/s Current Bandwidth Transmitted #{usw.uw_diskioreads}/s Current Disk Reads Completed #{usw.uw_diskiowrites}/s Current Disk Writes Completed Top Ten Processes By CPU Consumption: #{usw.uw_cputop} Top Ten Processes By Memory Consumption: #{usw.uw_memtop} END_OF_MESSAGE no_kill_msgstr = <<END_OF_MESSAGE From: #$runaway_from <#$runaway_from_email> To: #$runaway_to <#$runaway_to_email> Subject: Runaway Process Detected The Below Runaway Process Has Been Detected #{process[4]} Below Is A Snapshot Of Current System Statistics #{diagnostic_msgstr} END_OF_MESSAGE require 'net/smtp' Net::SMTP.start("#$runaway_smtp_host", "#$runaway_smtp_port") do |smtp| smtp.send_message(no_kill_msgstr, "#$runaway_from_email", "#$runaway_to_email") end elsif $runaway_mail == "no" && $runaway_kill == "yes" system("/bin/kill" + " " + "-9" + " " + "#{process[2]}") else exit end rescue puts "Error Killing the process" retry end end end end