def upload
while change = @queue.pop
with_event_counter('Icinga2 Result Uploader') do
symbolize_keys_deep!(change)
change[:timestamp] = change[:check_result][:schedule_end] if change.key?(:check_result)
if change.key?(:downtime) && change[:downtime].is_a?(Hash)
change[:host] = change[:downtime][:host_name] if change[:host].nil? || change[:host].empty?
change[:service] = change[:downtime][:service_name] if change[:service].nil? || change[:service].empty?
end
if change[:service].nil? || change[:service].empty?
change[:service] = 'Host Check'
end
case change[:type]
when 'StateChange'
transformed = { result: change[:check_result][:state] }
when 'AcknowledgementSet'
transformed = { acknowledged: true }
when 'AchnowledgementCleared'
transformed = { acknowledged: false }
when 'DowntimeTriggered'
transformed = { downtime: true }
when 'DowntimeRemoved'
transformed = { downtime: false }
when '_parsed'
transformed = change.dup.reject! { |k, _v| k == :type }
else
next
end
transformed.merge!(
host: change[:host],
service: change[:service],
timestamp: change[:timestamp]
)
begin
MonitoringResult.new.push_result(transformed.to_json)
rescue Errno::ECONNREFUSED => e
logger.error "Foreman refused connection when tried to upload monitoring result: #{e.message}"
sleep 10
rescue => e
logger.error "Error while uploading monitoring results to Foreman: #{e.message}"
sleep 1
retry
end
end
end
end