#!/usr/bin/env python
"""
Syslog -> Irk
"""
__version__ = '0.0'
import pvl.args
import pvl.syslog.args
import pvl.syslog.rule
import pvl.irker
import logging, optparse
log = logging.getLogger('main')
def parse_options (argv) :
"""
Parse command-line arguments.
"""
prog = argv[0]
parser = optparse.OptionParser(
prog = prog,
usage = '%prog: [options]',
version = __version__,
# module docstring
description = __doc__,
)
# options
parser.add_option_group(pvl.args.parser(parser))
# input
parser.add_option_group(pvl.syslog.args.parser(parser))
parser.add_option_group(pvl.syslog.rule.parser(parser))
parser.add_option_group(pvl.irker.parser(parser))
# parse
options, args = parser.parse_args(argv[1:])
# apply
pvl.args.apply(options, prog)
return options, args
def main (argv) :
options, args = parse_options(argv)
if args :
# XXX: targets
target, = args
else :
target = None
log.info("Open syslog...")
syslog = pvl.syslog.args.apply(options)
log.info("Load rules...")
rules = pvl.syslog.rule.apply(options)
log.info("Connect IRK..")
irk, target = pvl.irker.apply(options, target=target)
log.info("Process syslog messages...")
for item in syslog :
if rules :
match = rules.apply(item)
else :
match = None, item['msg']
if not match :
continue
tag, line = match
log.info("%s", line)
# TODO: map tag -> target?
if target :
target(line)
else :
print tag, line
# done
log.info("Exiting...")
return 0
if __name__ == '__main__':
import sys
sys.exit(main(sys.argv))