lib/lusnoc/watcher.rb in lusnoc-0.1.2.16550 vs lib/lusnoc/watcher.rb in lusnoc-0.1.2.16562

- old
+ new

@@ -10,32 +10,43 @@ def initialize(base_url, timeout: 0, eclass: Lusnoc::TimeoutError, emessage: 'watch timeout') @base_url = base_url - @timeout = timeout - @eclass = eclass + @timeout = timeout + @eclass = eclass @emessage = emessage end # run Consul blocking request in a loop with timeout support. # break condition yielded by block call with response body - def run + def run(max_consul_wait: nil) logger.debug "Watch #{@base_url} with #{@timeout.inspect} timeout" last_x_consul_index = 1 Timeouter.loop!(@timeout, eclass: @eclass, message: @emessage) do |t| - wait_condition = t.left ? "&wait=#{t.left.to_i}s" : '' + wait_condition = build_wait_condition(@base_url, t.left, max_consul_wait) url = "#{@base_url}?index=#{last_x_consul_index}#{wait_condition}" resp = Lusnoc.http_get(url, timeout: t.left) return true if yield(resp.body) logger.debug "Watch #{@base_url} response: #{resp.body}" index = [Integer(resp['x-consul-index']), 1].max last_x_consul_index = (index < last_x_consul_index ? 1 : index) - sleep 1 + sleep 0.4 + end + end + + def build_wait_condition(_url, time_left, max_consul_wait) + if time_left + max = [t.left.to_i, max_consul_wait.to_i].max + "&wait=#{max}s" + elsif max_consul_wait + "&wait=#{max_consul_wait.to_i}s" + else + '' end end end end