- Update Clients::Search to block on the search ops.

Clients::Search#search now returns [hits, results_array]
This commit is contained in:
Jordan Sissel 2009-10-21 02:06:38 +00:00
parent a35abbbdad
commit 1b7e57b8d0
4 changed files with 29 additions and 12 deletions

View file

@ -12,19 +12,19 @@ def main(args)
$stderr.puts "Usage: search configfile log_type query"
end
client = LogStash::Net::Clients::Search.new(args[0])
client.search({
hits, results = client.search({
:log_type => args[1],
:query => args[2],
:limit => 100,
})
# Wait for the client to decide it's done.
client.run
#client.run
# Collate & print results.
puts "Hits: #{client.hits}"
puts "Hits: #{hits}"
puts ""
puts client.results.sort_by { |r| r[0] }.collect { |r| r[1] }.join("\n")
puts results.sort_by { |r| r[0] }.collect { |r| r[1] }.join("\n")
return 0
end

View file

@ -74,10 +74,27 @@ module LogStash::Net::Clients
search_msg.query = options[:query]
search_msg.limit = options[:limit]
search_msg.offset = options[:offset]
hits = 0
results = []
ops = []
@indexers.each do |i|
sendmsg(i, hits_msg)
sendmsg(i, search_msg)
ops << sendmsg(i, hits_msg) do |msg|
hits += msg.hits
:finished
end
ops << sendmsg(i, search_msg) do |msg|
msg.results.each do |result|
results << result
end
:finished if msg.finished
end
end
ops.each do |op|
op.wait_until_finished
end
return [hits, results]
end
end; end # class LogStash::Net::Clients::Search

View file

@ -16,10 +16,10 @@ class Search < Application
@search = LogStash::Net::Clients::Search.new("/home/jls/projects/logstash/logstashd.yaml")
params[:query] = params[:q]
@search.search(params)
Timeout.timeout(10) do
@search.run
@hits, @results = @search.search(params)
#@search.run
render
end
end

View file

@ -8,14 +8,14 @@
<% end =%>
<hr>
<h4>Results <%= params[:offset] %> - <%= params[:offset] + params[:limit] %> of <%= @search.hits %> for <%=h params[:q] %></h4>
<h4>Results <%= params[:offset] %> - <%= params[:offset] + params[:limit] %> of <%= @hits %> for <%=h params[:q] %></h4>
<% if params[:offset] > 0 %>
<%= link_to "prev", url(:controller => "search", :action => "query", :q => params[:q], :offset => [0, params[:offset] - params[:limit]].max, :limit => params[:limit]), :log_type => params[:log_type] %>
<% end %>
<% if params[:offset] + params[:limit] < @search.hits %>
<%= link_to "next", url(:controller => "search", :action => "query", :q => params[:q], :offset => [@search.hits - params[:limit], params[:offset] + params[:limit]].min, :limit => params[:limit], :log_type => params[:log_type]) %>
<% if params[:offset] + params[:limit] < @hits %>
<%= link_to "next", url(:controller => "search", :action => "query", :q => params[:q], :offset => [@hits - params[:limit], params[:offset] + params[:limit]].min, :limit => params[:limit], :log_type => params[:log_type]) %>
<% end %>
<pre>
<%=h @search.results.sort_by { |r| r[0] }.collect { |r| r[1] }.join("\n") %>
<%=h @results.sort_by { |r| r[0] }.collect { |r| r[1] }.join("\n") %>
</pre>