From 6c4c36cdd7d4c8ce9ad615d8c012b55e782fe3b2 Mon Sep 17 00:00:00 2001 From: Pete Fritchman Date: Mon, 19 Oct 2009 06:56:07 +0000 Subject: [PATCH] - support querying what log types are available --- bin/list_log_types.rb | 44 ++++++++++++++++++++++++++++++++++++ lib/logs.rb | 4 ++++ lib/net/messages/logtypes.rb | 24 ++++++++------------ lib/net/servers/indexer.rb | 7 ++++++ 4 files changed, 64 insertions(+), 15 deletions(-) create mode 100755 bin/list_log_types.rb diff --git a/bin/list_log_types.rb b/bin/list_log_types.rb new file mode 100755 index 000000000..c16da6410 --- /dev/null +++ b/bin/list_log_types.rb @@ -0,0 +1,44 @@ +#!/usr/bin/ruby +# +require 'rubygems' +require "socket" +require "lib/net/message" +require "lib/net/client" +require "lib/net/messages/logtypes" + +Thread::abort_on_exception = true + +class LogTypesClient < LogStash::Net::MessageClient + attr_reader :types + + def initialize(opts) + @types = [] + super(opts) + start + end + + def start + msg = LogStash::Net::Messages::LogTypesRequest.new + sendmsg("logstash-index", msg) + run + end + + def LogTypesResponseHandler(msg) + @types = msg.types + close + end +end + +def main(args) + client = LogTypesClient.new(:host => "localhost") + + # Collate & print results. + puts "Log types:" + client.types.each { |t| puts " - #{t}" } + + return 0 +end + +if $0 == __FILE__ + exit main(ARGV) +end diff --git a/lib/logs.rb b/lib/logs.rb index 00689c075..0f2ea16fb 100644 --- a/lib/logs.rb +++ b/lib/logs.rb @@ -23,5 +23,9 @@ module LogStash def [](log_type) return @logs[log_type] end + + def types + return @logs.keys + end end # class Logs end # module LogStash diff --git a/lib/net/messages/logtypes.rb b/lib/net/messages/logtypes.rb index 3e2acd068..504cfb90e 100644 --- a/lib/net/messages/logtypes.rb +++ b/lib/net/messages/logtypes.rb @@ -1,22 +1,16 @@ require "lib/net/message" module LogStash; module Net; module Messages - class SearchRequest < RequestMessage + class LogTypesRequest < RequestMessage + register + + # No message attributes + end # class LogTypesRequest + + class LogTypesResponse < ResponseMessage register # Message attributes - hashbind :query, "/args/query" - hashbind :log_type, "/args/log_type" - hashbind :offset, "/args/offset" - hashbind :limit, "/args/limit" - - end # class SearchRequest - - class SearchResponse < ResponseMessage - register - - # Message attributes - hashbind :results, "/args/results" - hashbind :finished, "/args/finished" - end # class SearchResponse + hashbind :types, "/args/types" + end # class LogTypesResponse end; end; end # module LogStash::Net::Messages diff --git a/lib/net/servers/indexer.rb b/lib/net/servers/indexer.rb index ef86a6e82..c0a4afd74 100644 --- a/lib/net/servers/indexer.rb +++ b/lib/net/servers/indexer.rb @@ -5,6 +5,7 @@ require 'lib/net/message' require 'lib/net/messages/broadcast' require 'lib/net/messages/directory' require 'lib/net/messages/indexevent' +require 'lib/net/messages/logtypes' require 'lib/net/messages/search' require 'lib/net/messages/searchhits' require 'lib/net/messages/quit' @@ -63,6 +64,12 @@ module LogStash; module Net; module Servers yield response end + def LogTypesRequestHandler(request) + response = LogStash::Net::Messages::LogTypesResponse.new + response.types = @config.logs.types + yield response + end + def SearchRequestHandler(request) puts "Search for #{request.query.inspect} in #{request.log_type}" response = LogStash::Net::Messages::SearchResponse.new