# File lib/smart_proxy_monitoring_icinga2/icinga2_api_observer.rb, line 17
    def monitor
      loop do
        logger.debug "Connecting to Icinga event monitoring api: #{Icinga2Client.baseurl}."

        ssl_socket = Icinga2Client.events_socket('/events?queue=foreman&types=StateChange&types=AcknowledgementSet&types=AcknowledgementCleared&types=DowntimeTriggered&types=DowntimeRemoved')

        logger.info 'Icinga event api monitoring started.'

        while line = ssl_socket.gets
          next unless line.chars.first == '{'

          with_event_counter('Icinga2 Event API Monitor') do
            begin
              parsed = JSON.parse(line)
              if @queue.size > 100_000
                @queue.clear
                logger.error 'Queue was full. Flushing. Events were lost.'
              end
              @queue.push(parsed)
            rescue JSON::ParserError => e
              logger.error "Icinga2 Event API Monitor: Malformed JSON: #{e.message}"
            end
          end

        end
        logger.info 'Icinga event api monitoring stopped.'
      end
    rescue Errno::ECONNREFUSED => e
      logger.error "Icinga Event Stream: Connection refused. Retrying in 5 seconds. Reason: #{e.message}"
      sleep 5
      retry
    rescue Exception => e
      logger.error "Error while monitoring: #{e.message}\n#{e.backtrace.join("\n")}"
      sleep 1
      retry
    ensure
      ssl_socket.sysclose unless ssl_socket.nil?
    end