From 4a218de694c8f77a396f1dc55c828b4a3f693d23 Mon Sep 17 00:00:00 2001 From: David Heinemeier Hansson Date: Fri, 28 Apr 2006 03:15:31 +0000 Subject: Added a simple process inspector git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@4298 5ecf4fe2-1ee6-0310-87b1-e25e094e27de --- railties/lib/commands/process/inspector.rb | 68 ++++++++++++++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 railties/lib/commands/process/inspector.rb (limited to 'railties') diff --git a/railties/lib/commands/process/inspector.rb b/railties/lib/commands/process/inspector.rb new file mode 100644 index 0000000000..cc17db6ac1 --- /dev/null +++ b/railties/lib/commands/process/inspector.rb @@ -0,0 +1,68 @@ +require 'optparse' + +if RUBY_PLATFORM =~ /mswin32/ then abort("Reaper is only for Unix") end + +OPTIONS = { + :pid_path => File.expand_path(RAILS_ROOT + '/tmp/pids'), + :pattern => "dispatch.*.pid", + :ps => "ps -o user,start,etime,pcpu,vsz,majflt,command -p %s" +} + +class Inspector + def self.inspect(pid_path, pattern) + new(pid_path, pattern).inspect + end + + def initialize(pid_path, pattern) + @pid_path, @pattern = pid_path, pattern + end + + def inspect + for process in find_processes + puts "#{File.basename(process[:pid_file])}:" + puts(`#{OPTIONS[:ps] % process[:pid]}`) + puts + end + end + + private + def find_processes + pid_files.inject([]) do |pids, pid_file| + pids << { :pid_file => pid_file, :pid => File.read(pid_file).to_i } + end + end + + def pid_files + Dir.glob(@pid_path + "/" + @pattern) + end +end + + +ARGV.options do |opts| + opts.banner = "Usage: inspector [options]" + + opts.separator "" + + opts.on <<-EOF + Description: + Get the lowdown on processes. + + Examples: + inspector + inspector -s 'ps -o user,start,majflt,pcpu,vsz -p %s' + EOF + + opts.on(" Options:") + + opts.on("-s", "--ps=command", "default: #{OPTIONS[:ps]}", String) { |OPTIONS[:ps]| } + opts.on("-p", "--pidpath=path", "default: #{OPTIONS[:pid_path]}", String) { |OPTIONS[:pid_path]| } + opts.on("-r", "--pattern=pattern", "default: #{OPTIONS[:pattern]}", String) { |OPTIONS[:pattern]| } + + opts.separator "" + + opts.on("-h", "--help", "Show this help message.") { puts opts; exit } + + opts.parse! +end + +Inspector.inspect(OPTIONS[:pid_path], OPTIONS[:pattern]) \ No newline at end of file -- cgit v1.2.3