class PuppetForgeServer::Server

Public Instance Methods

announce(options, backends) click to toggle source
# File lib/puppet_forge_server/server.rb, line 68
def announce(options, backends)
  options = options.clone
  options.default = 'default'
  @log.info " +- Daemonizing: #{options[:daemonize]}"
  @log.info " |- Port: #{options[:port]}"
  @log.info " |- Host: #{options[:host]}"
  @log.info " |- Pidfile: #{options[:pidfile]}" if options[:pidfile]
  @log.info " |- Server: #{options[:server]}"
  @log.info ' `- Backends:'
  backends.each do |backend|
    @log.info "    - #{backend.inspect}"
  end
end
build(backends, webui_root) click to toggle source
# File lib/puppet_forge_server/server.rb, line 58
def build(backends, webui_root)
  Rack::Mount::RouteSet.new do |set|
    set.add_route PuppetForgeServer::App::Frontend.new(webui_root)
    set.add_route PuppetForgeServer::App::Generic.new
    set.add_route PuppetForgeServer::App::Version1.new(backends)
    set.add_route PuppetForgeServer::App::Version2.new(backends)
    set.add_route PuppetForgeServer::App::Version3.new(backends)
  end
end
go(args) click to toggle source
# File lib/puppet_forge_server/server.rb, line 24
def go(args)
  # Initial logger in case error occurs before logging options have been processed
  @log = PuppetForgeServer::Logger.get
  begin
    options = parse_options(args)
    @log = logging(options)
    configure_cache(options[:ram_cache_ttl], options[:ram_cache_size])
    backends = backends(options)
    server = build(backends, options[:webui_root])
    announce(options, backends)
    start(server, options)
  rescue PuppetForgeServer::Errors::Expected => error
    @log.error error
  end
end
logging(options) click to toggle source
# File lib/puppet_forge_server/server.rb, line 40
def logging(options)
  if options[:log_dir]
    FileUtils.mkdir_p options[:log_dir]
    server_loggers = [File.join(options[:log_dir], 'server.log')]
    access_loggers = [File.join(options[:log_dir], 'access.log')]
    if options[:debug]
      server_loggers << STDERR
      access_loggers << STDERR
    end
    PuppetForgeServer::Logger.set({:server => server_loggers, :access => access_loggers})
  end
  if options[:debug]
    PuppetForgeServer::Logger.get(:server).level = ::Logger::DEBUG
    PuppetForgeServer::Logger.get(:access).level = ::Logger::DEBUG
  end
  PuppetForgeServer::Logger.get
end
start(server, options) click to toggle source
# File lib/puppet_forge_server/server.rb, line 82
def start(server, options)
  FileUtils.mkdir_p File.dirname(options[:pidfile]) if options[:pidfile]
  Rack::Server.start(
      :app => server,
      :Host => options[:host],
      :Port => options[:port],
      :server => options[:server],
      :daemonize => options[:daemonize],
      :pid => options[:pidfile]
  )
end

Private Instance Methods

backends(options) click to toggle source
# File lib/puppet_forge_server/server.rb, line 95
def backends(options)
  # Add directory backend for serving cached modules in case proxy flips over
  backends = options[:backend]['Proxy'] && ! options[:backend]['Proxy'].empty? ? [PuppetForgeServer::Backends.const_get('Directory').new(options[:cache_basedir], true)] : []
  backends << options[:backend].map do |type, typed_backends|
    typed_backends.map do |url|
      case type
        when 'Proxy'
          @log.info "Detecting API version for #{url}..."
          PuppetForgeServer::Backends.const_get("#{type}V#{get_api_version(url)}").new(url.chomp('/'), options[:cache_basedir])
        else
          PuppetForgeServer::Backends.const_get(type).new(url)
      end
    end
  end
  backends.flatten.sort_by { |backend| backend.PRIORITY }
end