class ScoutApm::BackgroundWorker

Constants

DEFAULT_PERIOD

in seconds, time between when the worker thread wakes up and runs.

Attributes

context[R]
period[R]

Public Class Methods

new(context, period=DEFAULT_PERIOD) click to toggle source
# File lib/scout_apm/background_worker.rb, line 11
def initialize(context, period=DEFAULT_PERIOD)
  @context = context
  @period = period
  @keep_running = true
end

Public Instance Methods

logger() click to toggle source
# File lib/scout_apm/background_worker.rb, line 17
def logger
  context.logger
end
run_once() click to toggle source

Runs the task passed to start once.

# File lib/scout_apm/background_worker.rb, line 31
def run_once
  @task.call if @task
end
running?() click to toggle source
# File lib/scout_apm/background_worker.rb, line 21
def running?
  @keep_running
end
start(&block) click to toggle source

Starts running the passed block every 60 seconds (starting now).

# File lib/scout_apm/background_worker.rb, line 36
def start(&block)
  @task = block

  logger.debug "Background Worker: starting to run every #{period} seconds"

  # The first run should be 1 period of time from now
  next_time = Time.now + period

  loop do
    begin
      now = Time.now

      # Sleep the correct amount of time to reach next_time
      while now < next_time && @keep_running
        sleep_time = next_time - now
        sleep(sleep_time) if sleep_time > 0
        now = Time.now
      end

      # Bail out if @keep_running is false
      unless @keep_running
        logger.debug "Background Worker: breaking from loop"
        break
      end

      @task.call

      # Adjust the next time to run forward by @periods until it is in the future
      while next_time <= now
        next_time += period
      end
    rescue
      logger.debug "Background Worker Exception!"
      logger.debug $!.message
      logger.debug $!.backtrace
    end
  end
end
stop() click to toggle source
# File lib/scout_apm/background_worker.rb, line 25
def stop
  logger.debug "Background Worker: stop requested"
  @keep_running = false
end