You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

79 lines
2.4 KiB

  1. #!/usr/bin/python
  2. import nilmdb.server
  3. import argparse
  4. import os
  5. import socket
  6. def main():
  7. """Main entry point for the 'nilmdb-server' command line script"""
  8. parser = argparse.ArgumentParser(
  9. description = 'Run the NilmDB server',
  10. formatter_class = argparse.ArgumentDefaultsHelpFormatter)
  11. group = parser.add_argument_group("Standard options")
  12. group.add_argument('-a', '--address',
  13. help = 'Only listen on the given address',
  14. default = '0.0.0.0')
  15. group.add_argument('-p', '--port', help = 'Listen on the given port',
  16. type = int, default = 12380)
  17. group.add_argument('-d', '--database', help = 'Database directory',
  18. default = os.path.join(os.getcwd(), "db"))
  19. group.add_argument('-q', '--quiet', help = 'Silence output',
  20. action = 'store_true')
  21. group = parser.add_argument_group("Debug options")
  22. group.add_argument('-y', '--yappi', help = 'Run under yappi profiler and '
  23. 'invoke interactive shell afterwards',
  24. action = 'store_true')
  25. args = parser.parse_args()
  26. # Create database object
  27. db = nilmdb.server.NilmDB(args.database)
  28. # Configure the server
  29. if args.quiet:
  30. embedded = True
  31. else:
  32. embedded = False
  33. server = nilmdb.server.Server(db,
  34. host = args.address,
  35. port = args.port,
  36. embedded = embedded)
  37. # Print info
  38. if not args.quiet:
  39. print "Database: %s" % (os.path.realpath(args.database))
  40. if args.address == '0.0.0.0' or args.address == '::':
  41. host = socket.getfqdn()
  42. else:
  43. host = args.address
  44. print "Server URL: http://%s:%d/" % ( host, args.port)
  45. print "----"
  46. # Run it
  47. if args.yappi:
  48. print "Running in yappi"
  49. try:
  50. import yappi
  51. yappi.start()
  52. server.start(blocking = True)
  53. finally:
  54. yappi.stop()
  55. yappi.print_stats(sort_type = yappi.SORTTYPE_TTOT, limit = 50)
  56. from IPython import embed
  57. embed(header = "Use the yappi object to explore further, "
  58. "quit to exit")
  59. else:
  60. server.start(blocking = True)
  61. # Clean up
  62. if not args.quiet:
  63. print "Closing database"
  64. db.close()
  65. if __name__ == "__main__":
  66. main()