class TestDiff::TimingTracker

estimates and prints how long it will take to empty a queue

Public Class Methods

new(queue) click to toggle source
# File lib/test_diff/timing_tracker.rb, line 11
def initialize(queue)
  @queue = queue
  @original_size = queue_size
end
run(queue, &block) click to toggle source
# File lib/test_diff/timing_tracker.rb, line 5
def self.run(queue, &block)
  new(queue).run(&block)
end

Public Instance Methods

run() { || ... } click to toggle source
# File lib/test_diff/timing_tracker.rb, line 16
def run
  @start_time = Time.now
  thread = start_timing_thread
  yield
  thread.kill
end

Private Instance Methods

do_timing() click to toggle source
# File lib/test_diff/timing_tracker.rb, line 43
def do_timing
  log_info "Timing #{@original_size} specs"
  sleep_time = 90.0
  until queue_empty?
    last_current_size = queue_size
    sleep(sleep_time)
    current_size = queue_size
    current_completed = last_current_size - current_size
    if current_completed > 0
      est_time_left = (sleep_time / current_completed.to_f) * current_size
      log_info "specs left #{current_size}, est time_left: #{est_time_left.to_i}"
    else
      log_info "specs left #{current_size}, est time_left: N/A"
    end
  end
end
queue_empty?() click to toggle source
# File lib/test_diff/timing_tracker.rb, line 60
def queue_empty?
  @queue.empty?
end
queue_size() click to toggle source
# File lib/test_diff/timing_tracker.rb, line 25
def queue_size
  @queue.size
end
seconds_elapsed() click to toggle source
# File lib/test_diff/timing_tracker.rb, line 29
def seconds_elapsed
  (Time.now - @start_time).to_f
end
start_timing_thread() click to toggle source
# File lib/test_diff/timing_tracker.rb, line 33
def start_timing_thread
  Thread.new do
    begin
      do_timing
    rescue => e
      log_error "----- Timing failed: #{e.message} -----"
    end
  end
end