class Sv::Config

Attributes

app_dir[R]

Public Class Methods

new(app_dir) click to toggle source
# File lib/sv/config.rb, line 12
def initialize(app_dir)
  @app_dir = app_dir
  @instances = {}
  @working_dir = app_dir
  @namespace = SecureRandom.hex(3)
end

Public Instance Methods

jobs() click to toggle source
# File lib/sv/config.rb, line 31
def jobs
  @jobs ||= begin
    load_from_file
    jobs_map.values
  end
end
logfile() click to toggle source
# File lib/sv/config.rb, line 27
def logfile
  @logfile ||= "#{app_dir}/log/supervisord.log"
end
pidfile() click to toggle source
# File lib/sv/config.rb, line 23
def pidfile
  @pidfile ||= "#{app_dir}/tmp/pids/supervisor.pid"
end
socket_path() click to toggle source
# File lib/sv/config.rb, line 19
def socket_path
  @socket_path ||= "#{app_dir}/tmp/sockets/supervisor.sock"
end

Private Instance Methods

instances(instances_map) click to toggle source
# File lib/sv/config.rb, line 44
def instances(instances_map)
  @instances = instances_map
end
job(name, &block) click to toggle source
# File lib/sv/config.rb, line 48
def job(name, &block)
  name = name.to_sym
  j = jobs_map[name] || Job.new(name)
  j.instance_eval &block
  jobs_map[name] = j
end
jobs_map() click to toggle source
# File lib/sv/config.rb, line 40
def jobs_map
  @jobs_map ||= {}
end
load_from_file() click to toggle source
# File lib/sv/config.rb, line 59
def load_from_file
  load_jobs("#{app_dir}/config/jobs.yml", optional: true)
  read_config("#{app_dir}/config/jobs.rb", optional: true)
  read_config("#{app_dir}/config/sv.rb")
  validate_instances!
  set_instances
  set_working_dir
  set_namespace
end
load_jobs(path, optional: false) click to toggle source
# File lib/sv/config.rb, line 104
def load_jobs(path, optional: false)
  if not File.readable? path
    raise ::Sv::Error, "config file #{path} missing" if not optional
    return
  end
  require 'yaml'
  job_definitions = YAML.load_file(path)
  job_definitions.each do |j|
    name = j['name'].to_sym
    job = Job.new(name)
    job.update(j)
    jobs_map[name] = job
  end
end
read_config(path, optional: false) click to toggle source
# File lib/sv/config.rb, line 96
def read_config(path, optional: false)
  if not File.readable? path
    raise ::Sv::Error, "config file #{path} missing" if not optional
    return
  end
  instance_eval File.read(path), path
end
set_instances() click to toggle source
# File lib/sv/config.rb, line 78
def set_instances
  jobs_map.each do |name, job|
    job.numprocs @instances[name] if @instances.key? name
  end
end
set_namespace() click to toggle source
# File lib/sv/config.rb, line 90
def set_namespace
  jobs_map.each do |name, job|
    job.namespace = @namespace
  end
end
set_working_dir() click to toggle source
# File lib/sv/config.rb, line 84
def set_working_dir
  jobs_map.values.each do |job|
    job.working_dir || job.working_dir(@working_dir)
  end
end
validate_instances!() click to toggle source
# File lib/sv/config.rb, line 69
def validate_instances!
  invalid_jobs = []
  @instances.each do |name, count|
    invalid_jobs << name if not jobs_map.has_key?(name)
  end
  return if invalid_jobs.empty?
  raise Error, "invalid jobs found in sv.rb: #{invalid_jobs}"
end
working_dir(working_dir) click to toggle source
# File lib/sv/config.rb, line 55
def working_dir(working_dir)
  @working_dir = working_dir
end