module Fluent::PluginHelper::Timer

def initialize

def initialize
  super
  @_timers ||= Set.new
end

def start

def start
  super
  @_timer_running = true
end

def stop

def stop
  super
  @_timer_running = false
end

def terminate

def terminate
  super
  @_timers = nil
end

def timer_execute(title, interval, repeat: true, &block)

interval: integer/float, repeat: true/false
def timer_execute(title, interval, repeat: true, &block)
  raise ArgumentError, "BUG: title must be a symbol" unless title.is_a? Symbol
  raise ArgumentError, "BUG: block not specified for callback" unless block_given?
  checker = ->(){ @_timer_running }
  detacher = ->(watcher){ event_loop_detach(watcher) }
  timer = TimerWatcher.new(title, interval, repeat, log, checker, detacher, &block)
  @_timers << title
  event_loop_attach(timer)
  timer
end

def timer_running?

def timer_running?
  defined?(@_timer_running) && @_timer_running
end