class StackMaster::StackEvents::Streamer
Constants
- StackFailed
Public Class Methods
new(stack_name, region, from: Time.now, break_on_finish_state: true, sleep_between_fetches: 1, io: nil, &block)
click to toggle source
# File lib/stack_master/stack_events/streamer.rb, line 10 def initialize(stack_name, region, from: Time.now, break_on_finish_state: true, sleep_between_fetches: 1, io: nil, &block) @stack_name = stack_name @region = region @block = block @seen_events = Set.new @from = from @break_on_finish_state = break_on_finish_state @sleep_between_fetches = sleep_between_fetches @io = io end
stream(stack_name, region, **args, &block)
click to toggle source
# File lib/stack_master/stack_events/streamer.rb, line 6 def self.stream(stack_name, region, **args, &block) new(stack_name, region, **args, &block).stream end
Public Instance Methods
stream()
click to toggle source
# File lib/stack_master/stack_events/streamer.rb, line 21 def stream catch(:halt) do loop do events = Fetcher.fetch(@stack_name, @region, from: @from) unseen_events(events).each do |event| @block.call(event) if @block Presenter.print_event(@io, event) if @io if @break_on_finish_state && finish_state?(event) exit_with_error(event) if failure_state?(event) throw :halt end end sleep @sleep_between_fetches end end rescue Interrupt end
Private Instance Methods
exit_with_error(event)
click to toggle source
# File lib/stack_master/stack_events/streamer.rb, line 63 def exit_with_error(event) raise StackFailed, "#{event.logical_resource_id} did not succeed (last state was #{event.resource_status})" end
failure_state?(event)
click to toggle source
# File lib/stack_master/stack_events/streamer.rb, line 57 def failure_state?(event) StackStates.failure_state?(event.resource_status) && event.resource_type == 'AWS::CloudFormation::Stack' && event.logical_resource_id == @stack_name end
finish_state?(event)
click to toggle source
# File lib/stack_master/stack_events/streamer.rb, line 51 def finish_state?(event) StackStates.finish_state?(event.resource_status) && event.resource_type == 'AWS::CloudFormation::Stack' && event.logical_resource_id == @stack_name end
unseen_events(events)
click to toggle source
# File lib/stack_master/stack_events/streamer.rb, line 41 def unseen_events(events) [].tap do |unseen_events| events.each do |event| next if @seen_events.include?(event.event_id) @seen_events << event.event_id unseen_events << event end end end