Class: Appsignal::Config

Inherits:
Object
  • Object
show all
Defined in:
lib/appsignal/config.rb

Constant Summary collapse

DEFAULT_CONFIG =
{
  :debug                          => false,
  :ignore_errors                  => [],
  :ignore_actions                 => [],
  :send_params                    => true,
  :endpoint                       => 'https://push.appsignal.com',
  :instrument_net_http            => true,
  :instrument_redis               => true,
  :instrument_sequel              => true,
  :skip_session_data              => false,
  :enable_frontend_error_catching => false,
  :frontend_error_catching_path   => '/appsignal_error_catcher',
  :enable_allocation_tracking     => true,
  :enable_gc_instrumentation      => false,
  :running_in_container           => false,
  :enable_host_metrics            => false
}.freeze
ENV_TO_KEY_MAPPING =
{
  'APPSIGNAL_ACTIVE'                         => :active,
  'APPSIGNAL_PUSH_API_KEY'                   => :push_api_key,
  'APPSIGNAL_APP_NAME'                       => :name,
  'APPSIGNAL_PUSH_API_ENDPOINT'              => :endpoint,
  'APPSIGNAL_FRONTEND_ERROR_CATCHING_PATH'   => :frontend_error_catching_path,
  'APPSIGNAL_DEBUG'                          => :debug,
  'APPSIGNAL_LOG_PATH'                       => :log_path,
  'APPSIGNAL_INSTRUMENT_NET_HTTP'            => :instrument_net_http,
  'APPSIGNAL_INSTRUMENT_REDIS'               => :instrument_redis,
  'APPSIGNAL_INSTRUMENT_SEQUEL'              => :instrument_sequel,
  'APPSIGNAL_SKIP_SESSION_DATA'              => :skip_session_data,
  'APPSIGNAL_ENABLE_FRONTEND_ERROR_CATCHING' => :enable_frontend_error_catching,
  'APPSIGNAL_IGNORE_ERRORS'                  => :ignore_errors,
  'APPSIGNAL_IGNORE_ACTIONS'                 => :ignore_actions,
  'APPSIGNAL_HTTP_PROXY'                     => :http_proxy,
  'APPSIGNAL_ENABLE_ALLOCATION_TRACKING'     => :enable_allocation_tracking,
  'APPSIGNAL_ENABLE_GC_INSTRUMENTATION'      => :enable_gc_instrumentation,
  'APPSIGNAL_RUNNING_IN_CONTAINER'           => :running_in_container,
  'APPSIGNAL_WORKING_DIR_PATH'               => :working_dir_path,
  'APPSIGNAL_ENABLE_HOST_METRICS'            => :enable_host_metrics
}.freeze

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(root_path, env, initial_config = {}, logger = Appsignal.logger) ⇒ Config

Returns a new instance of Config.



51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
# File 'lib/appsignal/config.rb', line 51

def initialize(root_path, env, initial_config={}, logger=Appsignal.logger)
  @root_path      = root_path
  @env            = env.to_s
  @initial_config = initial_config
  @logger         = logger
  @valid          = false

  # Initial config
  @config_hash = DEFAULT_CONFIG.merge(initial_config)

  # Load config from environment variables
  load_from_environment

  # Load the config file if it exists
  if config_file && File.exists?(config_file)
    load_from_disk
  end

  # Validate that we have a correct config
  validate
end

Instance Attribute Details

#config_hashObject (readonly)

Returns the value of attribute config_hash.



48
49
50
# File 'lib/appsignal/config.rb', line 48

def config_hash
  @config_hash
end

#envObject (readonly)

Returns the value of attribute env.



48
49
50
# File 'lib/appsignal/config.rb', line 48

def env
  @env
end

#initial_configObject (readonly)

Returns the value of attribute initial_config.



48
49
50
# File 'lib/appsignal/config.rb', line 48

def initial_config
  @initial_config
end

#loggerObject

Returns the value of attribute logger.



49
50
51
# File 'lib/appsignal/config.rb', line 49

def logger
  @logger
end

#root_pathObject (readonly)

Returns the value of attribute root_path.



48
49
50
# File 'lib/appsignal/config.rb', line 48

def root_path
  @root_path
end

Instance Method Details

#[](key) ⇒ Object



73
74
75
# File 'lib/appsignal/config.rb', line 73

def [](key)
  config_hash[key]
end

#[]=(key, value) ⇒ Object



77
78
79
# File 'lib/appsignal/config.rb', line 77

def []=(key, value)
  config_hash[key] = value
end

#active?Boolean

Returns:

  • (Boolean)


96
97
98
# File 'lib/appsignal/config.rb', line 96

def active?
  @valid && self[:active]
end

#log_file_pathObject



81
82
83
84
85
86
87
88
89
90
# File 'lib/appsignal/config.rb', line 81

def log_file_path
  path = config_hash[:log_path] || root_path
  if File.writable?(path)
    File.join(File.realpath(path), 'appsignal.log')
  else
    '/tmp/appsignal.log'
  end
rescue Errno::ENOENT
  '/tmp/appsignal.log'
end

#valid?Boolean

Returns:

  • (Boolean)


92
93
94
# File 'lib/appsignal/config.rb', line 92

def valid?
  @valid
end

#write_to_environmentObject



100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
# File 'lib/appsignal/config.rb', line 100

def write_to_environment
  ENV['APPSIGNAL_ACTIVE']                       = active?.to_s
  ENV['APPSIGNAL_APP_PATH']                     = root_path.to_s
  ENV['APPSIGNAL_AGENT_PATH']                   = File.expand_path('../../../ext', __FILE__).to_s
  ENV['APPSIGNAL_ENVIRONMENT']                  = env
  ENV['APPSIGNAL_AGENT_VERSION']                = Appsignal::Extension.agent_version
  ENV['APPSIGNAL_LANGUAGE_INTEGRATION_VERSION'] = Appsignal::VERSION
  ENV['APPSIGNAL_DEBUG_LOGGING']                = config_hash[:debug].to_s
  ENV['APPSIGNAL_LOG_FILE_PATH']                = log_file_path.to_s if log_file_path
  ENV['APPSIGNAL_PUSH_API_ENDPOINT']            = config_hash[:endpoint]
  ENV['APPSIGNAL_PUSH_API_KEY']                 = config_hash[:push_api_key]
  ENV['APPSIGNAL_APP_NAME']                     = config_hash[:name]
  ENV['APPSIGNAL_HTTP_PROXY']                   = config_hash[:http_proxy]
  ENV['APPSIGNAL_IGNORE_ACTIONS']               = config_hash[:ignore_actions].join(',')
  ENV['APPSIGNAL_RUNNING_IN_CONTAINER']         = config_hash[:running_in_container].to_s
  ENV['APPSIGNAL_WORKING_DIR_PATH']             = config_hash[:working_dir_path] if config_hash[:working_dir_path]
  ENV['APPSIGNAL_ENABLE_HOST_METRICS']          = config_hash[:enable_host_metrics].to_s
end