Skip to content

Instantly share code, notes, and snippets.

@nofxx
Created September 6, 2009 10:40
Show Gist options
  • Save nofxx/181752 to your computer and use it in GitHub Desktop.
Save nofxx/181752 to your computer and use it in GitHub Desktop.
#
# Nanite rake tasks [start, stop, stat]
#
namespace :nanites do
NANITES = Dir.glob("nanite/*").map {|d| d.split("/")[1] }
SLEEP_TIME = RAILS_ENV == 'production' ? 1 : 3
desc "Start nanites"
task :start, [:nanite] do |t, nanite|
#raise RuntimeError, "Nanite is already running." if nanite_running?
for nanite in get_nanites(nanite)
if nanite_running? nanite
puts "#{nanite.capitalize} already running..."; next
end
print "#{nanite.capitalize} starting.. "
system "nanite-agent --token #{nanite} --daemonize --nanite #{nanite_dir(nanite)} --pid-dir #{nanite_pid_dir} --log-dir #{nanite_log_dir}" # &"
sleep(SLEEP_TIME)
if nanite_running? nanite
puts "done (pid #{nanite_pid(nanite)})."
else
puts "FAIL .. check logs."
end
end
end
desc "Stop Nanites"
task :stop, [:nanite] do |t, nanite|
#raise RuntimeError, "Nanite isn't running." unless nanite_running?
for nanite in get_nanites(nanite)
unless nanite_running? nanite
puts "#{nanite.capitalize} not running.."; next
end
print "#{nanite.capitalize} kill.. "
system "kill #{nanite_pid(nanite)}"
sleep(SLEEP_TIME)
if nanite_running? nanite
puts "FAIL .. check logs."
else
puts "done"
end
end
end
desc "Check Nanites"
task :stat, [:nanite] do |t, nanite|
for nanite in get_nanites(nanite)
if nanite_running? nanite
puts "#{nanite.capitalize} .. OK"; next
end
puts "#{nanite.capitalize} .. NOT RUNNING .."
end
end
desc "Restart Nanite server"
task :restart => [:stop, :start]
end
def get_nanites(p)
p[:nanite] ? NANITES.select { |n| n == p[:nanite] } : NANITES
end
def nanite_dir(nanite)
File.join(RAILS_ROOT, "nanite", nanite)
end
def nanite_pid(nanite)
`cat #{nanite_pid_dir}/nanite.nanite-#{nanite}.pid`.to_i
end
def nanite_pid_dir
File.join(RAILS_ROOT, "tmp", "pids")
end
def nanite_log_dir
File.join(RAILS_ROOT, "log")#, "nanite.log")
end
def nanite_running?(nanite)
if File.exists?(nanite_pid_dir + "/nanite.nanite-#{nanite}.pid")
process_check = `ps -p #{nanite_pid(nanite)} | wc -l`
nanite_pid(nanite) && process_check.to_i > 1
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment