Class: Fluent::Plugin::ChefAPIInput
- Inherits:
-
Input
- Object
- Input
- Fluent::Plugin::ChefAPIInput
- Defined in:
- lib/fluent/plugin/in_chef_api.rb
Defined Under Namespace
Classes: ChefConfig
Instance Method Summary collapse
- #configure(conf) ⇒ Object
- #emit_node_metrics(node, data) ⇒ Object
-
#initialize ⇒ ChefAPIInput
constructor
A new instance of ChefAPIInput.
- #run ⇒ Object
- #run_once(connection) ⇒ Object
- #run_once_single(connection) ⇒ Object
- #start ⇒ Object
Constructor Details
#initialize ⇒ ChefAPIInput
Returns a new instance of ChefAPIInput.
20 21 22 |
# File 'lib/fluent/plugin/in_chef_api.rb', line 20 def initialize super end |
Instance Method Details
#configure(conf) ⇒ Object
55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 |
# File 'lib/fluent/plugin/in_chef_api.rb', line 55 def configure(conf) super if @config_file @chef_config = ChefConfig.load_file(@config_file).to_hash else @chef_config = {} end if @chef_server_url @chef_config[:endpoint] = @chef_server_url end if @node_name @chef_config[:client] = value end if @client_key @chef_config[:key] = ::File.read(@client_key) end end |
#emit_node_metrics(node, data) ⇒ Object
119 120 121 122 123 124 125 126 127 128 129 130 |
# File 'lib/fluent/plugin/in_chef_api.rb', line 119 def emit_node_metrics(node, data) begin router.emit("#{@tag}.run_list", Engine.now, data.merge({"value" => node.run_list.length, "node" => node.name})) if node.automatic["ohai_time"] ohai_time = node.automatic["ohai_time"].to_i router.emit("#{@tag}.ohai_time", Engine.now, data.merge({"value" => ohai_time, "node" => node.name})) router.emit("#{@tag}.behind_seconds", Engine.now, data.merge({"value" => Time.new.to_i - ohai_time, "node" => node.name})) end rescue => error log.warn("failed to fetch metrics from node: #{node.name}", error: error) end end |
#run ⇒ Object
78 79 80 81 82 83 84 85 86 87 88 |
# File 'lib/fluent/plugin/in_chef_api.rb', line 78 def run super @connection = ChefAPI::Connection.new(@chef_config.dup) timer_execute(:chef_api_input, @check_interval) do if @monitor_multi run_once(connection) else run_once_single(connection) end end end |
#run_once(connection) ⇒ Object
97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 |
# File 'lib/fluent/plugin/in_chef_api.rb', line 97 def run_once(connection) data = @default_values.dup if @chef_environment nodes = connection.environments.fetch(@chef_environment).nodes else nodes = connection.nodes end router.emit("#{@tag}.nodes", Engine.now, data.merge({"value" => nodes.count})) begin nodes.instance_eval do if Hash === @collection @collection = Hash[@collection.to_a.shuffle] end end rescue => error log.warn("failed to shuffle nodes", error: error) end nodes.each do |node| emit_node_metrics(node, data) end end |
#run_once_single(connection) ⇒ Object
90 91 92 93 94 95 |
# File 'lib/fluent/plugin/in_chef_api.rb', line 90 def run_once_single(connection) data = @default_values.dup if node = connection.nodes.fetch(connection.client) emit_node_metrics(node, data) end end |
#start ⇒ Object
73 74 75 76 |
# File 'lib/fluent/plugin/in_chef_api.rb', line 73 def start thread_create(:chef_api, &method(:run)) super end |