Class: EventLoop::Timer

Inherits:
Object show all
Includes:
SignalEmitter
Defined in:
lib/puppet/external/event-loop/event-loop.rb

Constant Summary collapse

DEFAULT_INTERVAL =
0.0
DEFAULT_TOLERANCE =
0.001

Instance Method Summary collapse

Methods included from SignalEmitter

#__maybe_initialize_signal_emitter, #__signal__, #add_signal_handler, included, #remove_signal_handler

Constructor Details

#initialize(options = {}, &handler) ⇒ Timer

Returns a new instance of Timer.



263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
# File 'lib/puppet/external/event-loop/event-loop.rb', line 263

def initialize (options={}, &handler)
  @running = false
  @start_time = nil

  options = { :interval => options } if options.kind_of? Numeric

  if options[:interval]
    @interval = options[:interval].to_f
  else
    @interval = DEFAULT_INTERVAL
  end

  if options[:tolerance]
    @tolerance = options[:tolerance].to_f
  elsif DEFAULT_TOLERANCE < @interval
    @tolerance = DEFAULT_TOLERANCE
  else
    @tolerance = 0.0
  end

  @event_loop = options[:event_loop] || EventLoop.current

  if block_given?
    add_signal_handler(:alarm, &handler)
    start unless options[:start?] == false
  else
    start if options[:start?]
  end
end

Instance Method Details

#end_timeObject



305
306
# File 'lib/puppet/external/event-loop/event-loop.rb', line 305

def end_time
@start_time + @interval end

#interval=(new_interval) ⇒ Object



299
300
301
302
303
# File 'lib/puppet/external/event-loop/event-loop.rb', line 299

def interval= (new_interval)
  old_interval = @interval
  @interval = new_interval
  @event_loop.check_timer(self) if new_interval < old_interval
end

#ready?Boolean

Returns:

  • (Boolean)


309
310
# File 'lib/puppet/external/event-loop/event-loop.rb', line 309

def ready?
time_left <= @tolerance end

#restartObject



312
313
314
# File 'lib/puppet/external/event-loop/event-loop.rb', line 312

def restart
  @start_time = Time.now
end

#running?Boolean

Returns:

  • (Boolean)


297
# File 'lib/puppet/external/event-loop/event-loop.rb', line 297

def running? ; @start_time != nil end

#sound_alarmObject



316
317
318
319
# File 'lib/puppet/external/event-loop/event-loop.rb', line 316

def sound_alarm
  signal :alarm
  restart if running?
end

#startObject



321
322
323
324
# File 'lib/puppet/external/event-loop/event-loop.rb', line 321

def start
  @start_time = Time.now
  @event_loop.monitor_timer(self)
end

#stopObject



326
327
328
329
# File 'lib/puppet/external/event-loop/event-loop.rb', line 326

def stop
  @start_time = nil
  @event_loop.ignore_timer(self)
end

#stopped?Boolean

Returns:

  • (Boolean)


296
# File 'lib/puppet/external/event-loop/event-loop.rb', line 296

def stopped? ; @start_time == nil end

#time_leftObject



307
308
# File 'lib/puppet/external/event-loop/event-loop.rb', line 307

def time_left
end_time - Time.now end