bin/pvl.dhcp-leases
changeset 174 6f339a8a87dc
child 176 3acd365cfeb8
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bin/pvl.dhcp-leases	Sat Jan 26 11:49:16 2013 +0200
@@ -0,0 +1,114 @@
+#!/usr/bin/env python
+
+"""
+    Monitor dhcpd leases -> database.
+"""
+
+__version__ = '0.0'
+
+import pvl.args
+import pvl.syslog.args
+
+import pvl.verkko.db as db
+import pvl.dhcp.leases
+
+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))
+
+    ## leases
+    parser.add_option('--leases',               metavar='FILE', default='/var/lib/dhcp/dhcpd.leases',
+            help="Synchronize dhcpd leases from given file")
+
+    parser.add_option('--leases-tail',          type='float', metavar='POLL',
+            help="Continuously poll leases file with given timeout")
+
+    ## database
+    parser.add_option('--database',             metavar='URI',
+            help="Track hosts in given database")
+
+    parser.add_option('--create',               action='store_true',
+            help="Initialize database")
+
+    # defaults
+    parser.set_defaults(
+
+    )
+    
+    # parse
+    options, args = parser.parse_args(argv[1:])
+    
+    # apply
+    pvl.args.apply(options, prog)
+
+    if not options.database :
+        parser.error("Missing required option: --database")
+
+    return options, args
+
+def main (argv) :
+    options, args = parse_options(argv)
+
+    # db
+    if not options.database :
+        log.error("No database given")
+        return 1
+
+    log.info("Open up database: %s", options.database)
+    db = pvl.verkko.db.Database(options.database)
+    leases_db = pvl.dhcp.leases.DHCPLeasesDatabase(db)
+   
+    if options.create :
+        handler.create()
+
+    # leases
+    log.info("Open up DHCP leases...")
+    leases = pvl.dhcp.leases.DHCPLeases(options.leases)
+
+    # polling interval?
+    if options.leases_tail :
+        poll = options.leases_tail
+    else :
+        poll = None
+
+    # mainloop
+    log.info("Enter mainloop...")
+    while True :
+        log.debug("tick")
+
+        for lease in leases :
+            leases_db(lease)
+        
+        log.debug("tock")
+
+        if poll :
+            time.sleep(poll)
+        else :
+            break
+    
+    # done
+    return 0
+
+if __name__ == '__main__':
+    import sys
+
+    sys.exit(main(sys.argv))