module Skylight::Core::Railtie
@api private
Public Class Methods
config_class()
click to toggle source
# File lib/skylight/core/railtie.rb, line 12 def self.config_class; Config end
gem_name()
click to toggle source
# File lib/skylight/core/railtie.rb, line 14 def self.gem_name; "Skylight" end
log_file_name()
click to toggle source
# File lib/skylight/core/railtie.rb, line 15 def self.log_file_name; "skylight" end
middleware_class()
click to toggle source
# File lib/skylight/core/railtie.rb, line 13 def self.middleware_class; Middleware end
namespace()
click to toggle source
# File lib/skylight/core/railtie.rb, line 16 def self.namespace; Skylight end
root_key()
click to toggle source
rubocop:disable Style/SingleLineMethods, Layout/EmptyLineBetweenDefs
# File lib/skylight/core/railtie.rb, line 11 def self.root_key; :skylight end
version()
click to toggle source
# File lib/skylight/core/railtie.rb, line 17 def self.version; Skylight::Core::VERSION end
Private Instance Methods
activate?(_sk_config)
click to toggle source
# File lib/skylight/core/railtie.rb, line 121 def activate?(_sk_config) key = "#{self.class.config_class.env_prefix}ENABLED" if ENV.key?(key) ENV[key] !~ /^false$/i else environments.include?(Rails.env.to_s) end end
config_path(app)
click to toggle source
# File lib/skylight/core/railtie.rb, line 113 def config_path(app) File.expand_path(sk_rails_config.config_path, app.root) end
configure_logging(config, app)
click to toggle source
# File lib/skylight/core/railtie.rb, line 91 def configure_logging(config, app) if (logger = sk_rails_config(app).logger) config.logger = logger else # Configure the log file destination if (log_file = sk_rails_config(app).log_file) config["log_file"] = log_file elsif !config.key?("log_file") && !config.on_heroku? config["log_file"] = File.join(Rails.root, "log/#{self.class.log_file_name}.log") end # Configure the log level if (level = sk_rails_config(app).log_level) config["log_level"] = level elsif !config.key?("log_level") if (level = app.config.log_level) config["log_level"] = level end end end end
development_warning()
click to toggle source
# File lib/skylight/core/railtie.rb, line 27 def development_warning "#{log_prefix} Running #{self.class.gem_name} in development mode. No data will be reported until you deploy your app." end
environments()
click to toggle source
# File lib/skylight/core/railtie.rb, line 117 def environments Array(sk_rails_config.environments).map { |e| e && e.to_s }.compact end
existent_paths(paths)
click to toggle source
# File lib/skylight/core/railtie.rb, line 68 def existent_paths(paths) paths.respond_to?(:existent) ? paths.existent : paths.select { |f| File.exist?(f) } end
insert_middleware(app, config)
click to toggle source
# File lib/skylight/core/railtie.rb, line 139 def insert_middleware(app, config) if middleware_position.key?(:after) app.middleware.insert_after(middleware_position[:after], self.class.middleware_class, config: config) elsif middleware_position.key?(:before) app.middleware.insert_before(middleware_position[:before], self.class.middleware_class, config: config) else raise "The middleware position you have set is invalid. Please be sure `config.#{self.class.root_key}.middleware_position` is set up correctly." end end
load_probes()
click to toggle source
# File lib/skylight/core/railtie.rb, line 130 def load_probes probes = sk_rails_config.probes || [] Probes.probe(*probes) end
load_skylight_config(app)
click to toggle source
# File lib/skylight/core/railtie.rb, line 72 def load_skylight_config(app) path = config_path(app) path = nil unless File.exist?(path) unless (tmp = app.config.paths["tmp"].first) Rails.logger.error "#{log_prefix} tmp directory missing from rails configuration" return nil end config = self.class.config_class.load(file: path, environment: Rails.env.to_s) config[:root] = Rails.root configure_logging(config, app) config[:'daemon.sockdir_path'] ||= tmp config[:'normalizers.render.view_paths'] = existent_paths(app.config.paths["app/views"]) + [Rails.root.to_s] config end
log_prefix()
click to toggle source
# File lib/skylight/core/railtie.rb, line 23 def log_prefix "[#{self.class.gem_name.upcase}] [#{self.class.version}]" end
log_warning(config, msg)
click to toggle source
# File lib/skylight/core/railtie.rb, line 60 def log_warning(config, msg) if config config.alert_logger.warn(msg) else Rails.logger.warn(msg) end end
middleware_position()
click to toggle source
# File lib/skylight/core/railtie.rb, line 135 def middleware_position sk_rails_config.middleware_position.is_a?(Hash) ? sk_rails_config.middleware_position.symbolize_keys : sk_rails_config.middleware_position end
run_initializer(app)
click to toggle source
# File lib/skylight/core/railtie.rb, line 31 def run_initializer(app) # Load probes even when agent is inactive to catch probe related bugs sooner load_probes config = load_skylight_config(app) if activate?(config) if config if self.class.namespace.start!(config) set_middleware_position(app, config) Rails.logger.info "#{log_prefix} #{self.class.gem_name} agent enabled" else Rails.logger.info "#{log_prefix} Unable to start, see the #{self.class.gem_name} logs for more details" end end elsif Rails.env.development? # FIXME: The CLI isn't part of core so we should change this message unless config.user_config.disable_dev_warning? log_warning config, development_warning end elsif !Rails.env.test? unless config.user_config.disable_env_warning? log_warning config, "#{log_prefix} You are running in the #{Rails.env} environment but haven't added it to config.#{self.class.root_key}.environments, so no data will be sent to #{config.class.service_name} servers." end end rescue ConfigError => e Rails.logger.error "#{log_prefix} #{e.message}; disabling #{self.class.gem_name} agent" end
set_middleware_position(app, config)
click to toggle source
# File lib/skylight/core/railtie.rb, line 149 def set_middleware_position(app, config) if middleware_position.is_a?(Integer) app.middleware.insert middleware_position, self.class.middleware_class, config: config elsif middleware_position.is_a?(Hash) && middleware_position.keys.count == 1 insert_middleware(app, config) elsif middleware_position.nil? app.middleware.insert 0, self.class.middleware_class, config: config else raise "The middleware position you have set is invalid. Please be sure `config.#{self.class.root_key}.middleware_position` is set up correctly." end end
sk_rails_config(target = self)
click to toggle source
# File lib/skylight/core/railtie.rb, line 161 def sk_rails_config(target = self) target.config.send(self.class.root_key) end