class Fluent::PluginHelper::Timer::TimerWatcher

def initialize(title, interval, repeat, log, checker, detacher, &callback)

def initialize(title, interval, repeat, log, checker, detacher, &callback)
  @title = title
  @callback = callback
  @repeat = repeat
  @log = log
  @checker = checker
  @detacher = detacher
  super(interval, repeat)
end

def on_timer

def on_timer
  @callback.call if @checker.call
rescue => e
  @log.error "Unexpected error raised. Stopping the timer.", title: @title, error: e
  @log.error_backtrace
  detach
  @log.error "Timer detached.", title: @title
ensure
  @detacher.call(self) unless @repeat
end