scripts/search-index
author Tero Marttila <terom@fixme.fi>
Wed, 11 Feb 2009 02:16:11 +0200
changeset 94 6673de9bc911
parent 93 48fca00689e3
child 95 ebdbda3dd5d0
permissions -rwxr-xr-x
implement --after for autoload
88
0b8e2ba5f76f improve scripts/search-index with better help info
Tero Marttila <terom@fixme.fi>
parents: 83
diff changeset
     1
#!/usr/bin/env python2.5
0b8e2ba5f76f improve scripts/search-index with better help info
Tero Marttila <terom@fixme.fi>
parents: 83
diff changeset
     2
65
8b50694f841e improve search further
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     3
"""
8b50694f841e improve search further
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     4
    Tool for accessing the search index
8b50694f841e improve search further
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     5
"""
8b50694f841e improve search further
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     6
82
afd3120ec71e add a LogSourceDecoder to fallback from utf-8 to latin-1, and improve scripts/search-index.py
Tero Marttila <terom@fixme.fi>
parents: 68
diff changeset
     7
# XXX: fix path
65
8b50694f841e improve search further
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     8
import sys; sys.path.insert(0, '.'); sys.path.insert(0, '..')
8b50694f841e improve search further
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     9
93
48fca00689e3 implement scripts/search-index autoload
Tero Marttila <terom@fixme.fi>
parents: 89
diff changeset
    10
import os, os.path
65
8b50694f841e improve search further
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    11
import datetime, pytz
8b50694f841e improve search further
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    12
82
afd3120ec71e add a LogSourceDecoder to fallback from utf-8 to latin-1, and improve scripts/search-index.py
Tero Marttila <terom@fixme.fi>
parents: 68
diff changeset
    13
# configuration and the LogSearchIndex module
93
48fca00689e3 implement scripts/search-index autoload
Tero Marttila <terom@fixme.fi>
parents: 89
diff changeset
    14
import config, utils, log_search, channels
82
afd3120ec71e add a LogSourceDecoder to fallback from utf-8 to latin-1, and improve scripts/search-index.py
Tero Marttila <terom@fixme.fi>
parents: 68
diff changeset
    15
88
0b8e2ba5f76f improve scripts/search-index with better help info
Tero Marttila <terom@fixme.fi>
parents: 83
diff changeset
    16
def _open_index (options, open_mode) :
0b8e2ba5f76f improve scripts/search-index with better help info
Tero Marttila <terom@fixme.fi>
parents: 83
diff changeset
    17
    """
0b8e2ba5f76f improve scripts/search-index with better help info
Tero Marttila <terom@fixme.fi>
parents: 83
diff changeset
    18
        Opens the LogSearchIndex
0b8e2ba5f76f improve scripts/search-index with better help info
Tero Marttila <terom@fixme.fi>
parents: 83
diff changeset
    19
    """
0b8e2ba5f76f improve scripts/search-index with better help info
Tero Marttila <terom@fixme.fi>
parents: 83
diff changeset
    20
0b8e2ba5f76f improve scripts/search-index with better help info
Tero Marttila <terom@fixme.fi>
parents: 83
diff changeset
    21
    return log_search.LogSearchIndex(config.LOG_CHANNELS, options.index_path, open_mode)
0b8e2ba5f76f improve scripts/search-index with better help info
Tero Marttila <terom@fixme.fi>
parents: 83
diff changeset
    22
0b8e2ba5f76f improve scripts/search-index with better help info
Tero Marttila <terom@fixme.fi>
parents: 83
diff changeset
    23
82
afd3120ec71e add a LogSourceDecoder to fallback from utf-8 to latin-1, and improve scripts/search-index.py
Tero Marttila <terom@fixme.fi>
parents: 68
diff changeset
    24
def _open_index_and_channel (options, channel_name, open_mode) :
afd3120ec71e add a LogSourceDecoder to fallback from utf-8 to latin-1, and improve scripts/search-index.py
Tero Marttila <terom@fixme.fi>
parents: 68
diff changeset
    25
    """
afd3120ec71e add a LogSourceDecoder to fallback from utf-8 to latin-1, and improve scripts/search-index.py
Tero Marttila <terom@fixme.fi>
parents: 68
diff changeset
    26
        Opens+returns a LogSearchIndex and a LogChannel
afd3120ec71e add a LogSourceDecoder to fallback from utf-8 to latin-1, and improve scripts/search-index.py
Tero Marttila <terom@fixme.fi>
parents: 68
diff changeset
    27
    """
88
0b8e2ba5f76f improve scripts/search-index with better help info
Tero Marttila <terom@fixme.fi>
parents: 83
diff changeset
    28
    
82
afd3120ec71e add a LogSourceDecoder to fallback from utf-8 to latin-1, and improve scripts/search-index.py
Tero Marttila <terom@fixme.fi>
parents: 68
diff changeset
    29
    # open the LogSearchIndex
88
0b8e2ba5f76f improve scripts/search-index with better help info
Tero Marttila <terom@fixme.fi>
parents: 83
diff changeset
    30
    index = _open_index(options, open_mode)
82
afd3120ec71e add a LogSourceDecoder to fallback from utf-8 to latin-1, and improve scripts/search-index.py
Tero Marttila <terom@fixme.fi>
parents: 68
diff changeset
    31
afd3120ec71e add a LogSourceDecoder to fallback from utf-8 to latin-1, and improve scripts/search-index.py
Tero Marttila <terom@fixme.fi>
parents: 68
diff changeset
    32
    # open the channel
afd3120ec71e add a LogSourceDecoder to fallback from utf-8 to latin-1, and improve scripts/search-index.py
Tero Marttila <terom@fixme.fi>
parents: 68
diff changeset
    33
    channel = config.LOG_CHANNELS.lookup(channel_name)
afd3120ec71e add a LogSourceDecoder to fallback from utf-8 to latin-1, and improve scripts/search-index.py
Tero Marttila <terom@fixme.fi>
parents: 68
diff changeset
    34
    
afd3120ec71e add a LogSourceDecoder to fallback from utf-8 to latin-1, and improve scripts/search-index.py
Tero Marttila <terom@fixme.fi>
parents: 68
diff changeset
    35
    # return
afd3120ec71e add a LogSourceDecoder to fallback from utf-8 to latin-1, and improve scripts/search-index.py
Tero Marttila <terom@fixme.fi>
parents: 68
diff changeset
    36
    return index, channel
afd3120ec71e add a LogSourceDecoder to fallback from utf-8 to latin-1, and improve scripts/search-index.py
Tero Marttila <terom@fixme.fi>
parents: 68
diff changeset
    37
93
48fca00689e3 implement scripts/search-index autoload
Tero Marttila <terom@fixme.fi>
parents: 89
diff changeset
    38
def _insert_lines (index, options, channel, lines) :
48fca00689e3 implement scripts/search-index autoload
Tero Marttila <terom@fixme.fi>
parents: 89
diff changeset
    39
    """
48fca00689e3 implement scripts/search-index autoload
Tero Marttila <terom@fixme.fi>
parents: 89
diff changeset
    40
        Insert the given lines into the index.
48fca00689e3 implement scripts/search-index autoload
Tero Marttila <terom@fixme.fi>
parents: 89
diff changeset
    41
48fca00689e3 implement scripts/search-index autoload
Tero Marttila <terom@fixme.fi>
parents: 89
diff changeset
    42
        Assumes the lines will be in time-order, and prints out as status messages the date and count for the inserted lines
48fca00689e3 implement scripts/search-index autoload
Tero Marttila <terom@fixme.fi>
parents: 89
diff changeset
    43
    """
48fca00689e3 implement scripts/search-index autoload
Tero Marttila <terom@fixme.fi>
parents: 89
diff changeset
    44
48fca00689e3 implement scripts/search-index autoload
Tero Marttila <terom@fixme.fi>
parents: 89
diff changeset
    45
    # last date
48fca00689e3 implement scripts/search-index autoload
Tero Marttila <terom@fixme.fi>
parents: 89
diff changeset
    46
    date = None
48fca00689e3 implement scripts/search-index autoload
Tero Marttila <terom@fixme.fi>
parents: 89
diff changeset
    47
48fca00689e3 implement scripts/search-index autoload
Tero Marttila <terom@fixme.fi>
parents: 89
diff changeset
    48
    # count
48fca00689e3 implement scripts/search-index autoload
Tero Marttila <terom@fixme.fi>
parents: 89
diff changeset
    49
    count = 0
48fca00689e3 implement scripts/search-index autoload
Tero Marttila <terom@fixme.fi>
parents: 89
diff changeset
    50
48fca00689e3 implement scripts/search-index autoload
Tero Marttila <terom@fixme.fi>
parents: 89
diff changeset
    51
    # iter lines
48fca00689e3 implement scripts/search-index autoload
Tero Marttila <terom@fixme.fi>
parents: 89
diff changeset
    52
    for line in lines :
48fca00689e3 implement scripts/search-index autoload
Tero Marttila <terom@fixme.fi>
parents: 89
diff changeset
    53
        # output new date header?
48fca00689e3 implement scripts/search-index autoload
Tero Marttila <terom@fixme.fi>
parents: 89
diff changeset
    54
        if not options.quiet and (not date or line.timestamp.date() != date) :
48fca00689e3 implement scripts/search-index autoload
Tero Marttila <terom@fixme.fi>
parents: 89
diff changeset
    55
            # previous date's line count?
48fca00689e3 implement scripts/search-index autoload
Tero Marttila <terom@fixme.fi>
parents: 89
diff changeset
    56
            if date :
48fca00689e3 implement scripts/search-index autoload
Tero Marttila <terom@fixme.fi>
parents: 89
diff changeset
    57
                print "OK: %d lines" % count
48fca00689e3 implement scripts/search-index autoload
Tero Marttila <terom@fixme.fi>
parents: 89
diff changeset
    58
            
48fca00689e3 implement scripts/search-index autoload
Tero Marttila <terom@fixme.fi>
parents: 89
diff changeset
    59
            # reset count
48fca00689e3 implement scripts/search-index autoload
Tero Marttila <terom@fixme.fi>
parents: 89
diff changeset
    60
            count = 0
48fca00689e3 implement scripts/search-index autoload
Tero Marttila <terom@fixme.fi>
parents: 89
diff changeset
    61
48fca00689e3 implement scripts/search-index autoload
Tero Marttila <terom@fixme.fi>
parents: 89
diff changeset
    62
            # timestamp's date
48fca00689e3 implement scripts/search-index autoload
Tero Marttila <terom@fixme.fi>
parents: 89
diff changeset
    63
            date = line.timestamp.date()
48fca00689e3 implement scripts/search-index autoload
Tero Marttila <terom@fixme.fi>
parents: 89
diff changeset
    64
            
48fca00689e3 implement scripts/search-index autoload
Tero Marttila <terom@fixme.fi>
parents: 89
diff changeset
    65
            # status header
48fca00689e3 implement scripts/search-index autoload
Tero Marttila <terom@fixme.fi>
parents: 89
diff changeset
    66
            print "%s:" % (date.strftime('%Y-%m-%d'), ),
48fca00689e3 implement scripts/search-index autoload
Tero Marttila <terom@fixme.fi>
parents: 89
diff changeset
    67
48fca00689e3 implement scripts/search-index autoload
Tero Marttila <terom@fixme.fi>
parents: 89
diff changeset
    68
        # insert
48fca00689e3 implement scripts/search-index autoload
Tero Marttila <terom@fixme.fi>
parents: 89
diff changeset
    69
        index.insert_line(channel, line)
48fca00689e3 implement scripts/search-index autoload
Tero Marttila <terom@fixme.fi>
parents: 89
diff changeset
    70
48fca00689e3 implement scripts/search-index autoload
Tero Marttila <terom@fixme.fi>
parents: 89
diff changeset
    71
        # count
48fca00689e3 implement scripts/search-index autoload
Tero Marttila <terom@fixme.fi>
parents: 89
diff changeset
    72
        count += 1
48fca00689e3 implement scripts/search-index autoload
Tero Marttila <terom@fixme.fi>
parents: 89
diff changeset
    73
    
48fca00689e3 implement scripts/search-index autoload
Tero Marttila <terom@fixme.fi>
parents: 89
diff changeset
    74
    # final count line
48fca00689e3 implement scripts/search-index autoload
Tero Marttila <terom@fixme.fi>
parents: 89
diff changeset
    75
    if not options.quiet and date :
48fca00689e3 implement scripts/search-index autoload
Tero Marttila <terom@fixme.fi>
parents: 89
diff changeset
    76
        print "OK: %d lines" % count
48fca00689e3 implement scripts/search-index autoload
Tero Marttila <terom@fixme.fi>
parents: 89
diff changeset
    77
82
afd3120ec71e add a LogSourceDecoder to fallback from utf-8 to latin-1, and improve scripts/search-index.py
Tero Marttila <terom@fixme.fi>
parents: 68
diff changeset
    78
def _load_channel_date (index, options, channel, date) :
afd3120ec71e add a LogSourceDecoder to fallback from utf-8 to latin-1, and improve scripts/search-index.py
Tero Marttila <terom@fixme.fi>
parents: 68
diff changeset
    79
    """
afd3120ec71e add a LogSourceDecoder to fallback from utf-8 to latin-1, and improve scripts/search-index.py
Tero Marttila <terom@fixme.fi>
parents: 68
diff changeset
    80
        Loads the logs for the given date from the channel's LogSource into the given LogSearchIndex
afd3120ec71e add a LogSourceDecoder to fallback from utf-8 to latin-1, and improve scripts/search-index.py
Tero Marttila <terom@fixme.fi>
parents: 68
diff changeset
    81
    """
afd3120ec71e add a LogSourceDecoder to fallback from utf-8 to latin-1, and improve scripts/search-index.py
Tero Marttila <terom@fixme.fi>
parents: 68
diff changeset
    82
afd3120ec71e add a LogSourceDecoder to fallback from utf-8 to latin-1, and improve scripts/search-index.py
Tero Marttila <terom@fixme.fi>
parents: 68
diff changeset
    83
    if not options.quiet :
93
48fca00689e3 implement scripts/search-index autoload
Tero Marttila <terom@fixme.fi>
parents: 89
diff changeset
    84
        print "Loading date for channel %s" % channel.id
82
afd3120ec71e add a LogSourceDecoder to fallback from utf-8 to latin-1, and improve scripts/search-index.py
Tero Marttila <terom@fixme.fi>
parents: 68
diff changeset
    85
        
afd3120ec71e add a LogSourceDecoder to fallback from utf-8 to latin-1, and improve scripts/search-index.py
Tero Marttila <terom@fixme.fi>
parents: 68
diff changeset
    86
    try :
afd3120ec71e add a LogSourceDecoder to fallback from utf-8 to latin-1, and improve scripts/search-index.py
Tero Marttila <terom@fixme.fi>
parents: 68
diff changeset
    87
        # load lines for date
afd3120ec71e add a LogSourceDecoder to fallback from utf-8 to latin-1, and improve scripts/search-index.py
Tero Marttila <terom@fixme.fi>
parents: 68
diff changeset
    88
        lines = channel.source.get_date(date)
afd3120ec71e add a LogSourceDecoder to fallback from utf-8 to latin-1, and improve scripts/search-index.py
Tero Marttila <terom@fixme.fi>
parents: 68
diff changeset
    89
    
afd3120ec71e add a LogSourceDecoder to fallback from utf-8 to latin-1, and improve scripts/search-index.py
Tero Marttila <terom@fixme.fi>
parents: 68
diff changeset
    90
    except Exception, e :
afd3120ec71e add a LogSourceDecoder to fallback from utf-8 to latin-1, and improve scripts/search-index.py
Tero Marttila <terom@fixme.fi>
parents: 68
diff changeset
    91
        if not options.skip_missing :
afd3120ec71e add a LogSourceDecoder to fallback from utf-8 to latin-1, and improve scripts/search-index.py
Tero Marttila <terom@fixme.fi>
parents: 68
diff changeset
    92
            raise
afd3120ec71e add a LogSourceDecoder to fallback from utf-8 to latin-1, and improve scripts/search-index.py
Tero Marttila <terom@fixme.fi>
parents: 68
diff changeset
    93
            
afd3120ec71e add a LogSourceDecoder to fallback from utf-8 to latin-1, and improve scripts/search-index.py
Tero Marttila <terom@fixme.fi>
parents: 68
diff changeset
    94
        if not options.quiet :
93
48fca00689e3 implement scripts/search-index autoload
Tero Marttila <terom@fixme.fi>
parents: 89
diff changeset
    95
            print "\tSkipped: %s" % (e, )
82
afd3120ec71e add a LogSourceDecoder to fallback from utf-8 to latin-1, and improve scripts/search-index.py
Tero Marttila <terom@fixme.fi>
parents: 68
diff changeset
    96
    
afd3120ec71e add a LogSourceDecoder to fallback from utf-8 to latin-1, and improve scripts/search-index.py
Tero Marttila <terom@fixme.fi>
parents: 68
diff changeset
    97
    else :
93
48fca00689e3 implement scripts/search-index autoload
Tero Marttila <terom@fixme.fi>
parents: 89
diff changeset
    98
        # insert
48fca00689e3 implement scripts/search-index autoload
Tero Marttila <terom@fixme.fi>
parents: 89
diff changeset
    99
        _insert_lines(index, options, channel, lines)
89
2dc6de43f317 add utils.to/from_utc_timestamp functions, fix LogSearchIndex to store all LogLine attributes, add list() method to get LogLines for a given date, and improve scripts/search-index
Tero Marttila <terom@fixme.fi>
parents: 88
diff changeset
   100
2dc6de43f317 add utils.to/from_utc_timestamp functions, fix LogSearchIndex to store all LogLine attributes, add list() method to get LogLines for a given date, and improve scripts/search-index
Tero Marttila <terom@fixme.fi>
parents: 88
diff changeset
   101
def _parse_date (options, date_str, tz=None, fmt='%Y-%m-%d') :
2dc6de43f317 add utils.to/from_utc_timestamp functions, fix LogSearchIndex to store all LogLine attributes, add list() method to get LogLines for a given date, and improve scripts/search-index
Tero Marttila <terom@fixme.fi>
parents: 88
diff changeset
   102
    """
2dc6de43f317 add utils.to/from_utc_timestamp functions, fix LogSearchIndex to store all LogLine attributes, add list() method to get LogLines for a given date, and improve scripts/search-index
Tero Marttila <terom@fixme.fi>
parents: 88
diff changeset
   103
        Parse the given datetime, using the given timezone(defaults to options.tz) and format
2dc6de43f317 add utils.to/from_utc_timestamp functions, fix LogSearchIndex to store all LogLine attributes, add list() method to get LogLines for a given date, and improve scripts/search-index
Tero Marttila <terom@fixme.fi>
parents: 88
diff changeset
   104
    """
2dc6de43f317 add utils.to/from_utc_timestamp functions, fix LogSearchIndex to store all LogLine attributes, add list() method to get LogLines for a given date, and improve scripts/search-index
Tero Marttila <terom@fixme.fi>
parents: 88
diff changeset
   105
2dc6de43f317 add utils.to/from_utc_timestamp functions, fix LogSearchIndex to store all LogLine attributes, add list() method to get LogLines for a given date, and improve scripts/search-index
Tero Marttila <terom@fixme.fi>
parents: 88
diff changeset
   106
    # default tz
2dc6de43f317 add utils.to/from_utc_timestamp functions, fix LogSearchIndex to store all LogLine attributes, add list() method to get LogLines for a given date, and improve scripts/search-index
Tero Marttila <terom@fixme.fi>
parents: 88
diff changeset
   107
    if not tz :
2dc6de43f317 add utils.to/from_utc_timestamp functions, fix LogSearchIndex to store all LogLine attributes, add list() method to get LogLines for a given date, and improve scripts/search-index
Tero Marttila <terom@fixme.fi>
parents: 88
diff changeset
   108
        tz = options.tz
2dc6de43f317 add utils.to/from_utc_timestamp functions, fix LogSearchIndex to store all LogLine attributes, add list() method to get LogLines for a given date, and improve scripts/search-index
Tero Marttila <terom@fixme.fi>
parents: 88
diff changeset
   109
2dc6de43f317 add utils.to/from_utc_timestamp functions, fix LogSearchIndex to store all LogLine attributes, add list() method to get LogLines for a given date, and improve scripts/search-index
Tero Marttila <terom@fixme.fi>
parents: 88
diff changeset
   110
    try :
2dc6de43f317 add utils.to/from_utc_timestamp functions, fix LogSearchIndex to store all LogLine attributes, add list() method to get LogLines for a given date, and improve scripts/search-index
Tero Marttila <terom@fixme.fi>
parents: 88
diff changeset
   111
        # parse
2dc6de43f317 add utils.to/from_utc_timestamp functions, fix LogSearchIndex to store all LogLine attributes, add list() method to get LogLines for a given date, and improve scripts/search-index
Tero Marttila <terom@fixme.fi>
parents: 88
diff changeset
   112
        return datetime.datetime.strptime(date_str, fmt).replace(tzinfo=tz)
2dc6de43f317 add utils.to/from_utc_timestamp functions, fix LogSearchIndex to store all LogLine attributes, add list() method to get LogLines for a given date, and improve scripts/search-index
Tero Marttila <terom@fixme.fi>
parents: 88
diff changeset
   113
2dc6de43f317 add utils.to/from_utc_timestamp functions, fix LogSearchIndex to store all LogLine attributes, add list() method to get LogLines for a given date, and improve scripts/search-index
Tero Marttila <terom@fixme.fi>
parents: 88
diff changeset
   114
    except Exception, e :
2dc6de43f317 add utils.to/from_utc_timestamp functions, fix LogSearchIndex to store all LogLine attributes, add list() method to get LogLines for a given date, and improve scripts/search-index
Tero Marttila <terom@fixme.fi>
parents: 88
diff changeset
   115
        raise CommandError("[ERROR] Invalid date: %s: %s" % (date_str, e))
2dc6de43f317 add utils.to/from_utc_timestamp functions, fix LogSearchIndex to store all LogLine attributes, add list() method to get LogLines for a given date, and improve scripts/search-index
Tero Marttila <terom@fixme.fi>
parents: 88
diff changeset
   116
2dc6de43f317 add utils.to/from_utc_timestamp functions, fix LogSearchIndex to store all LogLine attributes, add list() method to get LogLines for a given date, and improve scripts/search-index
Tero Marttila <terom@fixme.fi>
parents: 88
diff changeset
   117
def _output_lines (options, lines) :
2dc6de43f317 add utils.to/from_utc_timestamp functions, fix LogSearchIndex to store all LogLine attributes, add list() method to get LogLines for a given date, and improve scripts/search-index
Tero Marttila <terom@fixme.fi>
parents: 88
diff changeset
   118
    """
2dc6de43f317 add utils.to/from_utc_timestamp functions, fix LogSearchIndex to store all LogLine attributes, add list() method to get LogLines for a given date, and improve scripts/search-index
Tero Marttila <terom@fixme.fi>
parents: 88
diff changeset
   119
        Display the formatted LogLines
2dc6de43f317 add utils.to/from_utc_timestamp functions, fix LogSearchIndex to store all LogLine attributes, add list() method to get LogLines for a given date, and improve scripts/search-index
Tero Marttila <terom@fixme.fi>
parents: 88
diff changeset
   120
    """
2dc6de43f317 add utils.to/from_utc_timestamp functions, fix LogSearchIndex to store all LogLine attributes, add list() method to get LogLines for a given date, and improve scripts/search-index
Tero Marttila <terom@fixme.fi>
parents: 88
diff changeset
   121
2dc6de43f317 add utils.to/from_utc_timestamp functions, fix LogSearchIndex to store all LogLine attributes, add list() method to get LogLines for a given date, and improve scripts/search-index
Tero Marttila <terom@fixme.fi>
parents: 88
diff changeset
   122
    # display as plaintext
2dc6de43f317 add utils.to/from_utc_timestamp functions, fix LogSearchIndex to store all LogLine attributes, add list() method to get LogLines for a given date, and improve scripts/search-index
Tero Marttila <terom@fixme.fi>
parents: 88
diff changeset
   123
    for line, txt_data in options.formatter.format_txt(lines, full_timestamps=True) :
2dc6de43f317 add utils.to/from_utc_timestamp functions, fix LogSearchIndex to store all LogLine attributes, add list() method to get LogLines for a given date, and improve scripts/search-index
Tero Marttila <terom@fixme.fi>
parents: 88
diff changeset
   124
        print txt_data
2dc6de43f317 add utils.to/from_utc_timestamp functions, fix LogSearchIndex to store all LogLine attributes, add list() method to get LogLines for a given date, and improve scripts/search-index
Tero Marttila <terom@fixme.fi>
parents: 88
diff changeset
   125
88
0b8e2ba5f76f improve scripts/search-index with better help info
Tero Marttila <terom@fixme.fi>
parents: 83
diff changeset
   126
class CommandError (Exception) :
0b8e2ba5f76f improve scripts/search-index with better help info
Tero Marttila <terom@fixme.fi>
parents: 83
diff changeset
   127
    """
0b8e2ba5f76f improve scripts/search-index with better help info
Tero Marttila <terom@fixme.fi>
parents: 83
diff changeset
   128
        Error with command-line arguments
0b8e2ba5f76f improve scripts/search-index with better help info
Tero Marttila <terom@fixme.fi>
parents: 83
diff changeset
   129
    """
0b8e2ba5f76f improve scripts/search-index with better help info
Tero Marttila <terom@fixme.fi>
parents: 83
diff changeset
   130
0b8e2ba5f76f improve scripts/search-index with better help info
Tero Marttila <terom@fixme.fi>
parents: 83
diff changeset
   131
    pass
0b8e2ba5f76f improve scripts/search-index with better help info
Tero Marttila <terom@fixme.fi>
parents: 83
diff changeset
   132
0b8e2ba5f76f improve scripts/search-index with better help info
Tero Marttila <terom@fixme.fi>
parents: 83
diff changeset
   133
def cmd_create (options) :
0b8e2ba5f76f improve scripts/search-index with better help info
Tero Marttila <terom@fixme.fi>
parents: 83
diff changeset
   134
    """
0b8e2ba5f76f improve scripts/search-index with better help info
Tero Marttila <terom@fixme.fi>
parents: 83
diff changeset
   135
        Creates a new index
0b8e2ba5f76f improve scripts/search-index with better help info
Tero Marttila <terom@fixme.fi>
parents: 83
diff changeset
   136
    """
0b8e2ba5f76f improve scripts/search-index with better help info
Tero Marttila <terom@fixme.fi>
parents: 83
diff changeset
   137
0b8e2ba5f76f improve scripts/search-index with better help info
Tero Marttila <terom@fixme.fi>
parents: 83
diff changeset
   138
    # open index
0b8e2ba5f76f improve scripts/search-index with better help info
Tero Marttila <terom@fixme.fi>
parents: 83
diff changeset
   139
    index = _open_index(options, 'c' if not options.force else '*')
0b8e2ba5f76f improve scripts/search-index with better help info
Tero Marttila <terom@fixme.fi>
parents: 83
diff changeset
   140
0b8e2ba5f76f improve scripts/search-index with better help info
Tero Marttila <terom@fixme.fi>
parents: 83
diff changeset
   141
    # that's all
0b8e2ba5f76f improve scripts/search-index with better help info
Tero Marttila <terom@fixme.fi>
parents: 83
diff changeset
   142
    pass
0b8e2ba5f76f improve scripts/search-index with better help info
Tero Marttila <terom@fixme.fi>
parents: 83
diff changeset
   143
65
8b50694f841e improve search further
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   144
def cmd_load (options, channel_name, *dates) :
8b50694f841e improve search further
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   145
    """
82
afd3120ec71e add a LogSourceDecoder to fallback from utf-8 to latin-1, and improve scripts/search-index.py
Tero Marttila <terom@fixme.fi>
parents: 68
diff changeset
   146
        Loads the logs for a specific channel for the given dates (in terms of the channe logs' timezone) into the index
65
8b50694f841e improve search further
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   147
    """
8b50694f841e improve search further
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   148
82
afd3120ec71e add a LogSourceDecoder to fallback from utf-8 to latin-1, and improve scripts/search-index.py
Tero Marttila <terom@fixme.fi>
parents: 68
diff changeset
   149
    # open index/channel
88
0b8e2ba5f76f improve scripts/search-index with better help info
Tero Marttila <terom@fixme.fi>
parents: 83
diff changeset
   150
    index, channel = _open_index_and_channel(options, channel_name, 'c' if options.create else 'a')
65
8b50694f841e improve search further
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   151
    
82
afd3120ec71e add a LogSourceDecoder to fallback from utf-8 to latin-1, and improve scripts/search-index.py
Tero Marttila <terom@fixme.fi>
parents: 68
diff changeset
   152
    # handle each date
89
2dc6de43f317 add utils.to/from_utc_timestamp functions, fix LogSearchIndex to store all LogLine attributes, add list() method to get LogLines for a given date, and improve scripts/search-index
Tero Marttila <terom@fixme.fi>
parents: 88
diff changeset
   153
    for date_str in dates :
2dc6de43f317 add utils.to/from_utc_timestamp functions, fix LogSearchIndex to store all LogLine attributes, add list() method to get LogLines for a given date, and improve scripts/search-index
Tero Marttila <terom@fixme.fi>
parents: 88
diff changeset
   154
        # prase date
68
8157c41b3236 improve search form & script
Tero Marttila <terom@fixme.fi>
parents: 65
diff changeset
   155
        try :
89
2dc6de43f317 add utils.to/from_utc_timestamp functions, fix LogSearchIndex to store all LogLine attributes, add list() method to get LogLines for a given date, and improve scripts/search-index
Tero Marttila <terom@fixme.fi>
parents: 88
diff changeset
   156
            date = _parse_date(options, date_str, channel.source.tz)
2dc6de43f317 add utils.to/from_utc_timestamp functions, fix LogSearchIndex to store all LogLine attributes, add list() method to get LogLines for a given date, and improve scripts/search-index
Tero Marttila <terom@fixme.fi>
parents: 88
diff changeset
   157
        
2dc6de43f317 add utils.to/from_utc_timestamp functions, fix LogSearchIndex to store all LogLine attributes, add list() method to get LogLines for a given date, and improve scripts/search-index
Tero Marttila <terom@fixme.fi>
parents: 88
diff changeset
   158
        # handle errors
2dc6de43f317 add utils.to/from_utc_timestamp functions, fix LogSearchIndex to store all LogLine attributes, add list() method to get LogLines for a given date, and improve scripts/search-index
Tero Marttila <terom@fixme.fi>
parents: 88
diff changeset
   159
        except CommandError, e :
82
afd3120ec71e add a LogSourceDecoder to fallback from utf-8 to latin-1, and improve scripts/search-index.py
Tero Marttila <terom@fixme.fi>
parents: 68
diff changeset
   160
            if options.skip_missing :
89
2dc6de43f317 add utils.to/from_utc_timestamp functions, fix LogSearchIndex to store all LogLine attributes, add list() method to get LogLines for a given date, and improve scripts/search-index
Tero Marttila <terom@fixme.fi>
parents: 88
diff changeset
   161
                print "[ERROR] %s" % (date_name, e)
82
afd3120ec71e add a LogSourceDecoder to fallback from utf-8 to latin-1, and improve scripts/search-index.py
Tero Marttila <terom@fixme.fi>
parents: 68
diff changeset
   162
afd3120ec71e add a LogSourceDecoder to fallback from utf-8 to latin-1, and improve scripts/search-index.py
Tero Marttila <terom@fixme.fi>
parents: 68
diff changeset
   163
            else :
afd3120ec71e add a LogSourceDecoder to fallback from utf-8 to latin-1, and improve scripts/search-index.py
Tero Marttila <terom@fixme.fi>
parents: 68
diff changeset
   164
                raise
68
8157c41b3236 improve search form & script
Tero Marttila <terom@fixme.fi>
parents: 65
diff changeset
   165
        
89
2dc6de43f317 add utils.to/from_utc_timestamp functions, fix LogSearchIndex to store all LogLine attributes, add list() method to get LogLines for a given date, and improve scripts/search-index
Tero Marttila <terom@fixme.fi>
parents: 88
diff changeset
   166
        # otherwise, load
2dc6de43f317 add utils.to/from_utc_timestamp functions, fix LogSearchIndex to store all LogLine attributes, add list() method to get LogLines for a given date, and improve scripts/search-index
Tero Marttila <terom@fixme.fi>
parents: 88
diff changeset
   167
        else :        
2dc6de43f317 add utils.to/from_utc_timestamp functions, fix LogSearchIndex to store all LogLine attributes, add list() method to get LogLines for a given date, and improve scripts/search-index
Tero Marttila <terom@fixme.fi>
parents: 88
diff changeset
   168
            _load_channel_date(index, options, channel, date)
65
8b50694f841e improve search further
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   169
82
afd3120ec71e add a LogSourceDecoder to fallback from utf-8 to latin-1, and improve scripts/search-index.py
Tero Marttila <terom@fixme.fi>
parents: 68
diff changeset
   170
def cmd_load_month (options, channel_name, *months) :
afd3120ec71e add a LogSourceDecoder to fallback from utf-8 to latin-1, and improve scripts/search-index.py
Tero Marttila <terom@fixme.fi>
parents: 68
diff changeset
   171
    """
afd3120ec71e add a LogSourceDecoder to fallback from utf-8 to latin-1, and improve scripts/search-index.py
Tero Marttila <terom@fixme.fi>
parents: 68
diff changeset
   172
        Loads the logs for a specific channel for the given months (in terms of the channel's timezone) into the index
afd3120ec71e add a LogSourceDecoder to fallback from utf-8 to latin-1, and improve scripts/search-index.py
Tero Marttila <terom@fixme.fi>
parents: 68
diff changeset
   173
    """
afd3120ec71e add a LogSourceDecoder to fallback from utf-8 to latin-1, and improve scripts/search-index.py
Tero Marttila <terom@fixme.fi>
parents: 68
diff changeset
   174
afd3120ec71e add a LogSourceDecoder to fallback from utf-8 to latin-1, and improve scripts/search-index.py
Tero Marttila <terom@fixme.fi>
parents: 68
diff changeset
   175
    # open index/channel
88
0b8e2ba5f76f improve scripts/search-index with better help info
Tero Marttila <terom@fixme.fi>
parents: 83
diff changeset
   176
    index, channel = _open_index_and_channel(options, channel_name, 'c' if options.create else 'a')
82
afd3120ec71e add a LogSourceDecoder to fallback from utf-8 to latin-1, and improve scripts/search-index.py
Tero Marttila <terom@fixme.fi>
parents: 68
diff changeset
   177
    
afd3120ec71e add a LogSourceDecoder to fallback from utf-8 to latin-1, and improve scripts/search-index.py
Tero Marttila <terom@fixme.fi>
parents: 68
diff changeset
   178
    # handle each date
89
2dc6de43f317 add utils.to/from_utc_timestamp functions, fix LogSearchIndex to store all LogLine attributes, add list() method to get LogLines for a given date, and improve scripts/search-index
Tero Marttila <terom@fixme.fi>
parents: 88
diff changeset
   179
    for month_str in months :
2dc6de43f317 add utils.to/from_utc_timestamp functions, fix LogSearchIndex to store all LogLine attributes, add list() method to get LogLines for a given date, and improve scripts/search-index
Tero Marttila <terom@fixme.fi>
parents: 88
diff changeset
   180
        # prase date
82
afd3120ec71e add a LogSourceDecoder to fallback from utf-8 to latin-1, and improve scripts/search-index.py
Tero Marttila <terom@fixme.fi>
parents: 68
diff changeset
   181
        try :
89
2dc6de43f317 add utils.to/from_utc_timestamp functions, fix LogSearchIndex to store all LogLine attributes, add list() method to get LogLines for a given date, and improve scripts/search-index
Tero Marttila <terom@fixme.fi>
parents: 88
diff changeset
   182
            month = _parse_date(options, month_str, channel.source.tz, '%Y-%m')
2dc6de43f317 add utils.to/from_utc_timestamp functions, fix LogSearchIndex to store all LogLine attributes, add list() method to get LogLines for a given date, and improve scripts/search-index
Tero Marttila <terom@fixme.fi>
parents: 88
diff changeset
   183
        
2dc6de43f317 add utils.to/from_utc_timestamp functions, fix LogSearchIndex to store all LogLine attributes, add list() method to get LogLines for a given date, and improve scripts/search-index
Tero Marttila <terom@fixme.fi>
parents: 88
diff changeset
   184
        # handle errors
2dc6de43f317 add utils.to/from_utc_timestamp functions, fix LogSearchIndex to store all LogLine attributes, add list() method to get LogLines for a given date, and improve scripts/search-index
Tero Marttila <terom@fixme.fi>
parents: 88
diff changeset
   185
        except CommandError, e :
2dc6de43f317 add utils.to/from_utc_timestamp functions, fix LogSearchIndex to store all LogLine attributes, add list() method to get LogLines for a given date, and improve scripts/search-index
Tero Marttila <terom@fixme.fi>
parents: 88
diff changeset
   186
            # skip?
82
afd3120ec71e add a LogSourceDecoder to fallback from utf-8 to latin-1, and improve scripts/search-index.py
Tero Marttila <terom@fixme.fi>
parents: 68
diff changeset
   187
            if options.skip_missing :
89
2dc6de43f317 add utils.to/from_utc_timestamp functions, fix LogSearchIndex to store all LogLine attributes, add list() method to get LogLines for a given date, and improve scripts/search-index
Tero Marttila <terom@fixme.fi>
parents: 88
diff changeset
   188
                print "[ERROR] %s" % (date_name, e)
82
afd3120ec71e add a LogSourceDecoder to fallback from utf-8 to latin-1, and improve scripts/search-index.py
Tero Marttila <terom@fixme.fi>
parents: 68
diff changeset
   189
                continue
afd3120ec71e add a LogSourceDecoder to fallback from utf-8 to latin-1, and improve scripts/search-index.py
Tero Marttila <terom@fixme.fi>
parents: 68
diff changeset
   190
afd3120ec71e add a LogSourceDecoder to fallback from utf-8 to latin-1, and improve scripts/search-index.py
Tero Marttila <terom@fixme.fi>
parents: 68
diff changeset
   191
            else :
afd3120ec71e add a LogSourceDecoder to fallback from utf-8 to latin-1, and improve scripts/search-index.py
Tero Marttila <terom@fixme.fi>
parents: 68
diff changeset
   192
                raise
afd3120ec71e add a LogSourceDecoder to fallback from utf-8 to latin-1, and improve scripts/search-index.py
Tero Marttila <terom@fixme.fi>
parents: 68
diff changeset
   193
        
afd3120ec71e add a LogSourceDecoder to fallback from utf-8 to latin-1, and improve scripts/search-index.py
Tero Marttila <terom@fixme.fi>
parents: 68
diff changeset
   194
        # get the set of days
83
a34e9f56ddda improve parser resilience, improve get_month_days, add 'Channel' item to general menu
Tero Marttila <terom@fixme.fi>
parents: 82
diff changeset
   195
        days = list(channel.source.get_month_days(month))
82
afd3120ec71e add a LogSourceDecoder to fallback from utf-8 to latin-1, and improve scripts/search-index.py
Tero Marttila <terom@fixme.fi>
parents: 68
diff changeset
   196
afd3120ec71e add a LogSourceDecoder to fallback from utf-8 to latin-1, and improve scripts/search-index.py
Tero Marttila <terom@fixme.fi>
parents: 68
diff changeset
   197
        print "Loading %d days of logs:" % (len(days))
afd3120ec71e add a LogSourceDecoder to fallback from utf-8 to latin-1, and improve scripts/search-index.py
Tero Marttila <terom@fixme.fi>
parents: 68
diff changeset
   198
afd3120ec71e add a LogSourceDecoder to fallback from utf-8 to latin-1, and improve scripts/search-index.py
Tero Marttila <terom@fixme.fi>
parents: 68
diff changeset
   199
        # load each day
afd3120ec71e add a LogSourceDecoder to fallback from utf-8 to latin-1, and improve scripts/search-index.py
Tero Marttila <terom@fixme.fi>
parents: 68
diff changeset
   200
        for date in days :
afd3120ec71e add a LogSourceDecoder to fallback from utf-8 to latin-1, and improve scripts/search-index.py
Tero Marttila <terom@fixme.fi>
parents: 68
diff changeset
   201
            # convert to datetime
afd3120ec71e add a LogSourceDecoder to fallback from utf-8 to latin-1, and improve scripts/search-index.py
Tero Marttila <terom@fixme.fi>
parents: 68
diff changeset
   202
            dt = datetime.datetime.combine(date, datetime.time(0)).replace(tzinfo=channel.source.tz)
afd3120ec71e add a LogSourceDecoder to fallback from utf-8 to latin-1, and improve scripts/search-index.py
Tero Marttila <terom@fixme.fi>
parents: 68
diff changeset
   203
            
afd3120ec71e add a LogSourceDecoder to fallback from utf-8 to latin-1, and improve scripts/search-index.py
Tero Marttila <terom@fixme.fi>
parents: 68
diff changeset
   204
            # load
afd3120ec71e add a LogSourceDecoder to fallback from utf-8 to latin-1, and improve scripts/search-index.py
Tero Marttila <terom@fixme.fi>
parents: 68
diff changeset
   205
            _load_channel_date(index, options, channel, dt)
65
8b50694f841e improve search further
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   206
8b50694f841e improve search further
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   207
def cmd_search (options, channel_name, query) :
8b50694f841e improve search further
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   208
    """
8b50694f841e improve search further
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   209
        Search the index for events on a specific channel with the given query
8b50694f841e improve search further
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   210
    """
8b50694f841e improve search further
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   211
    
82
afd3120ec71e add a LogSourceDecoder to fallback from utf-8 to latin-1, and improve scripts/search-index.py
Tero Marttila <terom@fixme.fi>
parents: 68
diff changeset
   212
    # sanity-check
89
2dc6de43f317 add utils.to/from_utc_timestamp functions, fix LogSearchIndex to store all LogLine attributes, add list() method to get LogLines for a given date, and improve scripts/search-index
Tero Marttila <terom@fixme.fi>
parents: 88
diff changeset
   213
    if options.create :
82
afd3120ec71e add a LogSourceDecoder to fallback from utf-8 to latin-1, and improve scripts/search-index.py
Tero Marttila <terom@fixme.fi>
parents: 68
diff changeset
   214
        raise Exception("--create doesn't make sense for 'search'")
afd3120ec71e add a LogSourceDecoder to fallback from utf-8 to latin-1, and improve scripts/search-index.py
Tero Marttila <terom@fixme.fi>
parents: 68
diff changeset
   215
    
afd3120ec71e add a LogSourceDecoder to fallback from utf-8 to latin-1, and improve scripts/search-index.py
Tero Marttila <terom@fixme.fi>
parents: 68
diff changeset
   216
    # open index/channel
afd3120ec71e add a LogSourceDecoder to fallback from utf-8 to latin-1, and improve scripts/search-index.py
Tero Marttila <terom@fixme.fi>
parents: 68
diff changeset
   217
    index, channel = _open_index_and_channel(options, channel_name, 'r')
65
8b50694f841e improve search further
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   218
    
8b50694f841e improve search further
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   219
    # search
8b50694f841e improve search further
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   220
    lines = index.search_simple(channel, query)
8b50694f841e improve search further
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   221
    
89
2dc6de43f317 add utils.to/from_utc_timestamp functions, fix LogSearchIndex to store all LogLine attributes, add list() method to get LogLines for a given date, and improve scripts/search-index
Tero Marttila <terom@fixme.fi>
parents: 88
diff changeset
   222
    # display
2dc6de43f317 add utils.to/from_utc_timestamp functions, fix LogSearchIndex to store all LogLine attributes, add list() method to get LogLines for a given date, and improve scripts/search-index
Tero Marttila <terom@fixme.fi>
parents: 88
diff changeset
   223
    _output_lines(options, lines)
2dc6de43f317 add utils.to/from_utc_timestamp functions, fix LogSearchIndex to store all LogLine attributes, add list() method to get LogLines for a given date, and improve scripts/search-index
Tero Marttila <terom@fixme.fi>
parents: 88
diff changeset
   224
2dc6de43f317 add utils.to/from_utc_timestamp functions, fix LogSearchIndex to store all LogLine attributes, add list() method to get LogLines for a given date, and improve scripts/search-index
Tero Marttila <terom@fixme.fi>
parents: 88
diff changeset
   225
def cmd_list (options, channel_name, *dates) :
2dc6de43f317 add utils.to/from_utc_timestamp functions, fix LogSearchIndex to store all LogLine attributes, add list() method to get LogLines for a given date, and improve scripts/search-index
Tero Marttila <terom@fixme.fi>
parents: 88
diff changeset
   226
    """
2dc6de43f317 add utils.to/from_utc_timestamp functions, fix LogSearchIndex to store all LogLine attributes, add list() method to get LogLines for a given date, and improve scripts/search-index
Tero Marttila <terom@fixme.fi>
parents: 88
diff changeset
   227
        List the indexed events for a specific date
2dc6de43f317 add utils.to/from_utc_timestamp functions, fix LogSearchIndex to store all LogLine attributes, add list() method to get LogLines for a given date, and improve scripts/search-index
Tero Marttila <terom@fixme.fi>
parents: 88
diff changeset
   228
    """
2dc6de43f317 add utils.to/from_utc_timestamp functions, fix LogSearchIndex to store all LogLine attributes, add list() method to get LogLines for a given date, and improve scripts/search-index
Tero Marttila <terom@fixme.fi>
parents: 88
diff changeset
   229
2dc6de43f317 add utils.to/from_utc_timestamp functions, fix LogSearchIndex to store all LogLine attributes, add list() method to get LogLines for a given date, and improve scripts/search-index
Tero Marttila <terom@fixme.fi>
parents: 88
diff changeset
   230
    # sanity-check
2dc6de43f317 add utils.to/from_utc_timestamp functions, fix LogSearchIndex to store all LogLine attributes, add list() method to get LogLines for a given date, and improve scripts/search-index
Tero Marttila <terom@fixme.fi>
parents: 88
diff changeset
   231
    if options.create :
2dc6de43f317 add utils.to/from_utc_timestamp functions, fix LogSearchIndex to store all LogLine attributes, add list() method to get LogLines for a given date, and improve scripts/search-index
Tero Marttila <terom@fixme.fi>
parents: 88
diff changeset
   232
        raise Exception("--create doesn't make sense for 'search'")
2dc6de43f317 add utils.to/from_utc_timestamp functions, fix LogSearchIndex to store all LogLine attributes, add list() method to get LogLines for a given date, and improve scripts/search-index
Tero Marttila <terom@fixme.fi>
parents: 88
diff changeset
   233
    
2dc6de43f317 add utils.to/from_utc_timestamp functions, fix LogSearchIndex to store all LogLine attributes, add list() method to get LogLines for a given date, and improve scripts/search-index
Tero Marttila <terom@fixme.fi>
parents: 88
diff changeset
   234
    # open index/channel
2dc6de43f317 add utils.to/from_utc_timestamp functions, fix LogSearchIndex to store all LogLine attributes, add list() method to get LogLines for a given date, and improve scripts/search-index
Tero Marttila <terom@fixme.fi>
parents: 88
diff changeset
   235
    index, channel = _open_index_and_channel(options, channel_name, 'r')
2dc6de43f317 add utils.to/from_utc_timestamp functions, fix LogSearchIndex to store all LogLine attributes, add list() method to get LogLines for a given date, and improve scripts/search-index
Tero Marttila <terom@fixme.fi>
parents: 88
diff changeset
   236
2dc6de43f317 add utils.to/from_utc_timestamp functions, fix LogSearchIndex to store all LogLine attributes, add list() method to get LogLines for a given date, and improve scripts/search-index
Tero Marttila <terom@fixme.fi>
parents: 88
diff changeset
   237
    # ...for each date
2dc6de43f317 add utils.to/from_utc_timestamp functions, fix LogSearchIndex to store all LogLine attributes, add list() method to get LogLines for a given date, and improve scripts/search-index
Tero Marttila <terom@fixme.fi>
parents: 88
diff changeset
   238
    for date_str in dates :
2dc6de43f317 add utils.to/from_utc_timestamp functions, fix LogSearchIndex to store all LogLine attributes, add list() method to get LogLines for a given date, and improve scripts/search-index
Tero Marttila <terom@fixme.fi>
parents: 88
diff changeset
   239
        # parse date
2dc6de43f317 add utils.to/from_utc_timestamp functions, fix LogSearchIndex to store all LogLine attributes, add list() method to get LogLines for a given date, and improve scripts/search-index
Tero Marttila <terom@fixme.fi>
parents: 88
diff changeset
   240
        date = _parse_date(options, date_str)
2dc6de43f317 add utils.to/from_utc_timestamp functions, fix LogSearchIndex to store all LogLine attributes, add list() method to get LogLines for a given date, and improve scripts/search-index
Tero Marttila <terom@fixme.fi>
parents: 88
diff changeset
   241
2dc6de43f317 add utils.to/from_utc_timestamp functions, fix LogSearchIndex to store all LogLine attributes, add list() method to get LogLines for a given date, and improve scripts/search-index
Tero Marttila <terom@fixme.fi>
parents: 88
diff changeset
   242
        # list
2dc6de43f317 add utils.to/from_utc_timestamp functions, fix LogSearchIndex to store all LogLine attributes, add list() method to get LogLines for a given date, and improve scripts/search-index
Tero Marttila <terom@fixme.fi>
parents: 88
diff changeset
   243
        lines = index.list(channel, date)
2dc6de43f317 add utils.to/from_utc_timestamp functions, fix LogSearchIndex to store all LogLine attributes, add list() method to get LogLines for a given date, and improve scripts/search-index
Tero Marttila <terom@fixme.fi>
parents: 88
diff changeset
   244
        
2dc6de43f317 add utils.to/from_utc_timestamp functions, fix LogSearchIndex to store all LogLine attributes, add list() method to get LogLines for a given date, and improve scripts/search-index
Tero Marttila <terom@fixme.fi>
parents: 88
diff changeset
   245
        # display
2dc6de43f317 add utils.to/from_utc_timestamp functions, fix LogSearchIndex to store all LogLine attributes, add list() method to get LogLines for a given date, and improve scripts/search-index
Tero Marttila <terom@fixme.fi>
parents: 88
diff changeset
   246
        _output_lines(options, lines)
65
8b50694f841e improve search further
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   247
93
48fca00689e3 implement scripts/search-index autoload
Tero Marttila <terom@fixme.fi>
parents: 89
diff changeset
   248
def cmd_autoload (options, *channel_names) :
48fca00689e3 implement scripts/search-index autoload
Tero Marttila <terom@fixme.fi>
parents: 89
diff changeset
   249
    """
48fca00689e3 implement scripts/search-index autoload
Tero Marttila <terom@fixme.fi>
parents: 89
diff changeset
   250
        Automatically loads all channel logs that have not been indexed yet (by logfile mtime)
48fca00689e3 implement scripts/search-index autoload
Tero Marttila <terom@fixme.fi>
parents: 89
diff changeset
   251
    """
48fca00689e3 implement scripts/search-index autoload
Tero Marttila <terom@fixme.fi>
parents: 89
diff changeset
   252
    
48fca00689e3 implement scripts/search-index autoload
Tero Marttila <terom@fixme.fi>
parents: 89
diff changeset
   253
    # open index
48fca00689e3 implement scripts/search-index autoload
Tero Marttila <terom@fixme.fi>
parents: 89
diff changeset
   254
    index = _open_index(options, 'c' if options.create else 'a')
48fca00689e3 implement scripts/search-index autoload
Tero Marttila <terom@fixme.fi>
parents: 89
diff changeset
   255
48fca00689e3 implement scripts/search-index autoload
Tero Marttila <terom@fixme.fi>
parents: 89
diff changeset
   256
    # default to all channels
48fca00689e3 implement scripts/search-index autoload
Tero Marttila <terom@fixme.fi>
parents: 89
diff changeset
   257
    if not channel_names :
48fca00689e3 implement scripts/search-index autoload
Tero Marttila <terom@fixme.fi>
parents: 89
diff changeset
   258
        channels = config.LOG_CHANNELS
48fca00689e3 implement scripts/search-index autoload
Tero Marttila <terom@fixme.fi>
parents: 89
diff changeset
   259
    
48fca00689e3 implement scripts/search-index autoload
Tero Marttila <terom@fixme.fi>
parents: 89
diff changeset
   260
    else :
48fca00689e3 implement scripts/search-index autoload
Tero Marttila <terom@fixme.fi>
parents: 89
diff changeset
   261
        channels = [config.LOG_CHANNELS.lookup(channel_name) for channel_name in channel_names]
48fca00689e3 implement scripts/search-index autoload
Tero Marttila <terom@fixme.fi>
parents: 89
diff changeset
   262
48fca00689e3 implement scripts/search-index autoload
Tero Marttila <terom@fixme.fi>
parents: 89
diff changeset
   263
    # iterate channels
48fca00689e3 implement scripts/search-index autoload
Tero Marttila <terom@fixme.fi>
parents: 89
diff changeset
   264
    for channel in channels :
48fca00689e3 implement scripts/search-index autoload
Tero Marttila <terom@fixme.fi>
parents: 89
diff changeset
   265
        if not options.quiet :
48fca00689e3 implement scripts/search-index autoload
Tero Marttila <terom@fixme.fi>
parents: 89
diff changeset
   266
            print "Channel %s:" % channel.id,
48fca00689e3 implement scripts/search-index autoload
Tero Marttila <terom@fixme.fi>
parents: 89
diff changeset
   267
48fca00689e3 implement scripts/search-index autoload
Tero Marttila <terom@fixme.fi>
parents: 89
diff changeset
   268
        # path to our state file
48fca00689e3 implement scripts/search-index autoload
Tero Marttila <terom@fixme.fi>
parents: 89
diff changeset
   269
        statefile_path = os.path.join(options.autoload_state_path, 'chan-%s' % channel.id)
94
6673de9bc911 implement --after for autoload
Tero Marttila <terom@fixme.fi>
parents: 93
diff changeset
   270
       
93
48fca00689e3 implement scripts/search-index autoload
Tero Marttila <terom@fixme.fi>
parents: 89
diff changeset
   271
        # override?
48fca00689e3 implement scripts/search-index autoload
Tero Marttila <terom@fixme.fi>
parents: 89
diff changeset
   272
        if options.reload :
48fca00689e3 implement scripts/search-index autoload
Tero Marttila <terom@fixme.fi>
parents: 89
diff changeset
   273
            # load all
48fca00689e3 implement scripts/search-index autoload
Tero Marttila <terom@fixme.fi>
parents: 89
diff changeset
   274
            mtime = None
48fca00689e3 implement scripts/search-index autoload
Tero Marttila <terom@fixme.fi>
parents: 89
diff changeset
   275
48fca00689e3 implement scripts/search-index autoload
Tero Marttila <terom@fixme.fi>
parents: 89
diff changeset
   276
            if not options.quiet :
48fca00689e3 implement scripts/search-index autoload
Tero Marttila <terom@fixme.fi>
parents: 89
diff changeset
   277
                print "reloading all:",
48fca00689e3 implement scripts/search-index autoload
Tero Marttila <terom@fixme.fi>
parents: 89
diff changeset
   278
48fca00689e3 implement scripts/search-index autoload
Tero Marttila <terom@fixme.fi>
parents: 89
diff changeset
   279
        # stat for mtime
48fca00689e3 implement scripts/search-index autoload
Tero Marttila <terom@fixme.fi>
parents: 89
diff changeset
   280
        # XXX: replace with single utils.mtime()
48fca00689e3 implement scripts/search-index autoload
Tero Marttila <terom@fixme.fi>
parents: 89
diff changeset
   281
        elif os.path.exists(statefile_path) :
48fca00689e3 implement scripts/search-index autoload
Tero Marttila <terom@fixme.fi>
parents: 89
diff changeset
   282
            # get last update date for channel
48fca00689e3 implement scripts/search-index autoload
Tero Marttila <terom@fixme.fi>
parents: 89
diff changeset
   283
            mtime = utils.from_utc_timestamp(os.stat(statefile_path).st_mtime)
48fca00689e3 implement scripts/search-index autoload
Tero Marttila <terom@fixme.fi>
parents: 89
diff changeset
   284
            
48fca00689e3 implement scripts/search-index autoload
Tero Marttila <terom@fixme.fi>
parents: 89
diff changeset
   285
            if not options.quiet :
48fca00689e3 implement scripts/search-index autoload
Tero Marttila <terom@fixme.fi>
parents: 89
diff changeset
   286
                print "last load=%s:" % mtime,
48fca00689e3 implement scripts/search-index autoload
Tero Marttila <terom@fixme.fi>
parents: 89
diff changeset
   287
48fca00689e3 implement scripts/search-index autoload
Tero Marttila <terom@fixme.fi>
parents: 89
diff changeset
   288
        else :
48fca00689e3 implement scripts/search-index autoload
Tero Marttila <terom@fixme.fi>
parents: 89
diff changeset
   289
            # unknown, load all
48fca00689e3 implement scripts/search-index autoload
Tero Marttila <terom@fixme.fi>
parents: 89
diff changeset
   290
            mtime = None
48fca00689e3 implement scripts/search-index autoload
Tero Marttila <terom@fixme.fi>
parents: 89
diff changeset
   291
            
48fca00689e3 implement scripts/search-index autoload
Tero Marttila <terom@fixme.fi>
parents: 89
diff changeset
   292
            if not options.quiet :
48fca00689e3 implement scripts/search-index autoload
Tero Marttila <terom@fixme.fi>
parents: 89
diff changeset
   293
                print "no previous load state:",
94
6673de9bc911 implement --after for autoload
Tero Marttila <terom@fixme.fi>
parents: 93
diff changeset
   294
 
6673de9bc911 implement --after for autoload
Tero Marttila <terom@fixme.fi>
parents: 93
diff changeset
   295
        # only after some specific date?
6673de9bc911 implement --after for autoload
Tero Marttila <terom@fixme.fi>
parents: 93
diff changeset
   296
        if options.after :
6673de9bc911 implement --after for autoload
Tero Marttila <terom@fixme.fi>
parents: 93
diff changeset
   297
            after = options.after
6673de9bc911 implement --after for autoload
Tero Marttila <terom@fixme.fi>
parents: 93
diff changeset
   298
            
6673de9bc911 implement --after for autoload
Tero Marttila <terom@fixme.fi>
parents: 93
diff changeset
   299
            print "after=%s:" % after,
6673de9bc911 implement --after for autoload
Tero Marttila <terom@fixme.fi>
parents: 93
diff changeset
   300
6673de9bc911 implement --after for autoload
Tero Marttila <terom@fixme.fi>
parents: 93
diff changeset
   301
        else :
6673de9bc911 implement --after for autoload
Tero Marttila <terom@fixme.fi>
parents: 93
diff changeset
   302
            after = None
93
48fca00689e3 implement scripts/search-index autoload
Tero Marttila <terom@fixme.fi>
parents: 89
diff changeset
   303
        
48fca00689e3 implement scripts/search-index autoload
Tero Marttila <terom@fixme.fi>
parents: 89
diff changeset
   304
        # get lines
94
6673de9bc911 implement --after for autoload
Tero Marttila <terom@fixme.fi>
parents: 93
diff changeset
   305
        lines = channel.source.get_modified(mtime, after)
93
48fca00689e3 implement scripts/search-index autoload
Tero Marttila <terom@fixme.fi>
parents: 89
diff changeset
   306
        
48fca00689e3 implement scripts/search-index autoload
Tero Marttila <terom@fixme.fi>
parents: 89
diff changeset
   307
        # insert
48fca00689e3 implement scripts/search-index autoload
Tero Marttila <terom@fixme.fi>
parents: 89
diff changeset
   308
        if not options.quiet :
48fca00689e3 implement scripts/search-index autoload
Tero Marttila <terom@fixme.fi>
parents: 89
diff changeset
   309
            print "inserting..."
48fca00689e3 implement scripts/search-index autoload
Tero Marttila <terom@fixme.fi>
parents: 89
diff changeset
   310
        
48fca00689e3 implement scripts/search-index autoload
Tero Marttila <terom@fixme.fi>
parents: 89
diff changeset
   311
        _insert_lines(index, options, channel, lines)
48fca00689e3 implement scripts/search-index autoload
Tero Marttila <terom@fixme.fi>
parents: 89
diff changeset
   312
48fca00689e3 implement scripts/search-index autoload
Tero Marttila <terom@fixme.fi>
parents: 89
diff changeset
   313
        # write autoload state
48fca00689e3 implement scripts/search-index autoload
Tero Marttila <terom@fixme.fi>
parents: 89
diff changeset
   314
        open(statefile_path, 'w').close()
48fca00689e3 implement scripts/search-index autoload
Tero Marttila <terom@fixme.fi>
parents: 89
diff changeset
   315
88
0b8e2ba5f76f improve scripts/search-index with better help info
Tero Marttila <terom@fixme.fi>
parents: 83
diff changeset
   316
def cmd_help (options, *args) :
0b8e2ba5f76f improve scripts/search-index with better help info
Tero Marttila <terom@fixme.fi>
parents: 83
diff changeset
   317
    """
0b8e2ba5f76f improve scripts/search-index with better help info
Tero Marttila <terom@fixme.fi>
parents: 83
diff changeset
   318
        Help about commands
0b8e2ba5f76f improve scripts/search-index with better help info
Tero Marttila <terom@fixme.fi>
parents: 83
diff changeset
   319
    """
0b8e2ba5f76f improve scripts/search-index with better help info
Tero Marttila <terom@fixme.fi>
parents: 83
diff changeset
   320
0b8e2ba5f76f improve scripts/search-index with better help info
Tero Marttila <terom@fixme.fi>
parents: 83
diff changeset
   321
    import inspect
0b8e2ba5f76f improve scripts/search-index with better help info
Tero Marttila <terom@fixme.fi>
parents: 83
diff changeset
   322
    
0b8e2ba5f76f improve scripts/search-index with better help info
Tero Marttila <terom@fixme.fi>
parents: 83
diff changeset
   323
    # general help stuff
0b8e2ba5f76f improve scripts/search-index with better help info
Tero Marttila <terom@fixme.fi>
parents: 83
diff changeset
   324
    options._parser.print_help()
0b8e2ba5f76f improve scripts/search-index with better help info
Tero Marttila <terom@fixme.fi>
parents: 83
diff changeset
   325
0b8e2ba5f76f improve scripts/search-index with better help info
Tero Marttila <terom@fixme.fi>
parents: 83
diff changeset
   326
    # specific command?
0b8e2ba5f76f improve scripts/search-index with better help info
Tero Marttila <terom@fixme.fi>
parents: 83
diff changeset
   327
    if args :
0b8e2ba5f76f improve scripts/search-index with better help info
Tero Marttila <terom@fixme.fi>
parents: 83
diff changeset
   328
        # the command name
0b8e2ba5f76f improve scripts/search-index with better help info
Tero Marttila <terom@fixme.fi>
parents: 83
diff changeset
   329
        command, = args
0b8e2ba5f76f improve scripts/search-index with better help info
Tero Marttila <terom@fixme.fi>
parents: 83
diff changeset
   330
        
0b8e2ba5f76f improve scripts/search-index with better help info
Tero Marttila <terom@fixme.fi>
parents: 83
diff changeset
   331
        # XXX: display info about specific command
0b8e2ba5f76f improve scripts/search-index with better help info
Tero Marttila <terom@fixme.fi>
parents: 83
diff changeset
   332
        xxx
0b8e2ba5f76f improve scripts/search-index with better help info
Tero Marttila <terom@fixme.fi>
parents: 83
diff changeset
   333
    
0b8e2ba5f76f improve scripts/search-index with better help info
Tero Marttila <terom@fixme.fi>
parents: 83
diff changeset
   334
    # general
0b8e2ba5f76f improve scripts/search-index with better help info
Tero Marttila <terom@fixme.fi>
parents: 83
diff changeset
   335
    else :
0b8e2ba5f76f improve scripts/search-index with better help info
Tero Marttila <terom@fixme.fi>
parents: 83
diff changeset
   336
        print
0b8e2ba5f76f improve scripts/search-index with better help info
Tero Marttila <terom@fixme.fi>
parents: 83
diff changeset
   337
        print "Available commands:"
0b8e2ba5f76f improve scripts/search-index with better help info
Tero Marttila <terom@fixme.fi>
parents: 83
diff changeset
   338
0b8e2ba5f76f improve scripts/search-index with better help info
Tero Marttila <terom@fixme.fi>
parents: 83
diff changeset
   339
        # build list of all cmd_* objects
0b8e2ba5f76f improve scripts/search-index with better help info
Tero Marttila <terom@fixme.fi>
parents: 83
diff changeset
   340
        cmd_objects = [(name, obj) for name, obj in globals().iteritems() if name.startswith('cmd_') and inspect.isfunction(obj)]
0b8e2ba5f76f improve scripts/search-index with better help info
Tero Marttila <terom@fixme.fi>
parents: 83
diff changeset
   341
0b8e2ba5f76f improve scripts/search-index with better help info
Tero Marttila <terom@fixme.fi>
parents: 83
diff changeset
   342
        # sort alphabetically
0b8e2ba5f76f improve scripts/search-index with better help info
Tero Marttila <terom@fixme.fi>
parents: 83
diff changeset
   343
        cmd_objects.sort()
0b8e2ba5f76f improve scripts/search-index with better help info
Tero Marttila <terom@fixme.fi>
parents: 83
diff changeset
   344
        
0b8e2ba5f76f improve scripts/search-index with better help info
Tero Marttila <terom@fixme.fi>
parents: 83
diff changeset
   345
        # iterate through all cmd_* objects
0b8e2ba5f76f improve scripts/search-index with better help info
Tero Marttila <terom@fixme.fi>
parents: 83
diff changeset
   346
        for cmd_func_name, cmd_func in cmd_objects :
0b8e2ba5f76f improve scripts/search-index with better help info
Tero Marttila <terom@fixme.fi>
parents: 83
diff changeset
   347
            # remove cmd_ prefix
0b8e2ba5f76f improve scripts/search-index with better help info
Tero Marttila <terom@fixme.fi>
parents: 83
diff changeset
   348
            cmd_name = cmd_func_name[4:]
0b8e2ba5f76f improve scripts/search-index with better help info
Tero Marttila <terom@fixme.fi>
parents: 83
diff changeset
   349
0b8e2ba5f76f improve scripts/search-index with better help info
Tero Marttila <terom@fixme.fi>
parents: 83
diff changeset
   350
            # inspect
0b8e2ba5f76f improve scripts/search-index with better help info
Tero Marttila <terom@fixme.fi>
parents: 83
diff changeset
   351
            cmd_args, cmd_varargs, cmd_varkw, cmd_default = inspect.getargspec(cmd_func)
0b8e2ba5f76f improve scripts/search-index with better help info
Tero Marttila <terom@fixme.fi>
parents: 83
diff changeset
   352
            cmd_doc = inspect.getdoc(cmd_func)
0b8e2ba5f76f improve scripts/search-index with better help info
Tero Marttila <terom@fixme.fi>
parents: 83
diff changeset
   353
0b8e2ba5f76f improve scripts/search-index with better help info
Tero Marttila <terom@fixme.fi>
parents: 83
diff changeset
   354
            # remove the "options" arg
0b8e2ba5f76f improve scripts/search-index with better help info
Tero Marttila <terom@fixme.fi>
parents: 83
diff changeset
   355
            cmd_args = cmd_args[1:]
0b8e2ba5f76f improve scripts/search-index with better help info
Tero Marttila <terom@fixme.fi>
parents: 83
diff changeset
   356
0b8e2ba5f76f improve scripts/search-index with better help info
Tero Marttila <terom@fixme.fi>
parents: 83
diff changeset
   357
            # display
0b8e2ba5f76f improve scripts/search-index with better help info
Tero Marttila <terom@fixme.fi>
parents: 83
diff changeset
   358
            print "\t%10s %-30s : %s" % (cmd_name, inspect.formatargspec(cmd_args, cmd_varargs, None, cmd_default), cmd_doc)
0b8e2ba5f76f improve scripts/search-index with better help info
Tero Marttila <terom@fixme.fi>
parents: 83
diff changeset
   359
0b8e2ba5f76f improve scripts/search-index with better help info
Tero Marttila <terom@fixme.fi>
parents: 83
diff changeset
   360
def main (argv) :
0b8e2ba5f76f improve scripts/search-index with better help info
Tero Marttila <terom@fixme.fi>
parents: 83
diff changeset
   361
    """
0b8e2ba5f76f improve scripts/search-index with better help info
Tero Marttila <terom@fixme.fi>
parents: 83
diff changeset
   362
        Command-line main, with given argv
0b8e2ba5f76f improve scripts/search-index with better help info
Tero Marttila <terom@fixme.fi>
parents: 83
diff changeset
   363
    """
0b8e2ba5f76f improve scripts/search-index with better help info
Tero Marttila <terom@fixme.fi>
parents: 83
diff changeset
   364
65
8b50694f841e improve search further
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   365
    from optparse import OptionParser
8b50694f841e improve search further
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   366
    
8b50694f841e improve search further
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   367
    # define parser
8b50694f841e improve search further
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   368
    parser = OptionParser(
8b50694f841e improve search further
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   369
        usage           = "%prog [options] <command> [ ... ]",
88
0b8e2ba5f76f improve scripts/search-index with better help info
Tero Marttila <terom@fixme.fi>
parents: 83
diff changeset
   370
        add_help_option = False,
65
8b50694f841e improve search further
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   371
    )
8b50694f841e improve search further
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   372
8b50694f841e improve search further
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   373
    # define command-line arguments
94
6673de9bc911 implement --after for autoload
Tero Marttila <terom@fixme.fi>
parents: 93
diff changeset
   374
    parser.add_option('-h', "--help",           dest="help",            help="Show this help message and exit",     action="store_true" )
88
0b8e2ba5f76f improve scripts/search-index with better help info
Tero Marttila <terom@fixme.fi>
parents: 83
diff changeset
   375
    parser.add_option('-F', "--formatter",      dest="formatter_name",  help="LogFormatter to use",                 metavar="FMT",  type="choice", default="irssi",
0b8e2ba5f76f improve scripts/search-index with better help info
Tero Marttila <terom@fixme.fi>
parents: 83
diff changeset
   376
        choices=[fmt_name for fmt_name in config.LOG_FORMATTERS.iterkeys()])
0b8e2ba5f76f improve scripts/search-index with better help info
Tero Marttila <terom@fixme.fi>
parents: 83
diff changeset
   377
94
6673de9bc911 implement --after for autoload
Tero Marttila <terom@fixme.fi>
parents: 93
diff changeset
   378
    parser.add_option('-I', "--index",          dest="index_path",      help="Index database path",                 metavar="PATH", default="logs/index"            )
6673de9bc911 implement --after for autoload
Tero Marttila <terom@fixme.fi>
parents: 93
diff changeset
   379
    parser.add_option(      "--autoload-state", dest="autoload_state_path", help="Path to autoload state dir",      metavar="PATH", default="logs/autoload-state"   )
6673de9bc911 implement --after for autoload
Tero Marttila <terom@fixme.fi>
parents: 93
diff changeset
   380
    parser.add_option(      "--after",          dest="after",           help="Only autoload logfiles after the given date", metavar="DATE", default=None            )
6673de9bc911 implement --after for autoload
Tero Marttila <terom@fixme.fi>
parents: 93
diff changeset
   381
    parser.add_option('-Z', "--timezone",       dest="tz_name",         help="Timezone for output",                 metavar="TZ",   default="UTC"                   )
6673de9bc911 implement --after for autoload
Tero Marttila <terom@fixme.fi>
parents: 93
diff changeset
   382
    parser.add_option('-f', "--force",          dest="force",           help="Force dangerous operation",           action="store_true" )
6673de9bc911 implement --after for autoload
Tero Marttila <terom@fixme.fi>
parents: 93
diff changeset
   383
    parser.add_option(      "--create",         dest="create",          help="Create index database",               action="store_true" )
6673de9bc911 implement --after for autoload
Tero Marttila <terom@fixme.fi>
parents: 93
diff changeset
   384
    parser.add_option(      "--skip-missing",   dest="skip_missing",    help="Skip missing logfiles",               action="store_true" )
6673de9bc911 implement --after for autoload
Tero Marttila <terom@fixme.fi>
parents: 93
diff changeset
   385
    parser.add_option(      "--reload",         dest="reload",          help="Force reload lines",                  action="store_true" )
6673de9bc911 implement --after for autoload
Tero Marttila <terom@fixme.fi>
parents: 93
diff changeset
   386
    parser.add_option(      "--quiet",          dest="quiet",           help="Supress status messages",             action="store_true" )
65
8b50694f841e improve search further
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   387
8b50694f841e improve search further
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   388
    # parse
88
0b8e2ba5f76f improve scripts/search-index with better help info
Tero Marttila <terom@fixme.fi>
parents: 83
diff changeset
   389
    options, args = parser.parse_args(argv[1:])
65
8b50694f841e improve search further
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   390
8b50694f841e improve search further
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   391
    # postprocess stuff
88
0b8e2ba5f76f improve scripts/search-index with better help info
Tero Marttila <terom@fixme.fi>
parents: 83
diff changeset
   392
    options._parser = parser
65
8b50694f841e improve search further
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   393
    options.tz = pytz.timezone(options.tz_name)
82
afd3120ec71e add a LogSourceDecoder to fallback from utf-8 to latin-1, and improve scripts/search-index.py
Tero Marttila <terom@fixme.fi>
parents: 68
diff changeset
   394
    options.formatter = config.LOG_FORMATTERS[options.formatter_name](options.tz, "%H:%M:%S", None, None)
88
0b8e2ba5f76f improve scripts/search-index with better help info
Tero Marttila <terom@fixme.fi>
parents: 83
diff changeset
   395
94
6673de9bc911 implement --after for autoload
Tero Marttila <terom@fixme.fi>
parents: 93
diff changeset
   396
    if options.after :
6673de9bc911 implement --after for autoload
Tero Marttila <terom@fixme.fi>
parents: 93
diff changeset
   397
        options.after = _parse_date(options, options.after)
6673de9bc911 implement --after for autoload
Tero Marttila <terom@fixme.fi>
parents: 93
diff changeset
   398
88
0b8e2ba5f76f improve scripts/search-index with better help info
Tero Marttila <terom@fixme.fi>
parents: 83
diff changeset
   399
    # special-case --help
0b8e2ba5f76f improve scripts/search-index with better help info
Tero Marttila <terom@fixme.fi>
parents: 83
diff changeset
   400
    if options.help :
0b8e2ba5f76f improve scripts/search-index with better help info
Tero Marttila <terom@fixme.fi>
parents: 83
diff changeset
   401
        return cmd_help(options, *args)
0b8e2ba5f76f improve scripts/search-index with better help info
Tero Marttila <terom@fixme.fi>
parents: 83
diff changeset
   402
    
0b8e2ba5f76f improve scripts/search-index with better help info
Tero Marttila <terom@fixme.fi>
parents: 83
diff changeset
   403
    # must have at least the command argument
0b8e2ba5f76f improve scripts/search-index with better help info
Tero Marttila <terom@fixme.fi>
parents: 83
diff changeset
   404
    if not args :
0b8e2ba5f76f improve scripts/search-index with better help info
Tero Marttila <terom@fixme.fi>
parents: 83
diff changeset
   405
        raise CommandError("Missing command")
65
8b50694f841e improve search further
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   406
    
8b50694f841e improve search further
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   407
    # pop command
8b50694f841e improve search further
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   408
    command = args.pop(0)
88
0b8e2ba5f76f improve scripts/search-index with better help info
Tero Marttila <terom@fixme.fi>
parents: 83
diff changeset
   409
    
0b8e2ba5f76f improve scripts/search-index with better help info
Tero Marttila <terom@fixme.fi>
parents: 83
diff changeset
   410
    # get func
0b8e2ba5f76f improve scripts/search-index with better help info
Tero Marttila <terom@fixme.fi>
parents: 83
diff changeset
   411
    func = globals().get('cmd_%s' % command)
0b8e2ba5f76f improve scripts/search-index with better help info
Tero Marttila <terom@fixme.fi>
parents: 83
diff changeset
   412
    
0b8e2ba5f76f improve scripts/search-index with better help info
Tero Marttila <terom@fixme.fi>
parents: 83
diff changeset
   413
    # unknown command?
0b8e2ba5f76f improve scripts/search-index with better help info
Tero Marttila <terom@fixme.fi>
parents: 83
diff changeset
   414
    if not func :
0b8e2ba5f76f improve scripts/search-index with better help info
Tero Marttila <terom@fixme.fi>
parents: 83
diff changeset
   415
        raise CommandError("Unknown command: %s" % command)
65
8b50694f841e improve search further
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   416
    
8b50694f841e improve search further
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   417
    # call
8b50694f841e improve search further
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   418
    func(options, *args)
8b50694f841e improve search further
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   419
88
0b8e2ba5f76f improve scripts/search-index with better help info
Tero Marttila <terom@fixme.fi>
parents: 83
diff changeset
   420
if __name__ == '__main__' :
0b8e2ba5f76f improve scripts/search-index with better help info
Tero Marttila <terom@fixme.fi>
parents: 83
diff changeset
   421
    try :
0b8e2ba5f76f improve scripts/search-index with better help info
Tero Marttila <terom@fixme.fi>
parents: 83
diff changeset
   422
        main(sys.argv)
0b8e2ba5f76f improve scripts/search-index with better help info
Tero Marttila <terom@fixme.fi>
parents: 83
diff changeset
   423
        sys.exit(0)
65
8b50694f841e improve search further
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   424
88
0b8e2ba5f76f improve scripts/search-index with better help info
Tero Marttila <terom@fixme.fi>
parents: 83
diff changeset
   425
    except CommandError, e :
0b8e2ba5f76f improve scripts/search-index with better help info
Tero Marttila <terom@fixme.fi>
parents: 83
diff changeset
   426
        print e
0b8e2ba5f76f improve scripts/search-index with better help info
Tero Marttila <terom@fixme.fi>
parents: 83
diff changeset
   427
        sys.exit(1)
0b8e2ba5f76f improve scripts/search-index with better help info
Tero Marttila <terom@fixme.fi>
parents: 83
diff changeset
   428