Sha256: 6ee5f9b2cc0d4886f5c6375fece6e7c447f55a556af1bd27ea2670ad41e77f4d

Contents?: true

Size: 1.39 KB

Versions: 4

Compression:

Stored size: 1.39 KB

Contents

# typed: false

require 'datadog/core/workers/async'
require 'datadog/core/workers/interval_loop'

module Datadog
  module Core
    module Workers
      # Adds polling (async looping) behavior to workers
      module Polling
        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 = 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

4 entries across 4 versions & 1 rubygems

Version Path
ddtrace-1.2.0 lib/datadog/core/workers/polling.rb
ddtrace-1.1.0 lib/datadog/core/workers/polling.rb
ddtrace-1.0.0 lib/datadog/core/workers/polling.rb
ddtrace-1.0.0.beta2 lib/datadog/core/workers/polling.rb