@!attribute [r] #loaded_files
@return [Array] loaded extension files.
@!attribute [r] warnings
@return [Array] loader warnings.
Create extension category accessors and methods to test the existence of extensions. Called in initialize().
# File lib/sensu/extensions/loader.rb, line 30 def self.create_category_methods Extension::CATEGORIES.each do |category| define_method(category) do extension_category(category) end method_name = category.to_s.chop + "_exists?" define_method(method_name.to_sym) do |name| extension_exists?(category, name) end end end
# File lib/sensu/extensions/loader.rb, line 18 def initialize @warnings = [] @loaded_files = [] @extensions = {} Extension::CATEGORIES.each do |category| @extensions[category] = {} end self.class.create_category_methods end
Retrieve the extension object corresponding to a key, acting like a Hash object.
@param key [Symbol] @return [Object] value for key.
# File lib/sensu/extensions/loader.rb, line 47 def [](key) @extensions[key] end
Retrieve all extension instances.
@return [Array<object>] extensions.
# File lib/sensu/extensions/loader.rb, line 54 def all @extensions.map { |category, extensions| extensions.map { |name, extension| extension }.uniq }.flatten end
Load extensions from files in a directory. Files may be in nested directories.
@param [String] directory path.
# File lib/sensu/extensions/loader.rb, line 80 def load_directory(directory) warning("loading extension files from directory", :directory => directory) path = directory.gsub(/\(?=\S)/, "/") Dir.glob(File.join(path, "**{,/*/**}/*.rb")).each do |file| load_file(file) end end
Load an extension from a file.
@param [String] file path.
# File lib/sensu/extensions/loader.rb, line 65 def load_file(file) warning("loading extension file", :file => file) begin require File.expand_path(file) @loaded_files << file rescue ScriptError, StandardError => error warning("failed to require extension", :file => file, :error => error) warning("ignoring extension", :file => file) end end
Load instances of the loaded extensions.
@param [String] sensu service to load extensions for.
# File lib/sensu/extensions/loader.rb, line 91 def load_instances(service=nil) service ||= sensu_service_name categories_to_load(service).each do |category| extension_type = category.to_s.chop Extension.const_get(extension_type.capitalize).descendants.each do |klass| extension = klass.new @extensions[category][extension.name] = extension if extension.name_alias @extensions[category][extension.name_alias] = extension end warning("loaded extension", { :type => extension_type, :name => extension.name, :description => extension.description }) end end end
Determine which extension categories to load for the given sensu service.
@param [String] sensu service to load extensions for. @return [Array] extension categories.
# File lib/sensu/extensions/loader.rb, line 143 def categories_to_load(service) case service when "client" [:checks] when "server" Extension::CATEGORIES.reject { |category| category == :checks } else Extension::CATEGORIES end end
Retrieve extension category definitions.
@param [Symbol] category to retrive. @return [Array<Hash>] category definitions.
# File lib/sensu/extensions/loader.rb, line 116 def extension_category(category) @extensions[category].map { |name, extension| extension.definition }.uniq end
Check to see if an extension exists in a category.
@param [Symbol] category to inspect for the extension. @param [String] name of extension. @return [TrueClass, FalseClass]
# File lib/sensu/extensions/loader.rb, line 127 def extension_exists?(category, name) @extensions[category].has_key?(name) end
Retrieve Sensu service name.
@return [String] service name.
# File lib/sensu/extensions/loader.rb, line 134 def sensu_service_name File.basename($0).split("-").last end
Record a warning.
@param message [String] warning message. @param data [Hash] warning context. @return [Array] current warnings.
# File lib/sensu/extensions/loader.rb, line 159 def warning(message, data={}) @warnings << { :message => message }.merge(data) end