Sha256: acec20310ca95f5b178cf570006b02f5e6af1609a0342c0f2cdba3f25767362d

Contents?: true

Size: 1.36 KB

Versions: 14

Compression:

Stored size: 1.36 KB

Contents

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

14 entries across 14 versions & 1 rubygems

Version Path
ddtrace-1.23.3 lib/datadog/core/workers/polling.rb
ddtrace-1.23.2 lib/datadog/core/workers/polling.rb
ddtrace-1.23.1 lib/datadog/core/workers/polling.rb
ddtrace-1.22.0 lib/datadog/core/workers/polling.rb
ddtrace-1.21.1 lib/datadog/core/workers/polling.rb
ddtrace-1.21.0 lib/datadog/core/workers/polling.rb
ddtrace-1.20.0 lib/datadog/core/workers/polling.rb
ddtrace-1.19.0 lib/datadog/core/workers/polling.rb
ddtrace-1.18.0 lib/datadog/core/workers/polling.rb
ddtrace-1.17.0 lib/datadog/core/workers/polling.rb
ddtrace-1.16.2 lib/datadog/core/workers/polling.rb
ddtrace-1.16.1 lib/datadog/core/workers/polling.rb
ddtrace-1.16.0 lib/datadog/core/workers/polling.rb
ddtrace-1.15.0 lib/datadog/core/workers/polling.rb