class OneApm::Support::WorkerLoop
Attributes
iterations[R]
period[RW]
propagate_errors[RW]
Public Class Methods
new(opts = {})
click to toggle source
# File lib/one_apm/support/event/worker_loop.rb, line 13 def initialize(opts = {}) @should_run = true @next_invocation_time = Time.now @period = 60.0 @duration = opts[:duration] if opts[:duration] @limit = opts[:limit] if opts[:limit] @iterations = 0 @propagate_errors = opts.fetch(:propagate_errors, false) end
Public Instance Methods
keep_running?()
click to toggle source
# File lib/one_apm/support/event/worker_loop.rb, line 52 def keep_running? @should_run && under_duration? && under_limit? end
run(period = nil, &block)
click to toggle source
# File lib/one_apm/support/event/worker_loop.rb, line 34 def run(period = nil, &block) setup(period, block) while keep_running? do sleep_time = schedule_next_invocation sleep(sleep_time) if sleep_time > 0 run_task if keep_running? @iterations += 1 end end
run_task()
click to toggle source
# File lib/one_apm/support/event/worker_loop.rb, line 68 def run_task if @propagate_errors @task.call else begin @task.call rescue OneApm::ForceRestartException, OneApm::ForceDisconnectException raise rescue => e OneApm::Manager.logger.error "Error running task in Agent Worker Loop:", e end end end
schedule_next_invocation()
click to toggle source
# File lib/one_apm/support/event/worker_loop.rb, line 44 def schedule_next_invocation now = Time.now while @next_invocation_time <= now && @period > 0 @next_invocation_time += @period end @next_invocation_time - Time.now end
setup(period, task)
click to toggle source
# File lib/one_apm/support/event/worker_loop.rb, line 23 def setup(period, task) @task = task @period = period if period @should_run = true @iterations = 0 now = Time.now @deadline = now + @duration if @duration @next_invocation_time = (now + @period) end
stop()
click to toggle source
# File lib/one_apm/support/event/worker_loop.rb, line 64 def stop @should_run = false end
under_duration?()
click to toggle source
# File lib/one_apm/support/event/worker_loop.rb, line 56 def under_duration? !@deadline || Time.now < @deadline end
under_limit?()
click to toggle source
# File lib/one_apm/support/event/worker_loop.rb, line 60 def under_limit? @limit.nil? || @iterations < @limit end