class Chef::Knife::Status

Public Instance Methods

highline() click to toggle source
# File lib/chef/knife/status.rb, line 47
def highline
  @h ||= HighLine.new
end
run() click to toggle source
# File lib/chef/knife/status.rb, line 51
def run
  all_nodes = []
  q = Chef::Search::Query.new
  query = @name_args[0] || "*:*"
  q.search(:node, query) do |node|
    all_nodes << node
  end
  all_nodes.sort { |n1, n2|
    if (config[:sort_reverse] || Chef::Config[:knife][:sort_status_reverse])
      (n2["ohai_time"] or 0) <=> (n1["ohai_time"] or 0)
    else
      (n1["ohai_time"] or 0) <=> (n2["ohai_time"] or 0)
    end
  }.each do |node|
    if node.has_key?("ec2")
      fqdn = node['ec2']['public_hostname']
      ipaddress = node['ec2']['public_ipv4']
    else
      fqdn = node['fqdn']
      ipaddress = node['ipaddress']
    end
    hours, minutes, seconds = time_difference_in_hms(node["ohai_time"])
    hours_text   = "#{hours} hour#{hours == 1 ? ' ' : 's'}"
    minutes_text = "#{minutes} minute#{minutes == 1 ? ' ' : 's'}"
    run_list = "#{node.run_list}" if config[:run_list]
    if hours > 24
      color = :red
      text = hours_text
    elsif hours >= 1
      color = :yellow
      text = hours_text
    else
      color = :green
      text = minutes_text
    end

    line_parts = Array.new
    line_parts << @ui.color(text, color) + " ago" << node.name
    line_parts << fqdn if fqdn
    line_parts << ipaddress if ipaddress
    line_parts << run_list if run_list

    if node['platform']
      platform = node['platform']
      if node['platform_version']
        platform << " #{node['platform_version']}"
      end
      line_parts << platform
    end
    highline.say(line_parts.join(', ') + '.') unless (config[:hide_healthy] && hours < 1)
  end

end