X-Git-Url: https://review.fuel-infra.org/gitweb?a=blobdiff_plain;f=plugins%2Fmcollective%2Fapplication%2Ffacts.rb;fp=plugins%2Fmcollective%2Fapplication%2Ffacts.rb;h=859d9fa3312324dac1565fb473f7a62ddf910e35;hb=b87d2f4e68281062df1913440ca5753ae63314a9;hp=0000000000000000000000000000000000000000;hpb=ab0ea530b8ac956091f17b104ab2311336cfc250;p=packages%2Fprecise%2Fmcollective.git diff --git a/plugins/mcollective/application/facts.rb b/plugins/mcollective/application/facts.rb new file mode 100644 index 0000000..859d9fa --- /dev/null +++ b/plugins/mcollective/application/facts.rb @@ -0,0 +1,53 @@ +class MCollective::Application::Facts 0 + end + + def validate_configuration(configuration) + raise "Please specify a fact to report for" unless configuration.include?(:fact) + end + + def show_single_fact_report(fact, facts, verbose=false) + puts("Report for fact: #{fact}\n\n") + + facts.keys.sort.each do |k| + printf(" %-40sfound %d times\n", k, facts[k].size) + + if verbose + puts + + facts[k].sort.each do |f| + puts(" #{f}") + end + + puts + end + end + end + + def main + rpcutil = rpcclient("rpcutil") + rpcutil.progress = false + + facts = {} + + rpcutil.get_fact(:fact => configuration[:fact]) do |resp| + begin + value = resp[:body][:data][:value] + if value + facts.include?(value) ? facts[value] << resp[:senderid] : facts[value] = [ resp[:senderid] ] + end + rescue Exception => e + STDERR.puts "Could not parse facts for #{resp[:senderid]}: #{e.class}: #{e}" + end + end + + show_single_fact_report(configuration[:fact], facts, options[:verbose]) + + printrpcstats + + halt rpcutil.stats + end +end