pvl/syslog/args.py
changeset 31 3e6d0feb115c
child 43 9d13b101beab
equal deleted inserted replaced
30:841d856293a1 31:3e6d0feb115c
       
     1 import optparse, sys
       
     2 
       
     3 from pvl.syslog.parser import SyslogParser
       
     4 from pvl.syslog.syslog import SyslogSource
       
     5 from pvl.syslog import fifo, tail
       
     6 
       
     7 # XXX: use optparse parser.error()?
       
     8 import logging; log = logging.getLogger('pvl.syslog.args')
       
     9 
       
    10 def parser (parser, prog=None) :
       
    11     """
       
    12         Optparse option group
       
    13 
       
    14             prog        - filter to only process lines from given process
       
    15     """
       
    16     
       
    17     syslog = optparse.OptionGroup(parser, 'Syslog collector')
       
    18 
       
    19     syslog.add_option('--syslog-fifo',          metavar='PATH',
       
    20             help="Read syslog messages from given fifo")
       
    21 
       
    22     syslog.add_option('--syslog-file',          metavar='FILE',
       
    23             help="Read syslog messages from given file")
       
    24 
       
    25     syslog.add_option('--syslog-tail',          type='float', metavar='POLL',
       
    26             help="Continuously poll file")
       
    27 
       
    28     syslog.add_option('--syslog-raw',           action='store_true',
       
    29             help="Parse raw syslog lines without timestamp/etc")
       
    30 
       
    31     syslog.add_option('--syslog-prog',          metavar='PROG',     default=prog,
       
    32             help="Filter by given prog: %default")
       
    33 
       
    34     return syslog
       
    35 
       
    36 def apply (options, optional=False) :
       
    37     """
       
    38         Handle options, returning a SyslogSource, if any.
       
    39 
       
    40         May log.error/sys.exit
       
    41     """
       
    42 
       
    43     if options.syslog_fifo :
       
    44         # read fifo
       
    45         source = fifo.Fifo(options.syslog_fifo)
       
    46 
       
    47     elif options.syslog_file :
       
    48         # tail file
       
    49         source = tail.TailFile(options.syslog_file)
       
    50 
       
    51     elif optional :
       
    52         log.debug("No --syslog source given")
       
    53         return None
       
    54 
       
    55     else :
       
    56         log.error("No --syslog source given")
       
    57         sys.exit(2)
       
    58     
       
    59     parser = SyslogParser(
       
    60         raw     = options.syslog_raw,
       
    61         prog    = options.syslog_prog,
       
    62     )
       
    63 
       
    64     # build
       
    65     return SyslogSource(source, parser)
       
    66