#!/usr/bin/ruby require 'puppet' require 'json' require 'stomp' def newevent event = {:subject => nil, :type => "archive", :metrics => {}, :origin => "puppet report", :extended_data => {}, :severity => 0, :eventtime => nil, :text => nil, :name => nil} end events = [] report = YAML.load_file("/var/lib/puppet/state/last_run_report.yaml") report.resource_statuses.find_all {|f| f[1].changed?}.each do |resource| event = newevent event[:eventtime] = report.time.utc.to_i event[:name] = resource.first event[:subject] = report.host event[:metrics][:change_count] = resource[1].change_count event[:metrics][:evaluation_time] = resource[1].evaluation_time event[:metrics][:events] = resource[1].events.size event[:metrics][:out_of_sync_count] = resource[1].out_of_sync_count event[:extended_data][:resource_type] = resource[1].resource_type event[:extended_data][:resource_title] = resource[1].title event[:extended_data][:events] = resource[1].events event[:extended_data][:catalog_version] = report.configuration_version events << event end config = {} config[:stomp] = {:user => "xx", :password => "xx", :server => "stomp", :port => 6163} config[:output] = ["/queue/unimatrix.portal"] begin Timeout::timeout(2) { conn = Stomp::Connection.new(config[:stomp][:user], config[:stomp][:password], config[:stomp][:server], config[:stomp][:port]) events.each do |event| conn.publish(config[:output], event.to_json) end } rescue Exception => e STDERR.puts "Failed to send: #{e.class}: #{e}" exit 1 end