#!/usr/bin/python import nilmdb.server import argparse import os import socket def main(): """Main entry point for the 'nilmdb-server' command line script""" parser = argparse.ArgumentParser( description = 'Run the NilmDB server', formatter_class = argparse.ArgumentDefaultsHelpFormatter) parser.add_argument("-V", "--version", action="version", version = nilmdb.__version__) group = parser.add_argument_group("Standard options") group.add_argument('-a', '--address', help = 'Only listen on the given address', default = '0.0.0.0') group.add_argument('-p', '--port', help = 'Listen on the given port', type = int, default = 12380) group.add_argument('-d', '--database', help = 'Database directory', default = os.path.join(os.getcwd(), "db")) group.add_argument('-q', '--quiet', help = 'Silence output', action = 'store_true') group = parser.add_argument_group("Debug options") group.add_argument('-y', '--yappi', help = 'Run under yappi profiler and ' 'invoke interactive shell afterwards', action = 'store_true') args = parser.parse_args() # Create database object db = nilmdb.server.NilmDB(args.database) # Configure the server if args.quiet: embedded = True else: embedded = False server = nilmdb.server.Server(db, host = args.address, port = args.port, embedded = embedded) # Print info if not args.quiet: print "Database: %s" % (os.path.realpath(args.database)) if args.address == '0.0.0.0' or args.address == '::': host = socket.getfqdn() else: host = args.address print "Server URL: http://%s:%d/" % ( host, args.port) print "----" # Run it if args.yappi: print "Running in yappi" try: import yappi yappi.start() server.start(blocking = True) finally: yappi.stop() yappi.print_stats(sort_type = yappi.SORTTYPE_TTOT, limit = 50) from IPython import embed embed(header = "Use the yappi object to explore further, " "quit to exit") else: server.start(blocking = True) # Clean up if not args.quiet: print "Closing database" db.close() if __name__ == "__main__": main()