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.
 
 
 

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