Sha256: 521ec7dcaf708fad5e7a994ea13d955d17c406a92de303a71e0f40ab9bf2772f
Contents?: true
Size: 1.24 KB
Versions: 11
Compression:
Stored size: 1.24 KB
Contents
class Eye::Trigger::WaitDependency < Eye::Trigger param :names, [Array], true param :wait_timeout, [Numeric], nil, 15.seconds param :retry_after, [Numeric], nil, 1.minute param :should_start, [TrueClass, FalseClass] def check(transition) wait_dependency if transition.to_name == :starting end private def wait_dependency processes = names.map do |name| Eye::Control.find_nearest_process(name, process.group_name_pure, process.app_name) end.compact return if processes.empty? processes = Eye::Utils::AliveArray.new(processes) processes.each do |p| if p.state_name != :up && (should_start != false) p.schedule command: :start, reason: 'start_dependency' end end res = true processes.pmap do |p| name = p.name res &= process.wait_for_condition(wait_timeout, 0.5) do info "wait for #{name} until it :up" p.state_name == :up end end unless res warn "not waited for #{names} to be up" process.switch :unmonitoring if retry_after process.schedule in: retry_after, command: :start, reason: 'wait_dependency' end raise Eye::Process::StateError, 'stop transition because dependency is not up' end end end
Version data entries
11 entries across 11 versions & 1 rubygems