bin/pvl.verkko-syslog
author Tero Marttila <terom@fixme.fi>
Fri, 04 Jan 2013 21:35:08 +0200
changeset 64 f5f767bf4887
parent 60 9326ed989645
child 66 1e3a144f25c0
permissions -rwxr-xr-x
pvl.verkko-dhcp: updated pvl.syslog, untested
#!/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.main() :
        item = rules.apply(item)

        if not item :
            continue

        log.info("%s", item)

        rule = item.get('rule')

        if rule :
            out = item.get(str(rule))
        else :
            out = None

        if not out :
            continue

        # TODO: map tag -> target?
        if target :
            target(out)
        else :
            print rule, out
    
    # done
    log.info("Exiting...")
    return 0

if __name__ == '__main__':
    import sys

    sys.exit(main(sys.argv))