Sha256: d57c4255f983527ee07fabbd9e2fdcf8581191fb8c26b1d2f82bf7b8c00b72db

Contents?: true

Size: 1.26 KB

Versions: 4

Compression:

Stored size: 1.26 KB

Contents

# typed: false
require 'ddtrace/workers/async'
require 'ddtrace/workers/loop'

module Datadog
  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

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
ddtrace-0.54.1 lib/ddtrace/workers/polling.rb
ddtrace-0.54.0 lib/ddtrace/workers/polling.rb
ddtrace-0.53.0 lib/ddtrace/workers/polling.rb
ddtrace-0.52.0 lib/ddtrace/workers/polling.rb