Sha256: 5f818bce12317e7a6f8d4ae9a47d416b25ef4076e5292dc07ce13e7d5b4be784

Contents?: true

Size: 1.39 KB

Versions: 18

Compression:

Stored size: 1.39 KB

Contents

# frozen_string_literal: true

require_relative 'async'
require_relative 'interval_loop'

module Datadog
  module Core
    module Workers
      # Adds polling (async looping) behavior to workers
      module Polling
        DEFAULT_SHUTDOWN_TIMEOUT = 1

        def self.included(base)
          base.include(Workers::IntervalLoop)
          base.include(Workers::Async::Thread)
          base.prepend(PrependedMethods)
        end

        # Methods that must be prepended
        module PrependedMethods
          def perform(*args)
            super if enabled?
          end
        end

        def stop(force_stop = false, timeout = DEFAULT_SHUTDOWN_TIMEOUT)
          if running?
            # Attempt graceful stop and wait
            stop_loop
            graceful = join(timeout)

            if !graceful && force_stop
              Datadog.logger.debug do
                "Timeout while waiting for worker to finish gracefully, forcing termination for: #{self}"
              end
              terminate
            else
              graceful
            end
          else
            false
          end
        end

        def enabled?
          return true unless instance_variable_defined?(:@enabled)

          @enabled
        end

        # Allow worker to be started
        def enabled=(value)
          # Coerce to boolean
          @enabled = (value == true)
        end
      end
    end
  end
end

Version data entries

18 entries across 18 versions & 1 rubygems

Version Path
datadog-2.12.2 lib/datadog/core/workers/polling.rb
datadog-2.12.1 lib/datadog/core/workers/polling.rb
datadog-2.12.0 lib/datadog/core/workers/polling.rb
datadog-2.11.0 lib/datadog/core/workers/polling.rb
datadog-2.10.0 lib/datadog/core/workers/polling.rb
datadog-2.9.0 lib/datadog/core/workers/polling.rb
datadog-2.8.0 lib/datadog/core/workers/polling.rb
datadog-2.7.1 lib/datadog/core/workers/polling.rb
datadog-2.7.0 lib/datadog/core/workers/polling.rb
datadog-2.6.0 lib/datadog/core/workers/polling.rb
datadog-2.5.0 lib/datadog/core/workers/polling.rb
datadog-2.4.0 lib/datadog/core/workers/polling.rb
datadog-2.3.0 lib/datadog/core/workers/polling.rb
datadog-2.2.0 lib/datadog/core/workers/polling.rb
datadog-2.1.0 lib/datadog/core/workers/polling.rb
datadog-2.0.0 lib/datadog/core/workers/polling.rb
datadog-2.0.0.beta2 lib/datadog/core/workers/polling.rb
datadog-2.0.0.beta1 lib/datadog/core/workers/polling.rb