class Proxy::Monitoring::Icinga2::Icinga2ResultUploader

Attributes

semaphore[R]

Public Class Methods

new(queue) click to toggle source
# File lib/smart_proxy_monitoring_icinga2/icinga2_result_uploader.rb, line 17
def initialize(queue)
  @queue = queue.queue
  @semaphore = Mutex.new
end

Public Instance Methods

do_start() click to toggle source
# File lib/smart_proxy_monitoring_icinga2/icinga2_result_uploader.rb, line 72
def do_start
  @thread = Thread.new { upload }
  @thread.abort_on_exception = true
  @thread
end
stop() click to toggle source
# File lib/smart_proxy_monitoring_icinga2/icinga2_result_uploader.rb, line 78
def stop
  @thread.terminate unless @thread.nil?
end
upload() click to toggle source
# File lib/smart_proxy_monitoring_icinga2/icinga2_result_uploader.rb, line 22
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 'AcknowledgementCleared'
        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

Private Instance Methods

add_domain(host) click to toggle source
# File lib/smart_proxy_monitoring_icinga2/icinga2_result_uploader.rb, line 92
def add_domain(host)
  domain = Proxy::Monitoring::Plugin.settings.strip_domain
  host = "#{host}#{domain}" unless domain.nil?
  host
end
symbolize_keys_deep!(h) click to toggle source
# File lib/smart_proxy_monitoring_icinga2/icinga2_result_uploader.rb, line 84
def symbolize_keys_deep!(h)
  h.keys.each do |k|
    ks    = k.to_sym
    h[ks] = h.delete k
    symbolize_keys_deep! h[ks] if h[ks].is_a? Hash
  end
end