diff options
Diffstat (limited to 'lib/chef/knife/status.rb')
-rw-r--r-- | lib/chef/knife/status.rb | 69 |
1 files changed, 11 insertions, 58 deletions
diff --git a/lib/chef/knife/status.rb b/lib/chef/knife/status.rb index 5906a4a624..93e81f8f03 100644 --- a/lib/chef/knife/status.rb +++ b/lib/chef/knife/status.rb @@ -17,13 +17,13 @@ # require 'chef/knife' +require 'chef/knife/core/status_presenter' class Chef class Knife class Status < Knife deps do - require 'highline' require 'chef/search/query' end @@ -44,74 +44,27 @@ class Chef :long => "--hide-healthy", :description => "Hide nodes that have run chef in the last hour" - def highline - @h ||= HighLine.new - end - def run + ui.use_presenter Knife::Core::StatusPresenter all_nodes = [] q = Chef::Search::Query.new - query = @name_args[0] || "*:*" + query = @name_args[0] ? @name_args[0].dup : '*:*' + if config[:hide_healthy] + time = Time.now.to_i + query_unhealthy = "NOT ohai_time:[" << (time - 60*60).to_s << " TO " << time.to_s << "]" + query << ' AND ' << query_unhealthy << @name_args[0] if @name_args[0] + query = query_unhealthy unless @name_args[0] + end q.search(:node, query) do |node| all_nodes << node end - all_nodes.sort { |n1, n2| + output(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 - - # :nodoc: - # TODO: this is duplicated from StatusHelper in the Webui. dedup. - def time_difference_in_hms(unix_time) - now = Time.now.to_i - difference = now - unix_time.to_i - hours = (difference / 3600).to_i - difference = difference % 3600 - minutes = (difference / 60).to_i - seconds = (difference % 60) - return [hours, minutes, seconds] + }) end end |