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