mirror of
https://github.com/elastic/logstash.git
synced 2025-04-24 14:47:19 -04:00
59 lines
1.5 KiB
Ruby
59 lines
1.5 KiB
Ruby
|
|
require "em-http-request"
|
|
require "logstash/namespace"
|
|
require "logstash/logging"
|
|
|
|
module LogStash::Web; end
|
|
class LogStash::Web::ElasticSearch
|
|
def initialize
|
|
@logger = LogStash::Logger.new(STDOUT)
|
|
end
|
|
|
|
def search(params)
|
|
http = EventMachine::HttpRequest.new("http://localhost:9200/_search")
|
|
params[:offset] ||= 0
|
|
params[:count] ||= 20
|
|
|
|
@logger.info(["Query", params])
|
|
esreq = {
|
|
"sort" => [
|
|
{ "@timestamp" => "desc" }
|
|
],
|
|
"query" => {
|
|
"query_string" => {
|
|
"query" => params[:q],
|
|
"default_operator" => "AND"
|
|
} # query_string
|
|
}, # query
|
|
"facets" => {
|
|
"by_hour" => {
|
|
"histogram" => {
|
|
"field" => "@timestamp",
|
|
"time_interval" => "1h",
|
|
}, # histogram
|
|
}, # by_hour
|
|
}, # facets
|
|
"from" => params[:offset],
|
|
"size" => params[:count],
|
|
}
|
|
#@logger.info(["ElasticSearch Query", esreq])
|
|
start_time = Time.now
|
|
req = http.get :body => esreq.to_json
|
|
req.callback do
|
|
#headers req.response_header
|
|
data = JSON.parse(req.response)
|
|
data["duration"] = Time.now - start_time
|
|
@logger.info(["Got search results",
|
|
{ :query => params[:q], :duration => data["duration"]}])
|
|
@logger.info(data)
|
|
if req.response_header.status != 200
|
|
@error = data["error"]
|
|
end
|
|
yield data
|
|
end
|
|
req.errback do
|
|
@logger.warn(["Query failed", params, req.response])
|
|
yield :failure
|
|
end
|
|
end # def search
|
|
end
|