waitutil
waitutil provides tools for waiting for various conditions to occur, with a configurable
delay time, timeout, and logging.
GitHub: https://github.com/rubytools/waitutil
RubyGems: http://rubygems.org/gems/waitutil
Documentation: http://rubytools.github.io/waitutil/
Examples
Wait methods take a block that returns true or false.
Waiting for conditions
Maximum wait time is one minute by default, and the delay time is one second.
WaitUtil.wait_for_condition("my_event to happen") do
check_if_my_event_happened
end
Customized wait time and delay time
WaitUtil.wait_for_condition("my_event to happen", :timeout_sec => 30, :delay_sec => 0.5) do
check_if_my_event_happened
end
Verbose logging
WaitUtil.wait_for_condition('my event', :verbose => true) { sleep(1) }
Output:
I, [2014-02-16T00:34:31.511915 #15897] INFO -- : Waiting for my event for up to 60 seconds
I, [2014-02-16T00:34:32.512223 #15897] INFO -- : Success waiting for my event (1.000153273 seconds)
Returning additional information for the timeout log message
attempt = 1
WaitUtil.wait_for_condition('my event', :verbose => true, :timeout_sec => 3, :delay_sec => 1) do
sleep(1)
attempt += 1
[false, "attempt #{attempt}"] # the second element goes into the log message
end
Output:
I, [2014-02-16T00:46:53.647936 #17252] INFO -- : Waiting for my event for up to 3 seconds
WaitUtil::TimeoutError: Timed out waiting for my event (3 seconds elapsed): attempt 3
from /home/mbautin/.rvm/gems/ruby-2.1.0/gems/waitutil-0.1.0/lib/waitutil.rb:39:in `wait_for_condition'
from (irb):9
from /home/mbautin/.rvm/rubies/ruby-2.1.0/bin/irb:11:in `<main>'
Waiting for service availability
Wait for a TCP server to be available using wait_for_service:
WaitUtil.wait_for_service('my service', 'example.com', 80)
