def node_inventory
node = configuration[:node]
util = rpcclient("rpcutil")
util.identity_filter node
util.progress = false
nodestats = util.custom_request("daemon_stats", {}, node, {"identity" => node}).first
unless nodestats
STDERR.puts "Did not receive any results from node #{node}"
exit 1
end
unless nodestats[:statuscode] == 0
STDERR.puts "Failed to retrieve daemon_stats from #{node}: #{nodestats[:statusmsg]}"
else
util.custom_request("inventory", {}, node, {"identity" => node}).each do |resp|
unless resp[:statuscode] == 0
STDERR.puts "Failed to retrieve inventory for #{node}: #{resp[:statusmsg]}"
next
end
data = resp[:data]
begin
puts "Inventory for #{resp[:sender]}:"
puts
nodestats = nodestats[:data]
puts " Server Statistics:"
puts " Version: #{nodestats[:version]}"
puts " Start Time: #{Time.at(nodestats[:starttime])}"
puts " Config File: #{nodestats[:configfile]}"
puts " Collectives: #{data[:collectives].join(', ')}" if data.include?(:collectives)
puts " Main Collective: #{data[:main_collective]}" if data.include?(:main_collective)
puts " Process ID: #{nodestats[:pid]}"
puts " Total Messages: #{nodestats[:total]}"
puts " Messages Passed Filters: #{nodestats[:passed]}"
puts " Messages Filtered: #{nodestats[:filtered]}"
puts " Expired Messages: #{nodestats[:ttlexpired]}"
puts " Replies Sent: #{nodestats[:replies]}"
puts " Total Processor Time: #{nodestats[:times][:utime]} seconds"
puts " System Time: #{nodestats[:times][:stime]} seconds"
puts
puts " Agents:"
if data[:agents].size > 0
data[:agents].sort.in_groups_of(3, "") do |agents|
puts " %-15s %-15s %-15s" % agents
end
else
puts " No agents installed"
end
puts
puts " Data Plugins:"
if data[:data_plugins].size > 0
data[:data_plugins].sort.in_groups_of(3, "") do |plugins|
puts " %-15s %-15s %-15s" % plugins.map{|p| p.gsub("_data", "")}
end
else
puts " No data plugins installed"
end
puts
puts " Configuration Management Classes:"
if data[:classes].size > 0
field_size = MCollective::Util.field_size(data[:classes], 30)
fields_num = MCollective::Util.field_number(field_size)
format = " " + (" %-#{field_size}s" * fields_num)
data[:classes].sort.in_groups_of(fields_num, "") do |klasses|
puts format % klasses
end
else
puts " No classes applied"
end
puts
puts " Facts:"
if data[:facts].size > 0
data[:facts].sort_by{|f| f[0]}.each do |f|
puts " #{f[0]} => #{f[1]}"
end
else
puts " No facts known"
end
break
rescue Exception => e
STDERR.puts "Failed to display node inventory: #{e.class}: #{e}"
end
end
end
halt util.stats
end