--- /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))