bin/pvl.verkko-syslog
changeset 48 40ccb8d3c96e
parent 47 eea08cf5fbc7
child 51 96d204b146b4
--- a/bin/pvl.verkko-syslog	Thu Jan 03 13:14:29 2013 +0200
+++ b/bin/pvl.verkko-syslog	Fri Jan 04 14:19:05 2013 +0200
@@ -1,13 +1,15 @@
 #!/usr/bin/env python
 
 """
-    Monitor DHCP use.
+    Syslog -> Irk
 """
 
 __version__ = '0.0'
 
 import pvl.args
 import pvl.syslog.args
+import pvl.syslog.rule
+import pvl.irker
 
 import logging, optparse
 
@@ -31,7 +33,14 @@
     
     # options
     parser.add_option_group(pvl.args.parser(parser))
+
+    # input
     parser.add_option_group(pvl.syslog.args.parser(parser))
+    parser.add_option_group(pvl.irker.parser(parser))
+    
+    # processing
+    parser.add_option('-r', '--rules', metavar='FILE',
+            help="Syslog rules")
 
     # parse
     options, args = parser.parse_args(argv[1:])
@@ -41,32 +50,33 @@
 
     return options, args
 
-# prototype
-import pvl.syslog.rule
-
-sudo = pvl.syslog.rule.SyslogRule('sudo',
-    program = 'sudo',
-    pattern = r'\s*(?P<login>\S+) : TTY=(?P<tty>\S+) ; PWD=(?P<pwd>.+?) ; USER=(?P<user>\S+) ; COMMAND=(?P<command>.*)',
-    format  = "{login}:{tty} - {user}@{host}:{pwd} - {command!r}",
-)
-
-sudo_env = pvl.syslog.rule.SyslogRule('sudo',
-    program = 'sudo',
-    pattern = r'\s*(?P<login>\S+) : TTY=(?P<tty>\S+) ; PWD=(?P<pwd>.+?) ; USER=(?P<user>\S+) ; ENV=(?P<env>.+?) ; COMMAND=(?P<command>.*)',
-    format  = "{login}:{tty} - {user}@{host}:{pwd} - {env} {command!r}",
-)
-
-rules = pvl.syslog.rule.SyslogRules((sudo_env, sudo))
-
 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.config(open(options.rules))
+
+    log.info("Connect IRK..")
+    irk, target = pvl.irker.apply(options, target=target)
+
+    if not target :
+        log.error("No irk target given")
+        return 2
   
-    log.info("Start processing syslog messages...")
-
+    log.info("Process syslog messages...")
     for tag, line in rules.process(syslog.loop()) :
-        print tag, line
+        # TODO: map tag -> target?
+        log.info("%s", line)
+        target(line)
     
     # done
     log.info("Exiting...")