module Appsignal::Loaders
def instances
def instances @instances ||= {} end
def load(name_str)
def load(name_str) name = name_str.to_sym unless registered?(name) require_loader(name) unless registered?(name) Appsignal.internal_logger .warn("No loader found with the name '#{name}'.") return end end Appsignal.internal_logger.debug("Loading '#{name}' loader") begin loader_klass = loaders[name] loader = loader_klass.new instances[name] = loader loader.on_load if loader.respond_to?(:on_load) rescue => e Appsignal.internal_logger.error( "An error occurred while loading the '#{name}' loader: " \ "#{e.class}: #{e.message}\n#{e.backtrace}" ) end end
def loaders
def loaders @loaders ||= {} end
def register(name, klass)
def register(name, klass) loaders[name.to_sym] = klass end
def registered?(name)
def registered?(name) loaders.key?(name) end
def require_loader(name)
def require_loader(name) require "appsignal/loaders/#{name}" rescue LoadError nil end
def start
def start instances.each do |name, instance| Appsignal.internal_logger.debug("Starting '#{name}' loader") begin instance.on_start if instance.respond_to?(:on_start) rescue => e Appsignal.internal_logger.error( "An error occurred while starting the '#{name}' loader: " \ "#{e.class}: #{e.message}\n#{e.backtrace.join("\n")}" ) end end end
def unregister(name)
def unregister(name) loaders.delete(name) end