diff -r cdb6403c2498 -r 8b50694f841e tools/search.py --- /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] [ ... ]", + 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) + +