Changeset 155

Show
Ignore:
Timestamp:
Tue Nov 29 14:10:16 2005
Author:
drew
Message:

bump

Files:

Legend:

Unmodified
Added
Removed
Modified
  • subprojects/LogGrok/trunk/loggrok/parse.py

    r151 r155  
    11 11 __revision__ = '$Revision$'  
    12 12  
    13   LOG_PATTERN_DEFAULT = re.compile(r'^(\d\d\d\d-\d\d-\d\d \d\d:\d\d:\d\d,\d\d\d) ([A-Z]{4,5}) ')  
      13 LOG_PATTERN_DEFAULT = re.compile(r'^(\d\d\d\d-\d\d-\d\d \d\d:\d\d:\d\d,\d\d\d) ([A-Z]{4,5}) *')  
    13 13  
    14 14  
  • subprojects/LogGrok/trunk/loggrok/actions.py

    r151 r155  
    7 7 import sys  
    8 8  
      9 from xix.utils.python import CurriedCallable  
      10  
    9 11 __author__ = 'Drew Smathers'  
    10 12 __copyright__ = 'Copyright 2005, Drew Smathers'  
     
    18 20         self.__category_callbacks = {}  
    19 21  
    20       def addLevelCallback(self, level, func):  
      22     def addLevelCallback(self, level, func, *pargs, **kwargs):  
    20 22         """Add callback for entry with level given in  
    21 23         log entry header.  
     
    25 27         if level not in lcs.keys():  
    26 28             lcs[level] = []  
    27           lcs[level].append(func)  
      29         lcs[level].append(CurriedCallable(func, *pargs, **kwargs))  
    27 29          
    28       def addMessageCategoryCallback(self, cat, func):  
      30     def addMessageCategoryCallback(self, cat, func, *pargs, **kwargs):  
    28 30         """Add callback for entry of the given category.  
    29 31         """  
     
    33 35         if cat not in mcs.keys():  
    34 36             mcs[cat] = []  
    35           mcs[cat].append(func)  
      37         mcs[cat].append(CurriedCallable(func, *pargs, **kwargs))  
    35 37  
    36 38     def __call__(self, entry):  
  • subprojects/LogGrok/trunk/loggrok/log.py

    r151 r155  
    7 7 from loggrok.parse import parserFactory, LogParseException  
    8 8  
    9   from xix.utils.io import AggregateFile  
      9 from xix.utils.io import AggregateFile, AggregateFileInput  
    9 9 from UserString import UserString  
    10 10 from cStringIO import StringIO  
     
    91 91         else:  
    92 92             self.fd = open(logfile)  
      93         self.fd = logfile  
    93 94         self.messageParser = parserFactory('log.message')  
    94 95         self.headerParser  = parserFactory('log.header')  
    95 96         self.__lastheader = None  
    96           self.action = None  
      97         self.action = self.__donothing  
      98         # some state information for handling lines  
      99         self.header = None  
      100         self.message_buffer = StringIO()  
    97 101  
      102     def __donothing(self, entry):  
      103         pass  
      104  
      105     def __recvline(self, line):  
      106         try:  
      107             header, _ = self.headerParser.parse(line)  
      108             if header:  
      109                 try:  
      110                     entry = None  
      111                     if self.header:  
      112                         entry = self.__process_entry()  
      113                     self.header = LogHeader(header)  
      114                     self.message_buffer.write(line[len(self.header):])  
      115                     return entry  
      116                 except LogParseException, lpe:  
      117                     self.header = LogHeader(header)  
      118                     self.message_buffer.truncate(0)  
      119                     self.message_buffer.seek(0)  
      120                     self.message_buffer.write(line[len(self.header):])  
      121                     return  
      122             else:  
      123                 self.message_buffer.write(line)  
      124         except:  
      125             self.message_buffer.write(line)  
      126  
      127     def __process_entry(self):  
      128         message = self.message_buffer.getvalue()  
      129         entry = LogEntry(self.header, message, parser=self.messageParser)  
      130         self.action(entry)  
      131         self.message_buffer.truncate(0)  
      132         self.message_buffer.seek(0)  
      133         return entry  
      134      
    98 135     def readentry(self):  
    99           """Read the next entry in this log.  
      136         """Read the next entry in this log. Do not use this  
    99 136  
    100 137         @todo unit testing  
     
    148 185         @todo unit testing  
    149 186         """  
    150           entry = self.readentry()  
    151           while entry:  
    152               yield entry  
    153               entry = self.readentry()  
      187         #entry = self.readentry()  
      188         #while entry:  
      189         #    yield entry  
      190         #    entry = self.readentry()  
      191         for line in self.fd:  
      192             entry = self.__recvline(line)  
      193             if entry:  
      194                 yield entry  
      195         try:  
      196             entry = self.__process_entry()  
      197             if entry:  
      198                 yield entry  
      199         except LogParseException:  
      200             pass  
    154 201  
    155 202     def __iter__(self):  
     
    169 216     together a sequence of logs into one log object.  
    170 217     """  
      218      
      219     def  __init__(self, files):  
      220         LogStream.__init__(self, AggregateFileInput(files))  
      221  
      222  
      223 def _sortmatched(matched, pos):  
      224     sortlist = []  
      225     default = None  
      226     for match in matched:  
      227         try:  
      228             index = int(match.split('.')[pos])  
      229             sortlist.append((index, match))  
      230         except Exception, e:  
      231             default = match  
      232     sortlist.sort()  
      233     results = [tup[1] for tup in sortlist]  
      234     if default:  
      235         results = [default] + results  
      236     results.reverse()  
      237     return results  
    171 238  
    172 239 class RollingIndexLogStream(RollingLogStream):  
     
    184 251         """  
    185 252         matched = glob.glob(os.path.join(directory, basename + '*.' + ext))  
    186           matched.sort()  
    187           matched.reverse()  
    188           matched = matched[1:] + matched[0:1]  
    189           RollingLogStream.__init__(self, AggregateFile(matched).open())  
      253         matched = _sortmatched(matched, -2)  
      254         RollingLogStream.__init__(self, matched)  
    190 255  
      256 class RollingIndexLogStream2(RollingLogStream):  
      257     """For directories containing logs of the form (from newest to oldest):  
      258      
      259     <basename>.log <basename>.log.1 <basename>.log.2  
      260     """  
    191 261  
      262     def __init__(self, directory, basename, ext="log"):  
      263         matched = glob.glob(os.path.join(directory, basename + "." + ext + "*"))  
      264         matched = _sortmatched(matched, -1)  
      265         RollingLogStream.__init__(self, matched)  
      266      
    192 267 class RollingDateLogStream(RollingLogStream):  
    193 268