summaryrefslogtreecommitdiff
path: root/lib/chef/knife/status.rb
diff options
context:
space:
mode:
Diffstat (limited to 'lib/chef/knife/status.rb')
-rw-r--r--lib/chef/knife/status.rb69
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