Parent

Class/Module Index [+]

Quicksearch

PhusionPassenger::AdminTools::Instance

Constants

STALE_TIMEOUT

Attributes

name[R]
path[R]
properties[R]
server_software[R]
state[R]

Public Class Methods

new(path) click to toggle source
# File lib/phusion_passenger/admin_tools/instance.rb, line 35
def initialize(path)
  @path = path
  # Possible states:
  #
  # * :good - Everything is good. But the Watchdog process that created
  #   it might have died. In that case, the directory should be cleaned up.
  #   Use `locked?` to check.
  #
  # * :not_finalized - The instance directory hasn't been finalized yet,
  #   so we can't read any information from it. It is possible that the
  #   process that has created it has died, i.e. that it will never
  #   become finalized. In that case, the directory should be cleaned up.
  #   Use `stale?` to check.
  #
  # * :structure_version_unsupported - The properties file advertised a
  #   structure version that we don't support. We can't read any
  #   information from it.
  #
  # * :corrupted - The instance directory is corrupted in some way.
  @state = nil

  reload_properties
end

Public Instance Methods

core_pid() click to toggle source
# File lib/phusion_passenger/admin_tools/instance.rb, line 110
def core_pid
  @core_pid ||= File.read("#{@path}/core.pid").to_i
end
full_admin_password() click to toggle source
# File lib/phusion_passenger/admin_tools/instance.rb, line 114
def full_admin_password
  @full_admin_password ||= File.read("#{@path}/full_admin_password.txt")
end
http_request(socket_path, request) click to toggle source
# File lib/phusion_passenger/admin_tools/instance.rb, line 89
def http_request(socket_path, request)
  sock = Net::BufferedIO.new(UNIXSocket.new("#{@path}/#{socket_path}"))
  begin
    request.exec(sock, "1.1", request.path)

    done = false
    while !done
      response = Net::HTTPResponse.read_new(sock)
      done = !response.kind_of?(Net::HTTPContinue)
    end

    response.reading_body(sock, request.response_body_permitted?) do
      # Nothing
    end
  ensure
    sock.close
  end

  return response
end
locked?() click to toggle source
# File lib/phusion_passenger/admin_tools/instance.rb, line 59
def locked?
  if defined?(File::LOCK_EX)
    begin
      !File.open("#{@path}/lock", "r") do |f|
        f.flock(File::LOCK_EX | File::LOCK_NB)
      end
    rescue Errno::ENOENT
      false
    end
  else
    # Solaris :-(
    # Since using fcntl locks in Ruby is a huge pain,
    # we'll fallback to checking the watchdog PID.
    watchdog_alive?
  end
end
read_only_admin_password() click to toggle source
# File lib/phusion_passenger/admin_tools/instance.rb, line 118
def read_only_admin_password
  @read_only_admin_password ||= File.read("#{@path}/read_only_admin_password.txt")
end
stale?() click to toggle source
# File lib/phusion_passenger/admin_tools/instance.rb, line 76
def stale?
  stat = File.stat(@path)
  if stat.mtime < Time.now - STALE_TIMEOUT
    !locked?
  else
    false
  end
end
watchdog_alive?() click to toggle source
# File lib/phusion_passenger/admin_tools/instance.rb, line 85
def watchdog_alive?
  process_is_alive?(@watchdog_pid)
end

[Validate]

Generated with the Darkfish Rdoc Generator 2.