Class: Datadog::Core::Remote::Worker
- Inherits:
-
Object
- Object
- Datadog::Core::Remote::Worker
- Defined in:
- lib/datadog/core/remote/worker.rb
Overview
Worker executes a block every interval on a separate Thread
Instance Method Summary collapse
-
#initialize(interval:, &block) ⇒ Worker
constructor
A new instance of Worker.
- #start ⇒ Object
- #started? ⇒ Boolean
- #stop ⇒ Object
Constructor Details
#initialize(interval:, &block) ⇒ Worker
Returns a new instance of Worker.
8 9 10 11 12 13 14 15 16 17 18 19 20 |
# File 'lib/datadog/core/remote/worker.rb', line 8 def initialize(interval:, &block) @mutex = Mutex.new @thr = nil @starting = false @started = false @stopped = false @interval = interval raise ArgumentError, 'can not initialize a worker without a block' unless block @block = block end |
Instance Method Details
#start ⇒ Object
22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
# File 'lib/datadog/core/remote/worker.rb', line 22 def start Datadog.logger.debug { 'remote worker starting' } acquire_lock if @stopped Datadog.logger.debug('remote worker: refusing to restart after previous stop') return end return if @starting || @started @starting = true thread = Thread.new { poll(@interval) } thread.name = self.class.name unless Gem::Version.new(RUBY_VERSION) < Gem::Version.new('2.3') thread.thread_variable_set(:fork_safe, true) @thr = thread @started = true @starting = false Datadog.logger.debug { 'remote worker started' } ensure release_lock end |
#started? ⇒ Boolean
70 71 72 |
# File 'lib/datadog/core/remote/worker.rb', line 70 def started? @started end |
#stop ⇒ Object
49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 |
# File 'lib/datadog/core/remote/worker.rb', line 49 def stop Datadog.logger.debug { 'remote worker stopping' } acquire_lock thread = @thr if thread thread.kill thread.join end @started = false @thr = nil @stopped = true Datadog.logger.debug { 'remote worker stopped' } ensure release_lock end |