class Unleash::ScheduledExecutor
Attributes
interval[RW]
max_exceptions[RW]
name[RW]
retry_count[RW]
thread[RW]
Public Class Methods
new(name, interval, max_exceptions = 5)
click to toggle source
# File lib/unleash/scheduled_executor.rb, line 5 def initialize(name, interval, max_exceptions = 5) self.name = name || '' self.interval = interval self.max_exceptions = max_exceptions self.retry_count = 0 self.thread = nil end
Public Instance Methods
exit()
click to toggle source
# File lib/unleash/scheduled_executor.rb, line 38 def exit if self.running? Unleash.logger.warn "thread #{name} will exit!" self.thread.exit self.thread.join if self.running? else Unleash.logger.info "thread #{name} was already stopped!" end end
run(&blk)
click to toggle source
# File lib/unleash/scheduled_executor.rb, line 13 def run(&blk) self.thread = Thread.new do Thread.current[:name] = self.name Unleash.logger.debug "thread #{name} loop starting" loop do Unleash.logger.debug "thread #{name} sleeping for #{interval} seconds" sleep interval run_blk{ blk.call } if exceeded_max_exceptions? Unleash.logger.error "thread #{name} retry_count (#{self.retry_count}) exceeded " \ "max_exceptions (#{self.max_exceptions}). Stopping with retries." break end end Unleash.logger.debug "thread #{name} loop ended" end end
running?()
click to toggle source
# File lib/unleash/scheduled_executor.rb, line 34 def running? self.thread.is_a?(Thread) && self.thread.alive? end
Private Instance Methods
exceeded_max_exceptions?()
click to toggle source
# File lib/unleash/scheduled_executor.rb, line 62 def exceeded_max_exceptions? self.retry_count > self.max_exceptions end
run_blk() { |blk| ... }
click to toggle source
# File lib/unleash/scheduled_executor.rb, line 50 def run_blk(&blk) Unleash.logger.debug "thread #{name} starting execution" yield(blk) self.retry_count = 0 rescue StandardError => e self.retry_count += 1 Unleash.logger.error "thread #{name} threw exception #{e.class} " \ " (#{self.retry_count}/#{self.max_exceptions}): '#{e}'" Unleash.logger.debug "stacktrace: #{e.backtrace}" end