Sha256: 61f253d380f0fe77fd4a38f8f35ae1d8a9c7fa0e657811e6ceb075a5cc000b0d

Contents?: true

Size: 1.11 KB

Versions: 4

Compression:

Stored size: 1.11 KB

Contents

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.send(:include, Workers::IntervalLoop)
        base.send(:include, Workers::Async::Thread)
        base.send(: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 timeout and force stop...
          !graceful && force_stop ? terminate : graceful
        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.49.0 lib/ddtrace/workers/polling.rb
ddtrace-0.48.0 lib/ddtrace/workers/polling.rb
ddtrace-0.47.0 lib/ddtrace/workers/polling.rb
ddtrace-0.46.0 lib/ddtrace/workers/polling.rb