bin/pvl.verkko-syslog
changeset 88 c59e4fc3cdff
parent 87 70edcd13a447
child 89 37d7168156c6
equal deleted inserted replaced
87:70edcd13a447 88:c59e4fc3cdff
     1 #!/usr/bin/env python
       
     2 
       
     3 """
       
     4     Syslog -> Irk
       
     5 """
       
     6 
       
     7 __version__ = '0.0'
       
     8 
       
     9 import pvl.args
       
    10 import pvl.syslog.args
       
    11 import pvl.syslog.rule
       
    12 import pvl.irk
       
    13 
       
    14 import logging, optparse
       
    15 
       
    16 log = logging.getLogger('main')
       
    17 
       
    18 def parse_options (argv) :
       
    19     """
       
    20         Parse command-line arguments.
       
    21     """
       
    22 
       
    23     prog = argv[0]
       
    24 
       
    25     parser = optparse.OptionParser(
       
    26             prog        = prog,
       
    27             usage       = '%prog: [options]',
       
    28             version     = __version__,
       
    29 
       
    30             # module docstring
       
    31             description = __doc__,
       
    32     )
       
    33     
       
    34     # options
       
    35     parser.add_option_group(pvl.args.parser(parser))
       
    36 
       
    37     # input
       
    38     parser.add_option_group(pvl.syslog.args.parser(parser))
       
    39     parser.add_option_group(pvl.syslog.rule.parser(parser))
       
    40     parser.add_option_group(pvl.irk.parser(parser, connect=None))
       
    41 
       
    42     parser.add_option('--irker-target', metavar='IRC',
       
    43             help="Irker target URL")
       
    44 
       
    45     # parse
       
    46     options, args = parser.parse_args(argv[1:])
       
    47     
       
    48     # apply
       
    49     pvl.args.apply(options, prog)
       
    50 
       
    51     return options, args
       
    52 
       
    53 def main (argv) :
       
    54     options, args = parse_options(argv)
       
    55 
       
    56     if args :
       
    57         # XXX: targets
       
    58         target, = args
       
    59     else :
       
    60         target = None
       
    61     
       
    62     log.info("Open syslog...")
       
    63     syslog = pvl.syslog.args.apply(options)
       
    64     
       
    65     log.info("Load rules...")
       
    66     rules = pvl.syslog.rule.apply(options)
       
    67 
       
    68     log.info("Connect IRK..")
       
    69     irker = pvl.irk.apply(options)
       
    70 
       
    71     log.info("Process syslog messages...")
       
    72     for item in syslog.main() :
       
    73         match, rulepath, apply = rules.apply(item)
       
    74 
       
    75         log.info("%s: %s", item, apply)
       
    76         
       
    77         target = apply.get('irk', options.irker_target)
       
    78         
       
    79         tag = '/'.join(str(rule) for rule in reversed(rulepath[:-1]))
       
    80         text = apply.get('text')
       
    81 
       
    82         if not text :
       
    83             # XXX: plain irk = ... in rule is broken, as it always applies, and skips any further rules
       
    84             continue
       
    85         
       
    86         if irker and target :
       
    87             irker[target]('[' + tag + '] ' + text)
       
    88         else :
       
    89             print target, tag, text
       
    90     
       
    91     # done
       
    92     log.info("Exiting...")
       
    93     return 0
       
    94 
       
    95 if __name__ == '__main__':
       
    96     import sys
       
    97 
       
    98     sys.exit(main(sys.argv))