class Sfn::Command::Events
Events
command
Attributes
stack[R]
@return [Miasma::Models::Orchestration::Stack]
Public Instance Methods
allowed_attributes()
click to toggle source
@return [Array<String>] allowed attributes for events
Calls superclass method
# File lib/sfn/command/events.rb, line 121 def allowed_attributes result = super unless @stacks.size > 1 result.delete("stack_name") end result end
default_attributes()
click to toggle source
@return [Array<String>] default attributes for events
# File lib/sfn/command/events.rb, line 116 def default_attributes %w(stack_name time resource_logical_id resource_status resource_status_reason) end
discover_stacks(stack)
click to toggle source
Discover stacks defined within the resources of given stack
@param stack [Miasma::Models::Orchestration::Stack]
# File lib/sfn/command/events.rb, line 111 def discover_stacks(stack) @stacks = [stack] + stack.nested_stacks.reverse end
execute!()
click to toggle source
Run the events list action
# File lib/sfn/command/events.rb, line 13 def execute! name_required! name = name_args.first ui.info "Events for Stack: #{ui.color(name, :bold)}\n" @seen_events = [] @stack = provider.stack(name) if stack api_action!(:api_stack => stack) do table = ui.table(self) do table(:border => false) do events = get_events row(:header => true) do allowed_attributes.each do |attr| width_val = events.map { |e| e[attr].to_s.length }.push(attr.length).max + 2 width_val = width_val > 70 ? 70 : width_val < 20 ? 20 : width_val column attr.split("_").map(&:capitalize).join(" "), :width => width_val end end events.each do |event| row do allowed_attributes.each do |attr| column event[attr] end end end end end.display if config[:poll] while (stack.reload.in_progress?) to_wait = config.fetch(:poll_wait_time, 10).to_f while (to_wait > 0) sleep(0.1) to_wait -= 0.1 end stack.resources.reload table.display end end end else ui.fatal "Failed to locate requested stack: #{ui.color(name, :bold, :red)}" raise "Failed to locate stack: #{name}!" end end
get_events(*args)
click to toggle source
Fetch events from stack
@param stack [Miasma::Models::Orchestration::Stack] @param last_id [String] only return events after this ID @return [Array<Hash>]
# File lib/sfn/command/events.rb, line 63 def get_events(*args) stack_events = discover_stacks(stack).map do |i_stack| i_events = [] begin if @initial_complete && i_stack.in_progress? i_events = i_stack.events.update! else i_events = i_stack.events.all end rescue => e if e.class.to_s.start_with?("Errno") ui.warn "Connection error encountered: #{e.message} (retrying)" ui.debug "#{e.class}: #{e}\n#{e.backtrace.join("\n")}" else ui.error "Unexpected error received fetching events: #{e.message}" ui.debug "#{e.class}: #{e}\n#{e.backtrace.join("\n")}" end sleep(5) retry end if i_events i_events.map do |e| e.attributes.merge(:stack_name => i_stack.name).to_smash end end end.flatten.compact.find_all { |e| e[:time] }.reverse stack_events.delete_if { |evt| @seen_events.include?(evt) } @seen_events.concat(stack_events) unless @initial_complete stack_events = stack_events.sort_by { |e| e[:time] } unless config[:all_events] start_index = stack_events.rindex do |item| item[:stack_name] == stack.name && item[:resource_state].to_s.end_with?("in_progress") && item[:resource_status_reason].to_s.downcase.include?("user init") end if start_index stack_events.slice!(0, start_index) end end @initial_complete = true end stack_events end