Sha256: a08ebbbba2e2d5e06cf2dbe151c67a32792b2d040e0ccb0d15348fe3e4b63cad

Contents?: true

Size: 1.53 KB

Versions: 45

Compression:

Stored size: 1.53 KB

Contents

require 'time'
require 'benchmark'

module OpsManagerUiDrivers
  module WaitHelper
    SLEEP_INTERVAL = 1

    EarlyFailException = Class.new(Exception)

    def wait(retries_left=20, interval=0.5, &blk)
      blk.call
    rescue EarlyFailException
      raise
    rescue RSpec::Expectations::ExpectationNotMetError, StandardError
      puts "------- retries_left=#{retries_left}"
      retries_left -= 1
      if retries_left > 0
        sleep(interval)
        retry
      else
        puts "------- propagate error=#{retries_left}"
        raise
      end
    end

    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

45 entries across 45 versions & 1 rubygems

Version Path
ops_manager_ui_drivers-1.8.1 lib/ops_manager_ui_drivers/wait_helper.rb
ops_manager_ui_drivers-1.8.0 lib/ops_manager_ui_drivers/wait_helper.rb
ops_manager_ui_drivers-1.7.3 lib/ops_manager_ui_drivers/wait_helper.rb
ops_manager_ui_drivers-1.7.1 lib/ops_manager_ui_drivers/wait_helper.rb
ops_manager_ui_drivers-1.7.0 lib/ops_manager_ui_drivers/wait_helper.rb
ops_manager_ui_drivers-1.6.3 lib/ops_manager_ui_drivers/wait_helper.rb
ops_manager_ui_drivers-1.6.2 lib/ops_manager_ui_drivers/wait_helper.rb
ops_manager_ui_drivers-1.5.1 lib/ops_manager_ui_drivers/wait_helper.rb
ops_manager_ui_drivers-1.6.1 lib/ops_manager_ui_drivers/wait_helper.rb
ops_manager_ui_drivers-1.6.0 lib/ops_manager_ui_drivers/wait_helper.rb
ops_manager_ui_drivers-1.5.0 lib/ops_manager_ui_drivers/wait_helper.rb
ops_manager_ui_drivers-1.4.0 lib/ops_manager_ui_drivers/wait_helper.rb
ops_manager_ui_drivers-1.3.1 lib/ops_manager_ui_drivers/wait_helper.rb
ops_manager_ui_drivers-1.3.0 lib/ops_manager_ui_drivers/wait_helper.rb
ops_manager_ui_drivers-1.2.1 lib/ops_manager_ui_drivers/wait_helper.rb
ops_manager_ui_drivers-1.2.0 lib/ops_manager_ui_drivers/wait_helper.rb
ops_manager_ui_drivers-1.1.0 lib/ops_manager_ui_drivers/wait_helper.rb
ops_manager_ui_drivers-1.0.0 lib/ops_manager_ui_drivers/wait_helper.rb
ops_manager_ui_drivers-0.16.0 lib/ops_manager_ui_drivers/wait_helper.rb
ops_manager_ui_drivers-0.15.2 lib/ops_manager_ui_drivers/wait_helper.rb