Fixed bug where server would crash if an invalid logtype was supplied to

search.rb. Instead server now returns zero results.
This commit is contained in:
Greg Retkowski 2009-09-10 21:03:24 +00:00
parent fac8def339
commit 13a54a1620

View file

@ -73,7 +73,17 @@ module LogStash; module Net; module Servers
def SearchRequestHandler(request) def SearchRequestHandler(request)
puts "Search for #{request.query.inspect}" puts "Search for #{request.query.inspect}"
response = LogStash::Net::Messages::SearchResponse.new
response.id = request.id
if $logs[request.log_type].nil?
puts "invalid log type: #{request.log_type}"
response.results = []
response.finished = true
puts response.inspect
yield response
return
end
reader = Ferret::Index::IndexReader.new($logs[request.log_type].index_dir) reader = Ferret::Index::IndexReader.new($logs[request.log_type].index_dir)
search = Ferret::Search::Searcher.new(reader) search = Ferret::Search::Searcher.new(reader)
qp = Ferret::QueryParser.new(:fields => reader.fields, qp = Ferret::QueryParser.new(:fields => reader.fields,
@ -114,18 +124,14 @@ module LogStash; module Net; module Servers
if (total and count < limit) if (total and count < limit)
done = true done = true
end end
part_response = LogStash::Net::Messages::SearchResponse.new
response = LogStash::Net::Messages::SearchResponse.new part_response.id = request.id
response.id = request.id part_response.results = results
response.results = results part_response.finished = false
response.finished = false yield part_response
yield response
results = [] results = []
offset += count offset += count
end end
response = LogStash::Net::Messages::SearchResponse.new
response.id = request.id
response.results = [] response.results = []
response.finished = true response.finished = true
puts response.inspect puts response.inspect
@ -134,7 +140,14 @@ module LogStash; module Net; module Servers
def SearchHitsRequestHandler(request) def SearchHitsRequestHandler(request)
puts "Search for #{request.query.inspect}" puts "Search for #{request.query.inspect}"
response = LogStash::Net::Messages::SearchHitsResponse.new
response.id = request.id
if $logs[request.log_type].nil?
puts "invalid log type: #{request.log_type}"
response.hits = 0
yield response
return
end
reader = Ferret::Index::IndexReader.new($logs[request.log_type].index_dir) reader = Ferret::Index::IndexReader.new($logs[request.log_type].index_dir)
search = Ferret::Search::Searcher.new(reader) search = Ferret::Search::Searcher.new(reader)
qp = Ferret::QueryParser.new(:fields => reader.fields, qp = Ferret::QueryParser.new(:fields => reader.fields,
@ -146,8 +159,6 @@ module LogStash; module Net; module Servers
# search_each returns number of hits, even if we don't yield them. # search_each returns number of hits, even if we don't yield them.
hits = search.search_each(query, :limit => 1, :offset => offset, hits = search.search_each(query, :limit => 1, :offset => offset,
:sort => "@DATE") { |docid, score| } :sort => "@DATE") { |docid, score| }
response = LogStash::Net::Messages::SearchHitsResponse.new
response.id = request.id
response.hits = hits response.hits = hits
yield response yield response
end # def SearchHitsRequestHandler end # def SearchHitsRequestHandler