Sha256: 01686a0a0f488554de7e325c2188d18aad06ccc1d16097cca4e47b364c4e7363

Contents?: true

Size: 1.94 KB

Versions: 10

Compression:

Stored size: 1.94 KB

Contents

# Copyright (c) 2023 Contrast Security, Inc. See https://www.contrastsecurity.com/enduser-terms-0317a for more details.
# frozen_string_literal: true

require 'contrast/agent/thread/worker_thread'
require 'contrast/agent/reporting/report'
require 'contrast/agent/inventory/dependency_usage_analysis'
require 'contrast/agent/reporting/reporting_events/poll'

module Contrast
  module Agent
    module ReportingWorkers
      # The ReporterHeartbeat will make sure that the process remains marked alive by TeamServer and that we
      # periodically reach out to get the latest settings for this application. It also sends out those
      # messages which do not need to be associated directly with a request,
      # such as Server Activity and Library Observation.
      class ReporterHeartbeat < WorkerThread
        # TeamServer will mark an application offline after 5 minutes. Sending this every one should be more than enough
        # to satisfy our goals.
        REFRESH_INTERVAL_SEC = 60

        def start_thread!
          return unless attempt_to_start?
          return if running?

          @_thread = Contrast::Agent::Thread.new do
            logger.info('[Heartbeat] Starting thread.')
            loop do
              break unless attempt_to_start?

              polling_events.each do |event|
                Contrast::Agent.reporter&.send_event(event)
              end
              clean_properties
              sleep(REFRESH_INTERVAL_SEC)
            end
          end
        end

        private

        def poll_message
          @_poll_message ||= Contrast::Agent::Reporting::Poll.new
        end

        # Those events which should be sent periodically, rather than on event or request.
        #
        # @return [Array<Contrast::Agent::Reporting::ReportingEvent>]
        def polling_events
          [Contrast::Agent::Inventory::DependencyUsageAnalysis.instance.generate_library_usage, poll_message].compact
        end
      end
    end
  end
end

Version data entries

10 entries across 10 versions & 1 rubygems

Version Path
contrast-agent-7.6.1 lib/contrast/agent/reporting/reporting_workers/reporter_heartbeat.rb
contrast-agent-7.6.0 lib/contrast/agent/reporting/reporting_workers/reporter_heartbeat.rb
contrast-agent-7.5.0 lib/contrast/agent/reporting/reporting_workers/reporter_heartbeat.rb
contrast-agent-7.4.1 lib/contrast/agent/reporting/reporting_workers/reporter_heartbeat.rb
contrast-agent-7.4.0 lib/contrast/agent/reporting/reporting_workers/reporter_heartbeat.rb
contrast-agent-7.3.2 lib/contrast/agent/reporting/reporting_workers/reporter_heartbeat.rb
contrast-agent-7.3.1 lib/contrast/agent/reporting/reporting_workers/reporter_heartbeat.rb
contrast-agent-7.3.0 lib/contrast/agent/reporting/reporting_workers/reporter_heartbeat.rb
contrast-agent-7.2.0 lib/contrast/agent/reporting/reporting_workers/reporter_heartbeat.rb
contrast-agent-7.1.0 lib/contrast/agent/reporting/reporting_workers/reporter_heartbeat.rb