pvl/syslog/parser.py
author Tero Marttila <terom@fixme.fi>
Fri, 04 Jan 2013 23:47:53 +0200
changeset 69 9da998198936
parent 67 3324ed10c42f
child 70 c8ec745a2aaa
permissions -rw-r--r--
pvl.syslog.parser: implement support for optional <PRI>
31
3e6d0feb115c pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     1
import datetime, time
3e6d0feb115c pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     2
import re
3e6d0feb115c pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     3
3e6d0feb115c pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     4
import logging; log = logging.getLogger('pvl.syslog.parser')
3e6d0feb115c pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     5
3e6d0feb115c pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     6
class SyslogParser (object) :
3e6d0feb115c pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     7
    """
44
977442ccb72d pvl.syslog: split out SyslogFilter
Tero Marttila <terom@fixme.fi>
parents: 43
diff changeset
     8
        Parse syslog lines in text format, as used in logfiles/fifos.
31
3e6d0feb115c pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     9
    """
69
9da998198936 pvl.syslog.parser: implement support for optional <PRI>
Tero Marttila <terom@fixme.fi>
parents: 67
diff changeset
    10
9da998198936 pvl.syslog.parser: implement support for optional <PRI>
Tero Marttila <terom@fixme.fi>
parents: 67
diff changeset
    11
    SEVERITIES = dict(enumerate((
9da998198936 pvl.syslog.parser: implement support for optional <PRI>
Tero Marttila <terom@fixme.fi>
parents: 67
diff changeset
    12
        'emerg',
9da998198936 pvl.syslog.parser: implement support for optional <PRI>
Tero Marttila <terom@fixme.fi>
parents: 67
diff changeset
    13
        'alert', 
9da998198936 pvl.syslog.parser: implement support for optional <PRI>
Tero Marttila <terom@fixme.fi>
parents: 67
diff changeset
    14
        'crit', 
9da998198936 pvl.syslog.parser: implement support for optional <PRI>
Tero Marttila <terom@fixme.fi>
parents: 67
diff changeset
    15
        'err',
9da998198936 pvl.syslog.parser: implement support for optional <PRI>
Tero Marttila <terom@fixme.fi>
parents: 67
diff changeset
    16
        'warning',
9da998198936 pvl.syslog.parser: implement support for optional <PRI>
Tero Marttila <terom@fixme.fi>
parents: 67
diff changeset
    17
        'notice',
9da998198936 pvl.syslog.parser: implement support for optional <PRI>
Tero Marttila <terom@fixme.fi>
parents: 67
diff changeset
    18
        'info', 
9da998198936 pvl.syslog.parser: implement support for optional <PRI>
Tero Marttila <terom@fixme.fi>
parents: 67
diff changeset
    19
        'debug',
9da998198936 pvl.syslog.parser: implement support for optional <PRI>
Tero Marttila <terom@fixme.fi>
parents: 67
diff changeset
    20
    )))
9da998198936 pvl.syslog.parser: implement support for optional <PRI>
Tero Marttila <terom@fixme.fi>
parents: 67
diff changeset
    21
9da998198936 pvl.syslog.parser: implement support for optional <PRI>
Tero Marttila <terom@fixme.fi>
parents: 67
diff changeset
    22
    FACILITIES = dict(enumerate((
9da998198936 pvl.syslog.parser: implement support for optional <PRI>
Tero Marttila <terom@fixme.fi>
parents: 67
diff changeset
    23
        'kern',     # 0
9da998198936 pvl.syslog.parser: implement support for optional <PRI>
Tero Marttila <terom@fixme.fi>
parents: 67
diff changeset
    24
        'user',     # 1
9da998198936 pvl.syslog.parser: implement support for optional <PRI>
Tero Marttila <terom@fixme.fi>
parents: 67
diff changeset
    25
        'mail',     # 2
9da998198936 pvl.syslog.parser: implement support for optional <PRI>
Tero Marttila <terom@fixme.fi>
parents: 67
diff changeset
    26
        'daemon',   # 3
9da998198936 pvl.syslog.parser: implement support for optional <PRI>
Tero Marttila <terom@fixme.fi>
parents: 67
diff changeset
    27
        'auth',     # 4
9da998198936 pvl.syslog.parser: implement support for optional <PRI>
Tero Marttila <terom@fixme.fi>
parents: 67
diff changeset
    28
        'syslog',   # 5
9da998198936 pvl.syslog.parser: implement support for optional <PRI>
Tero Marttila <terom@fixme.fi>
parents: 67
diff changeset
    29
        'lpr',      # 6
9da998198936 pvl.syslog.parser: implement support for optional <PRI>
Tero Marttila <terom@fixme.fi>
parents: 67
diff changeset
    30
        'news',     # 7
9da998198936 pvl.syslog.parser: implement support for optional <PRI>
Tero Marttila <terom@fixme.fi>
parents: 67
diff changeset
    31
        'uucp',     # 8
9da998198936 pvl.syslog.parser: implement support for optional <PRI>
Tero Marttila <terom@fixme.fi>
parents: 67
diff changeset
    32
        'cron',     # 9
9da998198936 pvl.syslog.parser: implement support for optional <PRI>
Tero Marttila <terom@fixme.fi>
parents: 67
diff changeset
    33
        'authpriv', # 10
9da998198936 pvl.syslog.parser: implement support for optional <PRI>
Tero Marttila <terom@fixme.fi>
parents: 67
diff changeset
    34
        'ftp',      # 11
9da998198936 pvl.syslog.parser: implement support for optional <PRI>
Tero Marttila <terom@fixme.fi>
parents: 67
diff changeset
    35
        'ntp',      # 12
9da998198936 pvl.syslog.parser: implement support for optional <PRI>
Tero Marttila <terom@fixme.fi>
parents: 67
diff changeset
    36
        'audit',    # 13
9da998198936 pvl.syslog.parser: implement support for optional <PRI>
Tero Marttila <terom@fixme.fi>
parents: 67
diff changeset
    37
        'alert',    # 14
9da998198936 pvl.syslog.parser: implement support for optional <PRI>
Tero Marttila <terom@fixme.fi>
parents: 67
diff changeset
    38
        'clock',    # 15
9da998198936 pvl.syslog.parser: implement support for optional <PRI>
Tero Marttila <terom@fixme.fi>
parents: 67
diff changeset
    39
        'local0',   # 16
9da998198936 pvl.syslog.parser: implement support for optional <PRI>
Tero Marttila <terom@fixme.fi>
parents: 67
diff changeset
    40
        'local1',   # 17
9da998198936 pvl.syslog.parser: implement support for optional <PRI>
Tero Marttila <terom@fixme.fi>
parents: 67
diff changeset
    41
        'local2',   # 18
9da998198936 pvl.syslog.parser: implement support for optional <PRI>
Tero Marttila <terom@fixme.fi>
parents: 67
diff changeset
    42
        'local3',   # 19
9da998198936 pvl.syslog.parser: implement support for optional <PRI>
Tero Marttila <terom@fixme.fi>
parents: 67
diff changeset
    43
        'local4',   # 20
9da998198936 pvl.syslog.parser: implement support for optional <PRI>
Tero Marttila <terom@fixme.fi>
parents: 67
diff changeset
    44
        'local5',   # 21
9da998198936 pvl.syslog.parser: implement support for optional <PRI>
Tero Marttila <terom@fixme.fi>
parents: 67
diff changeset
    45
        'local6',   # 22
9da998198936 pvl.syslog.parser: implement support for optional <PRI>
Tero Marttila <terom@fixme.fi>
parents: 67
diff changeset
    46
        'local7',   # 23
9da998198936 pvl.syslog.parser: implement support for optional <PRI>
Tero Marttila <terom@fixme.fi>
parents: 67
diff changeset
    47
    )))
9da998198936 pvl.syslog.parser: implement support for optional <PRI>
Tero Marttila <terom@fixme.fi>
parents: 67
diff changeset
    48
   
31
3e6d0feb115c pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    49
    # default syslogd format
3e6d0feb115c pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    50
    SYSLOG_RE = re.compile(
3e6d0feb115c pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    51
        # the timestamp+hostname header
67
3324ed10c42f pvl.syslog.parser: missing hostname in 'last message repeated ... times' messages
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
    52
        # XXX:  hostname may be missing
3324ed10c42f pvl.syslog.parser: missing hostname in 'last message repeated ... times' messages
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
    53
        #       at least in Ubuntu 11.10 syslogd 'last message repeated 2 times'...
69
9da998198936 pvl.syslog.parser: implement support for optional <PRI>
Tero Marttila <terom@fixme.fi>
parents: 67
diff changeset
    54
            r'(?:<(?P<pri>\d+|(?P<facility>\w+)\.(?P<severity>\w+))>)?'
9da998198936 pvl.syslog.parser: implement support for optional <PRI>
Tero Marttila <terom@fixme.fi>
parents: 67
diff changeset
    55
        +   r'(?P<timestamp>\w{3} [0-9 ][0-9] \d{2}:\d{2}:\d{2}) (?P<hostname>\S+)? '
31
3e6d0feb115c pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    56
3e6d0feb115c pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    57
        # the message, including possible tag/pid
3e6d0feb115c pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    58
        +   r"(?P<message>(?P<tag>(?P<program>[^:\]]+)(?:\[(?P<pid>\d+)\])?: )?(?P<text>.*))\n?"
3e6d0feb115c pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    59
    )
3e6d0feb115c pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    60
3e6d0feb115c pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    61
    TIMESTAMP_FMT = '%b %d %H:%M:%S'
3e6d0feb115c pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    62
44
977442ccb72d pvl.syslog: split out SyslogFilter
Tero Marttila <terom@fixme.fi>
parents: 43
diff changeset
    63
    def __init__ (self, raw=False) :
31
3e6d0feb115c pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    64
        """
3e6d0feb115c pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    65
            Using given underlying line source.
3e6d0feb115c pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    66
        """
3e6d0feb115c pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    67
3e6d0feb115c pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    68
        self.raw = raw
3e6d0feb115c pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    69
69
9da998198936 pvl.syslog.parser: implement support for optional <PRI>
Tero Marttila <terom@fixme.fi>
parents: 67
diff changeset
    70
    def parse_pri (self, match) :
9da998198936 pvl.syslog.parser: implement support for optional <PRI>
Tero Marttila <terom@fixme.fi>
parents: 67
diff changeset
    71
        """
9da998198936 pvl.syslog.parser: implement support for optional <PRI>
Tero Marttila <terom@fixme.fi>
parents: 67
diff changeset
    72
            Parse pri/facility/severity.
9da998198936 pvl.syslog.parser: implement support for optional <PRI>
Tero Marttila <terom@fixme.fi>
parents: 67
diff changeset
    73
        """
9da998198936 pvl.syslog.parser: implement support for optional <PRI>
Tero Marttila <terom@fixme.fi>
parents: 67
diff changeset
    74
9da998198936 pvl.syslog.parser: implement support for optional <PRI>
Tero Marttila <terom@fixme.fi>
parents: 67
diff changeset
    75
        pri = match.group('pri')
9da998198936 pvl.syslog.parser: implement support for optional <PRI>
Tero Marttila <terom@fixme.fi>
parents: 67
diff changeset
    76
        facility = match.group('facility')
9da998198936 pvl.syslog.parser: implement support for optional <PRI>
Tero Marttila <terom@fixme.fi>
parents: 67
diff changeset
    77
        severity = match.group('severity')
9da998198936 pvl.syslog.parser: implement support for optional <PRI>
Tero Marttila <terom@fixme.fi>
parents: 67
diff changeset
    78
        
9da998198936 pvl.syslog.parser: implement support for optional <PRI>
Tero Marttila <terom@fixme.fi>
parents: 67
diff changeset
    79
        if pri.isdigit() :
9da998198936 pvl.syslog.parser: implement support for optional <PRI>
Tero Marttila <terom@fixme.fi>
parents: 67
diff changeset
    80
            pri = int(pri)
9da998198936 pvl.syslog.parser: implement support for optional <PRI>
Tero Marttila <terom@fixme.fi>
parents: 67
diff changeset
    81
            facility, severity = divmod(pri, 8)
9da998198936 pvl.syslog.parser: implement support for optional <PRI>
Tero Marttila <terom@fixme.fi>
parents: 67
diff changeset
    82
9da998198936 pvl.syslog.parser: implement support for optional <PRI>
Tero Marttila <terom@fixme.fi>
parents: 67
diff changeset
    83
        return dict(
9da998198936 pvl.syslog.parser: implement support for optional <PRI>
Tero Marttila <terom@fixme.fi>
parents: 67
diff changeset
    84
            pri         = pri,
9da998198936 pvl.syslog.parser: implement support for optional <PRI>
Tero Marttila <terom@fixme.fi>
parents: 67
diff changeset
    85
            severity    = self.SEVERITIES.get(severity, severity),
9da998198936 pvl.syslog.parser: implement support for optional <PRI>
Tero Marttila <terom@fixme.fi>
parents: 67
diff changeset
    86
            facility    = self.FACILITIES.get(facility, facility)
9da998198936 pvl.syslog.parser: implement support for optional <PRI>
Tero Marttila <terom@fixme.fi>
parents: 67
diff changeset
    87
        )
9da998198936 pvl.syslog.parser: implement support for optional <PRI>
Tero Marttila <terom@fixme.fi>
parents: 67
diff changeset
    88
31
3e6d0feb115c pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    89
    def parse_timestamp (self, match) :
3e6d0feb115c pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    90
        """
3e6d0feb115c pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    91
            Parse timstamp from line into datetime.
3e6d0feb115c pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    92
        """
3e6d0feb115c pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    93
3e6d0feb115c pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    94
        timestamp = match.group('timestamp')
3e6d0feb115c pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    95
        
3e6d0feb115c pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    96
        # add missing year; assume current
3e6d0feb115c pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    97
        timestamp = time.strftime('%Y') + ' ' + timestamp
3e6d0feb115c pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    98
        
3e6d0feb115c pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    99
        # k
3e6d0feb115c pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   100
        timestamp = datetime.datetime.strptime(timestamp, '%Y ' + self.TIMESTAMP_FMT)
3e6d0feb115c pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   101
3e6d0feb115c pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   102
        return timestamp
3e6d0feb115c pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   103
3e6d0feb115c pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   104
    def parse_prog (self, match) :
3e6d0feb115c pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   105
        """
3e6d0feb115c pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   106
            Parse prog from line.
3e6d0feb115c pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   107
        """
3e6d0feb115c pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   108
3e6d0feb115c pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   109
        prog = match.group('program')
3e6d0feb115c pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   110
44
977442ccb72d pvl.syslog: split out SyslogFilter
Tero Marttila <terom@fixme.fi>
parents: 43
diff changeset
   111
        if prog :
977442ccb72d pvl.syslog: split out SyslogFilter
Tero Marttila <terom@fixme.fi>
parents: 43
diff changeset
   112
            return prog
977442ccb72d pvl.syslog: split out SyslogFilter
Tero Marttila <terom@fixme.fi>
parents: 43
diff changeset
   113
        else :
31
3e6d0feb115c pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   114
            # no tag
3e6d0feb115c pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   115
            return None
3e6d0feb115c pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   116
3e6d0feb115c pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   117
    def parse (self, line) :
3e6d0feb115c pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   118
        """
3e6d0feb115c pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   119
            Parse given input line into SyslogMessage.
3e6d0feb115c pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   120
        """
3e6d0feb115c pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   121
3e6d0feb115c pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   122
        # ignore whitespace
3e6d0feb115c pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   123
        line = line.strip()
3e6d0feb115c pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   124
3e6d0feb115c pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   125
        # debug
3e6d0feb115c pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   126
        log.debug("%s", line)
3e6d0feb115c pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   127
3e6d0feb115c pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   128
        # timestamp?
3e6d0feb115c pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   129
        if self.raw :
3e6d0feb115c pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   130
            # from defaults
3e6d0feb115c pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   131
            return dict(
3e6d0feb115c pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   132
                timestamp   = datetime.datetime.now(), # XXX: None?
3e6d0feb115c pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   133
                host        = None,
44
977442ccb72d pvl.syslog: split out SyslogFilter
Tero Marttila <terom@fixme.fi>
parents: 43
diff changeset
   134
                prog        = None,
31
3e6d0feb115c pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   135
                pid         = None,
3e6d0feb115c pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   136
                msg         = line,
3e6d0feb115c pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   137
            )
3e6d0feb115c pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   138
3e6d0feb115c pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   139
        else :
3e6d0feb115c pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   140
            # parse
3e6d0feb115c pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   141
            match = self.SYSLOG_RE.match(line)
3e6d0feb115c pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   142
3e6d0feb115c pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   143
            if not match :
3e6d0feb115c pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   144
                log.warn("Unparseable syslog message: %r", line)
3e6d0feb115c pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   145
                return
3e6d0feb115c pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   146
3e6d0feb115c pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   147
            # parse
69
9da998198936 pvl.syslog.parser: implement support for optional <PRI>
Tero Marttila <terom@fixme.fi>
parents: 67
diff changeset
   148
            item = dict(
31
3e6d0feb115c pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   149
                timestamp   = self.parse_timestamp(match),
3e6d0feb115c pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   150
                host        = match.group('hostname'),
3e6d0feb115c pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   151
                prog        = self.parse_prog(match),
3e6d0feb115c pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   152
                pid         = match.group('pid'),
3e6d0feb115c pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   153
                msg         = match.group('text'),
3e6d0feb115c pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   154
            )
69
9da998198936 pvl.syslog.parser: implement support for optional <PRI>
Tero Marttila <terom@fixme.fi>
parents: 67
diff changeset
   155
            
9da998198936 pvl.syslog.parser: implement support for optional <PRI>
Tero Marttila <terom@fixme.fi>
parents: 67
diff changeset
   156
            # facility/severity prefix?
9da998198936 pvl.syslog.parser: implement support for optional <PRI>
Tero Marttila <terom@fixme.fi>
parents: 67
diff changeset
   157
            if match.group('pri') :
9da998198936 pvl.syslog.parser: implement support for optional <PRI>
Tero Marttila <terom@fixme.fi>
parents: 67
diff changeset
   158
                item.update(self.parse_pri(match))
9da998198936 pvl.syslog.parser: implement support for optional <PRI>
Tero Marttila <terom@fixme.fi>
parents: 67
diff changeset
   159
9da998198936 pvl.syslog.parser: implement support for optional <PRI>
Tero Marttila <terom@fixme.fi>
parents: 67
diff changeset
   160
            return item
31
3e6d0feb115c pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   161
    
3e6d0feb115c pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   162
    def process (self, lines) :
3e6d0feb115c pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   163
        """
3e6d0feb115c pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   164
            Yield SyslogMessages from given series of lines.
3e6d0feb115c pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   165
        """
3e6d0feb115c pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   166
3e6d0feb115c pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   167
        for line in lines :
3e6d0feb115c pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   168
            item = self.parse(line)
44
977442ccb72d pvl.syslog: split out SyslogFilter
Tero Marttila <terom@fixme.fi>
parents: 43
diff changeset
   169
977442ccb72d pvl.syslog: split out SyslogFilter
Tero Marttila <terom@fixme.fi>
parents: 43
diff changeset
   170
            if item :
31
3e6d0feb115c pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   171
                yield item
3e6d0feb115c pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   172
43
9d13b101beab pvl.syslog: implement pvl.syslog.args.apply -> SyslogSource as in pvl.verkko-dhcp
Tero Marttila <terom@fixme.fi>
parents: 31
diff changeset
   173
    __call__ = process
31
3e6d0feb115c pvl.syslog: import from pvl-collectd
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   174