--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tools/search.py Mon Feb 09 11:46:17 2009 +0200
@@ -0,0 +1,90 @@
+"""
+ Tool for accessing the search index
+"""
+
+import sys; sys.path.insert(0, '.'); sys.path.insert(0, '..')
+
+import datetime, pytz
+
+import log_search
+
+def cmd_load (options, channel_name, *dates) :
+ """
+ Loads the logs for a specific channel for the given dates into the index
+ """
+
+ import channels
+
+ # open the LogSearchIndex
+ index = log_search.LogSearchIndex(options.index_path, '*' if options.create_index else 'a')
+
+ # open the channel
+ channel = channels.channel_list.lookup(channel_name)
+
+ for date_name in dates :
+ # parse date
+ date = datetime.datetime.strptime(date_name, '%Y-%m-%d').replace(tzinfo=channel.source.tz)
+
+ print "%s..." % (date, )
+
+ # load lines for date
+ lines = channel.source.get_date(date)
+
+ # insert
+ index.insert(channel, lines)
+
+def cmd_search (options, channel_name, query) :
+ """
+ Search the index for events on a specific channel with the given query
+ """
+
+ import channels
+
+ assert not options.create_index
+
+ # open the LogSearchIndex
+ index = log_search.LogSearchIndex(options.index_path, 'r')
+
+ # open the channel
+ channel = channels.channel_list.lookup(channel_name)
+
+ # search
+ lines = index.search_simple(channel, query)
+
+ # display as plaintext
+ for line in options.formatter.format_txt(lines) :
+ print line
+
+if __name__ == '__main__' :
+ from optparse import OptionParser
+ import log_formatter
+
+ # define parser
+ parser = OptionParser(
+ usage = "%prog [options] <command> [ ... ]",
+ add_help_option = True,
+ )
+
+ # define command-line arguments
+ parser.add_option("-I", "--index", dest="index_path", help="Index database path", metavar="PATH", default="logs/index")
+ parser.add_option("--create", dest="create_index", help="Create index database", default=False)
+ parser.add_option("-f", "--formatter", dest="formatter_name", help="LogFormatter to use", default="irssi")
+ parser.add_option("-z", "--timezone", dest="tz_name", help="Timezone for output", metavar="TZ", default="UTC")
+
+ # parse
+ options, args = parser.parse_args()
+
+ # postprocess stuff
+ options.tz = pytz.timezone(options.tz_name)
+ options.formatter = log_formatter.by_name(options.formatter_name)(options.tz)
+
+ # pop command
+ command = args.pop(0)
+
+ # inspect
+ func = globals()['cmd_%s' % command]
+
+ # call
+ func(options, *args)
+
+