class Opsicle::FailureLog

Attributes

client[R]
stack[R]

Public Class Methods

new(environment) click to toggle source
# File lib/opsicle/commands/failure_log.rb, line 5
def initialize(environment)
  @environment = environment
  @client = Client.new(environment)
  @stack = Opsicle::Stack.new(@client)
end

Public Instance Methods

execute() click to toggle source
# File lib/opsicle/commands/failure_log.rb, line 11
def execute
  puts "Getting most recent failure log..."

  fetch
end
fetch() click to toggle source
# File lib/opsicle/commands/failure_log.rb, line 17
def fetch
  failed_deployments = fetch_failed_deployments

  unless failed_deployments.empty?
    failed_deployment_id = failed_deployments.first.deployment_id
    failed_deployments_instances = failed_deployments.first.instance_ids

    unless failed_deployments_instances.empty?
      involved_instance_id = fetch_instance_id(failed_deployments_instances)

      target_failed_command = fetch_target_command(involved_instance_id, failed_deployment_id)
      log_url = target_failed_command.first.log_url
    
      system("open", log_url) if log_url
      puts "Unable to find a url to open." unless log_url
    else
      puts "There is at least one failed deployment, but there is no log available for that failure."
    end
  else
    puts "No failed deployments in available history."
  end
end
fetch_failed_deployments() click to toggle source
# File lib/opsicle/commands/failure_log.rb, line 40
def fetch_failed_deployments
  deployments = @client.opsworks.describe_deployments(stack_id: @stack.stack_id).deployments
  deployments.select{ |deploy| deploy.status.eql? "failed" }
end
fetch_instance_id(failed_deployments_instances) click to toggle source
# File lib/opsicle/commands/failure_log.rb, line 45
def fetch_instance_id(failed_deployments_instances)
  involved_instances = @client.opsworks.describe_instances(instance_ids: failed_deployments_instances).instances
  choice = select_instance(involved_instances)
  involved_instances[choice-1].instance_id
end
fetch_target_command(involved_instance_id, failed_deployment_id) click to toggle source
# File lib/opsicle/commands/failure_log.rb, line 51
def fetch_target_command(involved_instance_id, failed_deployment_id)
  command_list = @client.opsworks.describe_commands(instance_id: involved_instance_id)[:commands]
  command_list.select{ |command| command.deployment_id == failed_deployment_id }
end
select_instance(instance_list) click to toggle source
# File lib/opsicle/commands/failure_log.rb, line 56
def select_instance(instance_list)
  if instance_list.length == 1
    choice = 1
  else
    Output.say "Choose an Opsworks instance:"
    instance_list.each_with_index do |instance, index|
      Output.say "#{index+1}) #{instance[:hostname]}"
    end
    choice = Output.ask("? ", Integer) { |q| q.in = 1..instance_list.length }
  end
  return choice
end