Module: DohApp

Defined in:
lib/doh/app/home.rb,
lib/doh/app/init.rb,
lib/doh/app/config.rb,
lib/doh/app/options.rb,
lib/doh/app/init_runnable.rb,
lib/doh/app/init_unit_test.rb,
lib/doh/app/activate_logger.rb,
lib/doh/app/activate_database.rb

Defined Under Namespace

Classes: Options

Class Method Summary collapse

Class Method Details

.activate_databaseObject



5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# File 'lib/doh/app/activate_database.rb', line 5

def self.activate_database
  root_cfg = DohApp::config
  return unless root_cfg.fetch('enable_database', true)
  return unless root_cfg.key?('database')
  begin
    require 'mysql'
  rescue LoadError => e
    return
  end
  db_cfg = root_cfg['database']
  require 'doh/mysql'
  require 'doh/mysql/require_dbtypes'
  conn = DohDb::CacheConnector.new(db_cfg['host'], db_cfg['username'], db_cfg['password'], db_cfg['database'] || root_cfg['primary_database'])
  conn.port = db_cfg['port']
  conn.timeout = db_cfg['timeout'].to_i if db_cfg['timeout']
  conn.row_builder = db_cfg['row_builder'] || root_cfg['row_builder']
  DohDb::set_connector_instance(conn)
  DohDb::require_dbtypes
end

.activate_loggerObject



16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
# File 'lib/doh/app/activate_logger.rb', line 16

def self.activate_logger
  root_cfg = DohApp::config
  return unless root_cfg.fetch('enable_logger', true)
  return unless root_cfg.key?('logger')
  logger_cfg = root_cfg['logger']
  require 'doh/logger_configure'

  scheduler = DohLogger::DirectScheduler.new
  intrfc = DohLogger::StandardInterface.new(scheduler)
  Doh::set_logger_interface(intrfc)

  # initialize logfile_name here, so it can be used later in the email acceptors below
  logfile_name = 'none'
  if logger_cfg['enable_file_acceptor']
    acceptor_cfg = logger_cfg['file_acceptor']
    logfile_name = acceptor_cfg['filename']
    if !logfile_name.nil?
      # don't set it
    elsif acceptor_cfg.fetch('unique_filename', false)
      logfile_name = File.basename($PROGRAM_NAME, '.rb') + ".#{Process.pid}" + '.log'
    else
      logfile_name = File.basename($PROGRAM_NAME, '.rb') + '.log'
    end
    logfile_name = File.join(acceptor_cfg['log_directory'], logfile_name) if acceptor_cfg['log_directory']
    logfile = File.new(logfile_name, "w+")
    logfile.sync = true if acceptor_cfg.fetch('flush', false)
    file_acceptor = DohLogger::IOStreamAcceptor.new(logfile)
    file_acceptor.flush_always if acceptor_cfg.fetch('flush', false)
    Doh::log.add_acceptor(translate_logger_level(acceptor_cfg.fetch('severity', 'debug')), file_acceptor, nil, acceptor_cfg['locations_to_exclude'], acceptor_cfg['include_only_locations'])
  end

  if logger_cfg['enable_socket_acceptor']
    acceptor_cfg = logger_cfg['socket_acceptor']
    socket_acceptor = DohLogger::SocketAcceptor.new(acceptor_cfg.fetch('ip_addr', '127.0.0.1'), acceptor_cfg.fetch('port', DohLogger::SocketAcceptor::default_port))
    Doh::log.add_acceptor(translate_logger_level(acceptor_cfg.fetch('severity', 'debug')), socket_acceptor, nil, acceptor_cfg['locations_to_exclude'], acceptor_cfg['include_only_locations'])
  end

  if logger_cfg['enable_stdout_acceptor']
    acceptor_cfg = logger_cfg['stdout_acceptor']
    locations_to_exclude = acceptor_cfg.key?('locations_to_exclude') ? acceptor_cfg['locations_to_exclude'] : ['DohDb']
    Doh::log.add_acceptor(translate_logger_level(acceptor_cfg.fetch('severity', 'debug')), DohLogger::IOStreamAcceptor.new, nil, locations_to_exclude, acceptor_cfg['include_only_locations'])
  end

  if logger_cfg['enable_notify_acceptor']
    acceptor_cfg = logger_cfg['notify_acceptor']
    require 'doh/logger/email_acceptor'
    mail_server = root_cfg['mail_server'] || 'mail.' + get_required_config_value('domain_name', 'mail_server or domain_name required for mail server')
    from_address = root_cfg['smtp_from'] || acceptor_cfg['from_address'] || 'notify@' + get_required_config_value('domain_name', 'from_address or domain_name required for notification email address')
    to_address_list = acceptor_cfg['to_address_list'] || ['root@localhost']
    notify_acceptor = DohLogger::EmailAcceptor.new(mail_server, root_cfg['smtp_port'], from_address, to_address_list, logfile_name, nil, DohLogger::exceptionless_email_format)
    Doh::log.add_acceptor(DohLogger::NOTIFY, notify_acceptor, true, acceptor_cfg['locations_to_exclude'], acceptor_cfg['include_only_locations'])
  end

  if logger_cfg['enable_error_acceptor']
    acceptor_cfg = logger_cfg['error_acceptor']
    require 'doh/logger/email_acceptor'
    mail_server = root_cfg['mail_server'] || 'mail.' + get_required_config_value('domain_name', 'mail_server or domain_name required for mail server')
    from_address = root_cfg['smtp_from'] || acceptor_cfg['from_address'] || 'error@' + get_required_config_value('domain_name', 'from_address or domain_name required for notification email address')
    to_address_list = acceptor_cfg['to_address_list'] || ['root@localhost']
    error_acceptor = DohLogger::EmailAcceptor.new(mail_server, root_cfg['smtp_port'], from_address, to_address_list, logfile_name)
    Doh::log.add_acceptor(DohLogger::ERROR, error_acceptor, nil, acceptor_cfg['locations_to_exclude'], acceptor_cfg['include_only_locations'])
  end
end

.configObject



13
14
15
# File 'lib/doh/app/config.rb', line 13

def self.config
  @@config
end

.enable_notifiesObject



22
23
24
25
26
# File 'lib/doh/app/config.rb', line 22

def self.enable_notifies
  logger_cfg = @@config['logger']
  logger_cfg['enable_notify_acceptor'] = true
  logger_cfg['enable_error_acceptor'] = true
end

.enable_socket_acceptor(port = DohLogger::SocketAcceptor::default_port) ⇒ Object



28
29
30
31
32
# File 'lib/doh/app/config.rb', line 28

def self.enable_socket_acceptor(port = DohLogger::SocketAcceptor::default_port)
  logger_cfg = @@config['logger']
  logger_cfg['enable_socket_acceptor'] = true
  logger_cfg['socket_acceptor']['port'] = port
end

.find_home(dir, max_tries = 20) ⇒ Object



10
11
12
# File 'lib/doh/app/home.rb', line 10

def self.find_home(dir, max_tries = 20)
  @@home = Doh::find_file_in_parents(dir, 'dohapp_home', max_tries = 20)
end

.get_required_config_value(value, desc) ⇒ Object



17
18
19
20
# File 'lib/doh/app/config.rb', line 17

def self.get_required_config_value(value, desc)
  raise "Attempt to get configuration value: #{value.inspect}, but none exists.  #{desc}" if !config.key?(value)
  config[value]
end

.homeObject



5
6
7
8
# File 'lib/doh/app/home.rb', line 5

def self.home
  raise "must call DohApp::find_home before calling DohApp::home" if @@home.nil?
  @@home
end

.init(file_or_directory) ⇒ Object



7
8
9
10
11
12
13
14
15
16
17
18
19
# File 'lib/doh/app/init.rb', line 7

def self.init(file_or_directory)
  @@config = {}
  if File.directory?(file_or_directory)
    find_home(file_or_directory)
  else
    find_home(File.dirname(file_or_directory))
  end
  $LOAD_PATH.push(File.join(DohApp::home, 'lib'))
  $LOAD_PATH.push(DohApp::home)
  require 'doh'
  DohApp::load_config_file('system')
  DohApp::load_config_file('development_environment') unless DohApp::load_config_file('active_environment')
end

.init_runnable(file_or_directory, block = nil) ⇒ Object



60
61
62
63
64
65
66
67
68
69
70
# File 'lib/doh/app/init_runnable.rb', line 60

def self.init_runnable(file_or_directory, block = nil)
  DohApp::init(file_or_directory)
  unless DohApp::load_config_file('active_runnable')
    unless DohApp::load_config_file('development_runnable')
      DohApp::use_default_runnable_development_config
    end
  end
  block.call(DohApp::config) if block
  DohApp::activate_logger
  DohApp::activate_database
end

.init_runnable_dir(file_or_directory, &block) ⇒ Object



72
73
74
# File 'lib/doh/app/init_runnable.rb', line 72

def self.init_runnable_dir(file_or_directory, &block)
  DohApp::init_runnable(file_or_directory, block)
end

.init_runnable_prog(&block) ⇒ Object



76
77
78
# File 'lib/doh/app/init_runnable.rb', line 76

def self.init_runnable_prog(&block)
  DohApp::init_runnable($PROGRAM_NAME, block)
end

.init_runnable_pwd(&block) ⇒ Object



80
81
82
# File 'lib/doh/app/init_runnable.rb', line 80

def self.init_runnable_pwd(&block)
  init_runnable(Dir.pwd, block)
end

.init_unit_test(file_or_directory) ⇒ Object



16
17
18
19
20
21
22
23
24
# File 'lib/doh/app/init_unit_test.rb', line 16

def self.init_unit_test(file_or_directory)
  DohApp::init(file_or_directory)
  unless DohApp::load_config_file('active_unit_test')
    unless DohApp::load_config_file('development_unit_test')
      DohApp::use_default_unit_test_development_config
    end
  end
  DohApp::config['testing'] = true
end

.load_config_file(name) ⇒ Object



6
7
8
9
10
11
# File 'lib/doh/app/config.rb', line 6

def self.load_config_file(name)
  path = File.join(DohApp::home, 'config', name) + '.rb'
  return false unless File.exist?(path)
  require(path)
  true
end

.translate_logger_level(str) ⇒ Object



7
8
9
10
11
12
13
14
# File 'lib/doh/app/activate_logger.rb', line 7

def self.translate_logger_level(str)
  return DohLogger::DEBUG if str == 'debug' || str.empty?
  return DohLogger::INFO if str == 'info'
  return DohLogger::WARN if str == 'warn'
  return DohLogger::NOTIFY if str == 'notify'
  return DohLogger::ERROR if str == 'error'
  return DohLogger::FATAL if str == 'fatal'
end

.use_default_runnable_development_configObject



33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
# File 'lib/doh/app/init_runnable.rb', line 33

def self.use_default_runnable_development_config
  root_cfg = DohApp::config
  logger_cfg = {}

  logger_cfg['file_acceptor'] = {'unique_filename' => false, 'flush' => true, 'severity' => 'debug'}
  logger_cfg['enable_file_acceptor'] = true

  email_acceptor_cfg = {'to_address_list' => ['root@localhost']}
  logger_cfg['notify_acceptor'] = email_acceptor_cfg
  logger_cfg['error_acceptor'] = email_acceptor_cfg.dup
  logger_cfg['enable_notify_acceptor'] = false
  logger_cfg['enable_error_acceptor'] = false
  logger_cfg['stdout_acceptor'] = {'severity' => 'debug'}
  logger_cfg['enable_stdout_acceptor'] = true
  logger_cfg['socket_acceptor'] = {'severity' => 'debug'}
  logger_cfg['enable_socket_acceptor'] = false

  root_cfg['logger'] = logger_cfg
  root_cfg['enable_logger'] = true
  root_cfg['host_files_directory'] = '~/.dohruby'
  root_cfg['mail_server'] = 'localhost'
  root_cfg['database'] = {'username' => 'root', 'host' => 'localhost'}
  root_cfg['environment'] = 'development'

  Doh::set_source_ip('127.0.0.1')
end

.use_default_runnable_production_configObject



7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# File 'lib/doh/app/init_runnable.rb', line 7

def self.use_default_runnable_production_config
  root_cfg = DohApp::config
  logger_cfg = {}

  logger_cfg['file_acceptor'] = {'unique_filename' => true, 'flush' => false, 'severity' => 'debug'}
  logger_cfg['enable_file_acceptor'] = true

  email_acceptor_cfg = {'to_address_list' => ["notify@#{DohApp::config['domain_name']}"]}
  logger_cfg['notify_acceptor'] = email_acceptor_cfg
  logger_cfg['error_acceptor'] = email_acceptor_cfg.dup
  logger_cfg['enable_notify_acceptor'] = true
  logger_cfg['enable_error_acceptor'] = true
  logger_cfg['stdout_acceptor'] = {'severity' => 'debug'}
  logger_cfg['enable_stdout_acceptor'] = false
  logger_cfg['socket_acceptor'] = {'severity' => 'info'}
  logger_cfg['enable_socket_acceptor'] = false

  root_cfg['logger'] = logger_cfg
  root_cfg['enable_logger'] = true
  root_cfg['host_files_directory'] = '/etc'
  root_cfg['environment'] = 'production'

  require 'doh/util/internal_ip'
  Doh::set_source_ip(Doh::internal_ip)
end

.use_default_unit_test_development_configObject



5
6
7
8
9
# File 'lib/doh/app/init_unit_test.rb', line 5

def self.use_default_unit_test_development_config
  DohApp::config['database'] = {'username' => 'root', 'host' => 'localhost'}
  DohApp::config['include_production_tests'] = false
  DohApp::config['environment'] = 'development'
end

.use_default_unit_test_production_configObject



11
12
13
14
# File 'lib/doh/app/init_unit_test.rb', line 11

def self.use_default_unit_test_production_config
  DohApp::config['include_production_tests'] = true
  DohApp::config['environment'] = 'production'
end