class DockerBoss::CLI

Public Instance Methods

engine() click to toggle source
# File lib/docker_boss/cli.rb, line 64
def engine
  @engine ||= begin
    engine = DockerBoss::Engine.new(options, @config)
    engine
  end
end
once() click to toggle source
# File lib/docker_boss/cli.rb, line 16
def once
  setup_logging
  read_config
  begin
    engine.refresh_and_trigger
  rescue Docker::Error::DockerError => e
    DockerBoss.logger.fatal "Error communicating with Docker: #{e.message}"
    exit 1
  end
end
read_config() click to toggle source
# File lib/docker_boss/cli.rb, line 87
def read_config
  begin
    @config = YAML.load_file(options[:config])
  rescue SyntaxError => e
    DockerBoss.logger.fatal "Error loading config: #{e.message}"
    exit 1
  end
end
setup_logging() click to toggle source
# File lib/docker_boss/cli.rb, line 71
def setup_logging
  case options[:log]
  when "syslog"
    @logger = Syslog::Logger.new('docker-boss')
  when "-"
    @logger = Logger.new(STDOUT)
  else
    @logger = Logger.new(options[:log])
  end

  @logger.level = options[:debug] ? Logger::DEBUG : Logger::INFO
  DockerBoss.logger=(@logger)

  DockerBoss.logger.info "DockerBoss version #{DockerBoss::VERSION} starting up"
end
watch() click to toggle source
# File lib/docker_boss/cli.rb, line 33
def watch
  setup_logging
  read_config

  thw = engine.event_loop

  Daemons.daemonize if options[:daemonize]

  begin
    engine.refresh_and_trigger
    thw.next_wait.join
  rescue Docker::Error::DockerError => e
    DockerBoss.logger.fatal "Error communicating with Docker: #{e.message}"
    exit 1
  rescue SignalException => e
    case Signal.signame(e.signo)
    when "TERM", "INT"
      DockerBoss.logger.info "Received SIGTERM/SIGINT, shutting down."
      exit 0
    else
      DockerBoss.logger.fatal "Fatal unhandled signal in event loop: #{Signal.signame(e.signo)}"
      e.backtrace.each { |line| DockerBoss.logger.fatal "    #{line}" }
    end
  rescue Exception => e
    DockerBoss.logger.fatal "Fatal unhandled exception in event loop: #{e.class.name} -> #{e.message}"
    e.backtrace.each { |line| DockerBoss.logger.fatal "    #{line}" }
    exit 1
  end
end