class Eye::Config

Attributes

applications[R]
settings[R]

Public Class Methods

new(settings = {}, applications = {}) click to toggle source
# File lib/eye/config.rb, line 5
def initialize(settings = {}, applications = {})
  @settings = settings
  @applications = applications
end

Public Instance Methods

application_names() click to toggle source
# File lib/eye/config.rb, line 105
def application_names
  applications.keys
end
delete_app(name) click to toggle source
# File lib/eye/config.rb, line 109
def delete_app(name)
  applications.delete(name)
end
delete_group(name) click to toggle source
# File lib/eye/config.rb, line 113
def delete_group(name)
  applications.each do |_, app_cfg|
    (app_cfg[:groups] || {}).delete(name)
  end
end
delete_process(name) click to toggle source
# File lib/eye/config.rb, line 119
def delete_process(name)
  applications.each do |_, app_cfg|
    (app_cfg[:groups] || {}).each do |_, gr_cfg|
      (gr_cfg[:processes] || {}).delete(name)
    end
  end
end
each_process(&block) click to toggle source
# File lib/eye/config.rb, line 97
def each_process(&block)
  applications.each do |_, app_cfg|
    (app_cfg[:groups] || {}).each do |_, gr_cfg|
      (gr_cfg[:processes] || {}).each_value(&block)
    end
  end
end
merge(other_config) click to toggle source
# File lib/eye/config.rb, line 10
def merge(other_config)
  new_settings = {}
  Eye::Utils.deep_merge!(new_settings, @settings)
  Eye::Utils.deep_merge!(new_settings, other_config.settings)
  Eye::Config.new(new_settings, @applications.merge(other_config.applications))
end
merge!(other_config) click to toggle source
# File lib/eye/config.rb, line 17
def merge!(other_config)
  Eye::Utils.deep_merge!(@settings, other_config.settings)
  @applications.merge!(other_config.applications)
end
to_h() click to toggle source
# File lib/eye/config.rb, line 22
def to_h
  h = {}
  h[:settings] = @settings
  if Eye.respond_to?(:parsed_default_app)
    d = Eye.parsed_default_app
    h[:defaults] = d ? d.config : {}
  end
  h[:applications] = @applications
  h
end
transform!() click to toggle source
# File lib/eye/config.rb, line 76
def transform!
  # transform syslog option
  each_process do |process|
    out = process[:stdout] && process[:stdout].start_with?(':syslog')
    err = process[:stderr] && process[:stderr].start_with?(':syslog')
    next unless err || out

    redir = err ? '2>&1' : ''
    process[:stdout] = nil if out
    process[:stderr] = nil if err

    escaped_start_command = process[:start_command].to_s.gsub(%{"}, %{\\"})

    names = [process[:application], process[:group] == '__default__' ? nil : process[:group], process[:name]].compact
    logger = "logger -t \"#{names.join(':')}\""

    process[:start_command] = %{sh -c "#{escaped_start_command} #{redir} | #{logger}"}
    process[:use_leaf_child] = true if process[:daemonize]
  end
end
validate!(validate_apps = []) click to toggle source

raise an error if config wrong

# File lib/eye/config.rb, line 34
def validate!(validate_apps = [])
  # Check blank pid_files
  no_pid_file = []
  each_process { |c| no_pid_file << c if c[:pid_file].blank? }
  if no_pid_file.any?
    raise Eye::Dsl::Error, "blank pid_file for: #{no_pid_file.map { |c| c[:name] } * ', '}"
  end

  # Check duplicates of the full pid_file

  dupl_pids = Hash.new(0)
  each_process do |o|
    ex_pid_file = Eye::System.normalized_file(o[:pid_file], o[:working_dir])
    dupl_pids[ex_pid_file] += 1
  end
  dupl_pids = dupl_pids.select { |_, v| v > 1 }

  if dupl_pids.any?
    raise Eye::Dsl::Error, "duplicate pid_files: #{dupl_pids.inspect}"
  end

  # Check duplicates of the full_name
  dupl_names = Hash.new(0)
  each_process do |o|
    full_name = "#{o[:application]}:#{o[:group]}:#{o[:name]}"
    dupl_names[full_name] += 1
  end
  dupl_names = dupl_names.select { |_, v| v > 1 }

  if dupl_names.any?
    raise Eye::Dsl::Error, "duplicate names: #{dupl_names.inspect}"
  end

  # validate processes with their own validate
  each_process do |process_cfg|
    Eye::Process.validate process_cfg, validate_apps.include?(process_cfg[:application])
  end

  # just to be sure ENV was not removed
  ENV[''] rescue raise Eye::Dsl::Error, "ENV is not a hash '#{ENV.inspect}'"
end