1
0
Fork 0
mirror of https://github.com/puma/puma.git synced 2022-11-09 13:48:40 -05:00

Added support for cleaning pid files on start, status, and executing a command on a single port.

git-svn-id: svn+ssh://rubyforge.org/var/svn/mongrel/trunk@517 19e92222-5c0b-0410-8929-a290d50e31e9
This commit is contained in:
bktaylor 2007-01-26 01:49:53 +00:00
parent 054c5e2d31
commit 173ad80369

View file

@ -6,7 +6,10 @@ module Cluster
module ExecBase
include Mongrel::Command::Base
STATUS_OK = 0
STATUS_MISSING = 2
def validate
valid_exists?(@config_file, "Configuration file does not exist. Run mongrel_rails cluster::configure.")
return @valid
@ -21,34 +24,44 @@ module Cluster
}
conf = YAML.load_file(@config_file)
@options.merge! conf if conf
@pid_file = @options["pid_file"].split(".")
start_port = end_port = @only
start_port ||= @options["port"].to_i
end_port ||= start_port + @options["servers"] - 1
@ports = (start_port..end_port).to_a
end
def port_pid_file(port)
"#{@pid_file[0]}.#{port}.#{@pid_file[1]}"
end
def start
read_options
port = @options["port"].to_i - 1
pid = @options["pid_file"].split(".")
puts "Starting #{@options["servers"]} Mongrel servers..."
1.upto(@options["servers"].to_i) do |i|
argv = [ "mongrel_rails" ]
argv << "start"
argv << "-d"
argv << "-e #{@options["environment"]}" if @options["environment"]
argv << "-p #{port+i}"
argv << "-a #{@options["address"]}" if @options["address"]
argv << "-l #{@options["log_file"]}" if @options["log_file"]
argv << "-P #{pid[0]}.#{port+i}.#{pid[1]}"
argv << "-c #{@options["cwd"]}" if @options["cwd"]
argv << "-t #{@options["timeout"]}" if @options["timeout"]
argv << "-m #{@options["mime_map"]}" if @options["mime_map"]
argv << "-r #{@options["docroot"]}" if @options["docroot"]
argv << "-n #{@options["num_procs"]}" if @options["num_procs"]
argv << "-B" if @options["debug"]
argv << "-S #{@options["config_script"]}" if @options["config_script"]
argv << "--user #{@options["user"]}" if @options["user"]
argv << "--group #{@options["group"]}" if @options["group"]
argv << "--prefix #{@options["prefix"]}" if @options["prefix"]
cmd = argv.join " "
argv = [ "mongrel_rails" ]
argv << "start"
argv << "-d"
argv << "-e #{@options["environment"]}" if @options["environment"]
argv << "-a #{@options["address"]}" if @options["address"]
argv << "-l #{@options["log_file"]}" if @options["log_file"]
argv << "-c #{@options["cwd"]}" if @options["cwd"]
argv << "-t #{@options["timeout"]}" if @options["timeout"]
argv << "-m #{@options["mime_map"]}" if @options["mime_map"]
argv << "-r #{@options["docroot"]}" if @options["docroot"]
argv << "-n #{@options["num_procs"]}" if @options["num_procs"]
argv << "-B" if @options["debug"]
argv << "-S #{@options["config_script"]}" if @options["config_script"]
argv << "--user #{@options["user"]}" if @options["user"]
argv << "--group #{@options["group"]}" if @options["group"]
argv << "--prefix #{@options["prefix"]}" if @options["prefix"]
cmd = argv.join " "
puts "Starting #{@ports.length} Mongrel servers..."
@ports.each do |port|
cmd += " -p #{port} -P #{port_pid_file(port)}"
puts cmd if @verbose
output = `#{cmd}`
unless $?.success?
@ -60,16 +73,17 @@ module Cluster
def stop
read_options
port = @options["port"].to_i - 1
pid = @options["pid_file"].split(".")
puts "Stopping #{@options["servers"]} Mongrel servers..."
1.upto(@options["servers"].to_i) do |i|
argv = [ "mongrel_rails" ]
argv << "stop"
argv << "-P #{pid[0]}.#{port+i}.#{pid[1]}"
argv << "-c #{@options["cwd"]}" if @options["cwd"]
argv << "-f" if @force
cmd = argv.join " "
argv = [ "mongrel_rails" ]
argv << "stop"
argv << "-c #{@options["cwd"]}" if @options["cwd"]
argv << "-f" if @force
cmd = argv.join " "
puts "Stopping #{@ports.length} Mongrel servers..."
@ports.each do |port|
cmd += " -P #{port_pid_file(port)}"
puts cmd if @verbose
output = `#{cmd}`
unless $?.success?
@ -78,6 +92,44 @@ module Cluster
end
end
end
def clean
read_options
puts "Cleaning #{@ports.length} pid files..."
Dir.chdir @options["cwd"] if @options["cwd"]
@ports.each do |port|
pid_file = port_pid_file(port)
puts "Removing {pid_file}!" if @verbose
File.unlink(pid_file) if File.exists?(pid_file)
end
end
def status
read_options
puts "Checking #{@ports.length} Mongrel servers..."
Dir.chdir @options["cwd"] if @options["cwd"]
status = STATUS_OK
@ports.each do |port|
pid_file = port_pid_file(port)
if File.exists?(pid_file)
pid = File.read(pid_file)
ps_output = `ps -o cmd= -p #{pid}`
status = STATUS_MISSING unless (ps_output =~ /mongrel_rails/)
msg = status == STATUS_OK ? "Found dog: #{port}" : "Lost dog: #{port}"
else
msg = "Missing pid: #{pid_file}"
status = STATUS_MISSING
end
puts msg
end
return status
end
end
@ -87,11 +139,14 @@ module Cluster
def configure
options [
['-C', '--config PATH', "Path to cluster configuration file", :@config_file, "config/mongrel_cluster.yml"],
['-v', '--verbose', "Print all called commands and output.", :@verbose, false]
['-v', '--verbose', "Print all called commands and output.", :@verbose, false],
['', '--clean', "Remove pid_file before starting", :@clean, false],
['', '--only PORT', "Port number of cluster member", :@only, nil]
]
end
def run
clean if @clean
start
end
end
@ -103,7 +158,8 @@ module Cluster
options [
['-C', '--config PATH', "Path to cluster configuration file", :@config_file, "config/mongrel_cluster.yml"],
['-f', '--force', "Force the shutdown.", :@force, false],
['-v', '--verbose', "Print all called commands and output.", :@verbose, false]
['-v', '--verbose', "Print all called commands and output.", :@verbose, false],
['', '--only PORT', "Port number of cluster member", :@only, nil]
]
end
@ -119,7 +175,8 @@ module Cluster
options [
['-C', '--config PATH', "Path to cluster configuration file", :@config_file, "config/mongrel_cluster.yml"],
['-f', '--force', "Force the shutdown.", :@force, false],
['-v', '--verbose', "Print all called commands and output.", :@verbose, false]
['-v', '--verbose', "Print all called commands and output.", :@verbose, false],
['', '--only PORT', "Port number of cluster member", :@only, nil]
]
end
@ -189,5 +246,22 @@ module Cluster
File.open(@config_file,"w") {|f| f.write(@options.to_yaml)}
end
end
class Status < GemPlugin::Plugin "/commands"
include ExecBase
def configure
options [
['-C', '--config PATH', "Path to cluster configuration file", :@config_file, "config/mongrel_cluster.yml"],
['-v', '--verbose', "Print all called commands and output.", :@verbose, false],
['', '--only PORT', "Port number of cluster member", :@only, nil]
]
end
def run
status
end
end
end