class Chef::Knife::Status

Public Instance Methods

append_to_query(term) click to toggle source
# File lib/chef/knife/status.rb, line 49
def append_to_query(term)
  @query << " AND " unless @query.empty?
  @query << term
end
run() click to toggle source
# File lib/chef/knife/status.rb, line 54
def run
  ui.use_presenter Knife::Core::StatusPresenter

  if config[:long_output]
    opts = {}
  else
    opts = { filter_result:
           { name: ["name"], ipaddress: ["ipaddress"], ohai_time: ["ohai_time"],
             cloud: ["cloud"], run_list: ["run_list"], platform: ["platform"],
             platform_version: ["platform_version"], chef_environment: ["chef_environment"] } }
  end

  @query ||= ""
  append_to_query(@name_args[0]) if @name_args[0]
  append_to_query("chef_environment:#{config[:environment]}") if config[:environment]

  if config[:hide_by_mins]
    hide_by_mins = config[:hide_by_mins].to_i
    time = Time.now.to_i
    # AND NOT is not valid lucene syntax, so don't use append_to_query
    @query << " " unless @query.empty?
    @query << "NOT ohai_time:[#{(time - hide_by_mins * 60)} TO #{time}]"
  end

  @query = @query.empty? ? "*:*" : @query

  all_nodes = []
  q = Chef::Search::Query.new
  Chef::Log.info("Sending query: #{@query}")
  q.search(:node, @query, opts) do |node|
    all_nodes << node
  end

  all_nodes.sort_by! { |n| n["ohai_time"] || 0 }
  all_nodes.reverse! if config[:sort_reverse] || config[:sort_status_reverse]

  output(all_nodes)
end