require 'kurchatov/plugin/riemann' require 'kurchatov/plugin/dsl' require 'yaml' module Kurchatov module Plugins module Config def self.load_test_plugin(plugin_path, config_file) config = File.exists?(config_file) ? YAML.load_file(config_file) : {} plugin = Kurchatov::Plugins::DSL.load_riemann_plugin(plugin_path) plugin.plugin.merge!(config[plugin.name]) unless config.empty? [plugin] end def self.find_plugin(name, array) array.find { |p| p.name == name } end def self.load_plugins(plugins_path, config_file) Log.info("Config file #{config_file} not found") unless File.exists?(config_file) @all_plugins = Kurchatov::Plugins::DSL.load_riemann_plugins(plugins_path) @all_names = Array.new @plugins_to_run = Array.new config = YAML.load_file(config_file) rescue false config = {} and Log.info("Empty config file '#{config_file}'") if config == false config.each do |name, val| @all_names << name next if val.nil? # # dup plugins from array # if val.kind_of? Array parent = find_plugin(name, @all_plugins) Log.error("Unable to find parent plugin for #{name}") and next if parent.nil? val.each_with_index do |p_settings, i| child = parent.dup child.name = "#{name}_#{i}" child.plugin = parent.plugin.dup child.plugin.merge!(p_settings) @all_plugins << child @all_names << child.name end @all_plugins.delete(parent) next end # # dup plugins from 'parent' # if val.is_a?(Hash) && val.has_key?('parent') parent = find_plugin(val['parent'], @all_plugins) Log.error("Unable to find parent '#{parent}' for '#{name}'") and next if parent.nil? child = parent.dup child.name = name child.plugin = parent.plugin.dup child.plugin.merge!(val) @all_plugins << child @all_names << child.name next end @all_plugins.each { |p| p.plugin.merge!(val) if name == p.name } end @all_plugins.each do |p| unless p.always_start || @all_names.include?(p.name) Log.info("Plugin '#{p.name}' not started, because it " + "not 'always_start' and not in config file") next end @plugins_to_run << p if p.runnable_by_config? end Log.info("Start plugins: #{ @plugins_to_run.map {|p| p.name} }") @plugins_to_run end end end end