class Cumuli::Spawner::App

Constants

SIGNALS

Attributes

app_dir[RW]
env[RW]
log_dir[RW]

Public Class Methods

new(options={}) click to toggle source
# File lib/cumuli/spawner/app.rb, line 8
def initialize(options={})
  @env = options[:env]
  @log_dir = options[:log_dir] || "#{Dir.pwd}/log"
  @app_dir = options[:app_dir] || Dir.pwd
end

Public Instance Methods

apps() click to toggle source
# File lib/cumuli/spawner/app.rb, line 41
def apps
  @apps ||= ProjectManager::Manager.new(app_dir).projects
end
foreman_process() click to toggle source
# File lib/cumuli/spawner/app.rb, line 37
def foreman_process
  @foreman_process ||= Spawner::ForemanProc.new(env, log_dir)
end
listen_for_signals() click to toggle source
# File lib/cumuli/spawner/app.rb, line 53
def listen_for_signals
  SIGNALS.each do |signal|
    trap(signal) do
      puts "#{self.class}: trapped signal #{signal} in #{Process.pid} ... stopping"
      stop
    end
  end
end
log_and_wait(app, direction) click to toggle source
# File lib/cumuli/spawner/app.rb, line 70
def log_and_wait(app, direction)
  logger.print "#{direction}: waiting for app named '#{app.name}' at #{app.url}"
  app.send("wait_for_#{direction}")
  logger.print "#{direction}: application '#{app.name}' on #{app.url} complete"
  logger.add_space
rescue Exception => e
  stop
  raise e
end
logger() click to toggle source
# File lib/cumuli/spawner/app.rb, line 33
def logger
  @logger = StdoutLogger.new
end
pid() click to toggle source
# File lib/cumuli/spawner/app.rb, line 49
def pid
  foreman_process.group_id
end
process_pids() click to toggle source
# File lib/cumuli/spawner/app.rb, line 45
def process_pids
  PS.new.family
end
start() click to toggle source
# File lib/cumuli/spawner/app.rb, line 14
def start
  return if foreman_process.started?

  Dir.chdir(app_dir) do
    listen_for_signals
    logger.print "Starting ..."
    foreman_process.start
    wait_for_apps
  end
end
stop() click to toggle source
# File lib/cumuli/spawner/app.rb, line 25
def stop
  if foreman_process.started?
    foreman_process.stop
    wait_for_apps('stop')
    @foreman_process = nil
  end
end
wait_for_apps(direction = 'start') click to toggle source
# File lib/cumuli/spawner/app.rb, line 62
def wait_for_apps(direction = 'start')
  logger.add_space
  apps.each do |app|
    log_and_wait(app, direction)
  end
  logger.add_space
end