class NewRelic::Agent::EventLoop::Timer

Attributes

event[R]
interval[R]
last_fired_at[R]
next_fire_time[R]

Public Class Methods

new(interval, event, repeat = false) click to toggle source
# File lib/new_relic/agent/event_loop.rb, line 13
def initialize(interval, event, repeat = false)
  @interval = interval
  @event = event
  @repeat = repeat
  @started_at = Process.clock_gettime(Process::CLOCK_REALTIME)
  @last_fired_at = nil
  reschedule
end

Public Instance Methods

advance(amount) click to toggle source
# File lib/new_relic/agent/event_loop.rb, line 26
def advance(amount)
  @next_fire_time -= amount
end
calculate_next_fire_time() click to toggle source
# File lib/new_relic/agent/event_loop.rb, line 34
def calculate_next_fire_time
  now = Process.clock_gettime(Process::CLOCK_REALTIME)
  return now if @interval == 0

  fire_time = @last_fired_at || now
  while fire_time <= now
    fire_time += @interval
  end
  fire_time
end
due?(now = Process.clock_gettime(Process::CLOCK_REALTIME)) click to toggle source
# File lib/new_relic/agent/event_loop.rb, line 49
def due?(now = Process.clock_gettime(Process::CLOCK_REALTIME))
  now >= @next_fire_time
end
finished?() click to toggle source
# File lib/new_relic/agent/event_loop.rb, line 53
def finished?
  !@repeat && @last_fired_at
end
last_interval_start() click to toggle source
# File lib/new_relic/agent/event_loop.rb, line 30
def last_interval_start
  @last_fired_at || @started_at
end
reschedule() click to toggle source
# File lib/new_relic/agent/event_loop.rb, line 22
def reschedule
  @next_fire_time = calculate_next_fire_time
end
set_fired_time() click to toggle source
# File lib/new_relic/agent/event_loop.rb, line 45
def set_fired_time
  @last_fired_at = Process.clock_gettime(Process::CLOCK_REALTIME)
end