class ElasticAPM::Config
@api private
rubocop:disable Metrics/ClassLength
def app=(app)
def app=(app) case app_type?(app) when :sinatra set_sinatra(app) when :rails set_rails(app) else # TODO: define custom? self.service_name = 'ruby' end end
def app_type?(app)
def app_type?(app) if defined?(::Rails) && app.is_a?(Rails::Application) return :rails end if app.is_a?(Class) && app.superclass.to_s == 'Sinatra::Base' return :sinatra end nil end
def build_logger(path, level)
def build_logger(path, level) logger = Logger.new(path == '-' ? STDOUT : path) logger.level = level logger end
def format_name(str)
def format_name(str) str.gsub('::', '_') end
def initialize(options = nil)
def initialize(options = nil) options = {} if options.nil? set_defaults set_from_env set_from_args(options) yield self if block_given? end
def logger=(logger)
def logger=(logger) @logger = logger || build_logger(log_path, log_level) end
def set_defaults
def set_defaults DEFAULTS.each do |key, value| send("#{key}=", value) end end
def set_from_args(options)
def set_from_args(options) options.each do |key, value| send("#{key}=", value) end end
def set_from_env
def set_from_env ENV_TO_KEY.each do |env_key, key| next unless (value = ENV[env_key]) type, key = key if key.is_a? Array value = case type when :int then value.to_i when :float then value.to_f when :bool then !%w[0 false].include?(value.strip.downcase) when :list then value.split(/[ ,]/) else value end send("#{key}=", value) end end
def set_rails(app)
def set_rails(app) self.service_name = format_name(service_name || app.class.parent_name) self.framework_name = 'Ruby on Rails' self.framework_version = Rails::VERSION::STRING self.logger = Rails.logger self.root_path = Rails.root.to_s self.view_paths = app.config.paths['app/views'].existent end
def set_sinatra(app)
def set_sinatra(app) self.service_name = format_name(service_name || app.to_s) self.framework_name = framework_name || 'Sinatra' self.framework_version = framework_version || Sinatra::VERSION self.enabled_injectors += %w[sinatra] self.root_path = Dir.pwd end
def use_ssl?
def use_ssl? server_url.start_with?('https') end