Class: Fluent::ChefAPIInput
- Inherits:
-
Input
- Object
- Input
- Fluent::ChefAPIInput
- Defined in:
- lib/fluent/plugin/in_chef_api.rb
Defined Under Namespace
Classes: ChefConfig
Instance Method Summary collapse
- #configure(conf) ⇒ Object
-
#initialize ⇒ ChefAPIInput
constructor
A new instance of ChefAPIInput.
- #run ⇒ Object
- #run_once(connection) ⇒ Object
- #shutdown ⇒ Object
- #start ⇒ Object
Constructor Details
#initialize ⇒ ChefAPIInput
Returns a new instance of ChefAPIInput.
15 16 17 18 |
# File 'lib/fluent/plugin/in_chef_api.rb', line 15 def initialize super require "chef-api" end |
Instance Method Details
#configure(conf) ⇒ Object
51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 |
# File 'lib/fluent/plugin/in_chef_api.rb', line 51 def configure(conf) super @config = {} if @config_file @config = @config.merge(ChefConfig.load_file(@config_file)) end if @chef_server_url @config[:endpoint] = @chef_server_url end if @node_name @config[:client] = value end if @client_key @config[:key] = ::File.read(@client_key) end end |
#run ⇒ Object
78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 |
# File 'lib/fluent/plugin/in_chef_api.rb', line 78 def run connection = ChefAPI::Connection.new(@config.dup) next_run = ::Time.new while @running if ::Time.new < next_run sleep(1) else begin run_once(connection) rescue => error $log.warn("failed to fetch metrics: #{error.class}: #{error.}") next ensure next_run = ::Time.new + @check_interval end 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 |
# File 'lib/fluent/plugin/in_chef_api.rb', line 97 def run_once(connection) if @chef_environment nodes = connection.environments.fetch(@chef_environment).nodes data = {"chef_environment" => @chef_environment} else nodes = connection.nodes data = {} end Engine.emit("#{@tag}.nodes", Engine.now, data.merge({"value" => nodes.count})) nodes.each do |node| begin Engine.emit("#{@tag}.run_list", Engine.now, data.merge({"value" => node.run_list.length, "node" => node.name})) ohai_time = node.automatic.fetch("ohai_time").to_i Engine.emit("#{@tag}.ohai_time", Engine.now, data.merge({"value" => ohai_time, "node" => node.name})) Engine.emit("#{@tag}.behind_seconds", Engine.now, data.merge({"value" => Time.new.to_i - ohai_time, "node" => node.name})) rescue => error $log.warn("failed to fetch metrics from node: #{node.name}: #{error.class}: #{error.}") end end end |
#shutdown ⇒ Object
73 74 75 76 |
# File 'lib/fluent/plugin/in_chef_api.rb', line 73 def shutdown @running = false @thread.join end |
#start ⇒ Object
68 69 70 71 |
# File 'lib/fluent/plugin/in_chef_api.rb', line 68 def start @running = true @thread = ::Thread.new(&method(:run)) end |