#!/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, connect=None))
parser.add_option('--irker-target', metavar='IRC',
help="Irker target URL")
# 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..")
irker = pvl.irker.apply(options)
log.info("Process syslog messages...")
for item in syslog.main() :
match, rulepath, apply = rules.apply(item)
log.info("%s: %s", item, apply)
target = apply.get('irk', options.irker_target)
tag = '/'.join(str(rule) for rule in reversed(rulepath[:-1]))
text = apply.get('text')
if irker and target :
irker[target]('[' + tag + '] ' + text)
else :
print target, tag, text
# done
log.info("Exiting...")
return 0
if __name__ == '__main__':
import sys
sys.exit(main(sys.argv))