Sha256: 1d2a243342e6c029008c2ed9064e76a33a74313f72ebfd59340c9f565f2ccc76

Contents?: true

Size: 1.13 KB

Versions: 5

Compression:

Stored size: 1.13 KB

Contents

require 'time'
require 'benchmark'

module OpsManagerUiDrivers
  module WaitHelper
    SLEEP_INTERVAL = 1

    EarlyFailException = Class.new(Exception)

    def fail_early(msg)
      fail(EarlyFailException.new(msg))
    end

    def poll_up_to_mins(minutes, &blk)
      wait_debug("Polling for up to #{minutes} mins") do
        wait_until(minutes_to_time(minutes), &blk)
      end
    end

    private

    def wait_debug(title, &blk)
      puts("--- BEGIN #{title} @ #{DateTime.now}")
      Benchmark.bm do |x|
        x.report { blk.call }
      end
    ensure
      puts("--- END   #{title} @ #{DateTime.now}")
    end

    def wait_until(end_time, &blk)
      blk.call
    rescue EarlyFailException
      raise
    rescue RSpec::Expectations::ExpectationNotMetError, StandardError
      seconds_left = (end_time - Time.now).round
      puts "------- time_left=#{seconds_left} sec"
      if seconds_left > SLEEP_INTERVAL
        sleep(SLEEP_INTERVAL)
        retry
      else
        puts "------- propagate error=#{seconds_left}"
        raise
      end
    end

    def minutes_to_time(minutes)
      Time.now + (minutes * 60)
    end
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
ops_manager_ui_drivers-0.5.0 lib/ops_manager_ui_drivers/wait_helper.rb
ops_manager_ui_drivers-0.4.1 lib/ops_manager_ui_drivers/wait_helper.rb
ops_manager_ui_drivers-0.4.0 lib/ops_manager_ui_drivers/wait_helper.rb
ops_manager_ui_drivers-0.3.0 lib/ops_manager_ui_drivers/wait_helper.rb
ops_manager_ui_drivers-0.2.0 lib/ops_manager_ui_drivers/wait_helper.rb