bitbake-prserv 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. #!/usr/bin/env python3
  2. #
  3. # Copyright BitBake Contributors
  4. #
  5. # SPDX-License-Identifier: GPL-2.0-only
  6. #
  7. import os
  8. import sys,logging
  9. import argparse
  10. import warnings
  11. warnings.simplefilter("default")
  12. sys.path.insert(0, os.path.join(os.path.dirname(os.path.dirname(__file__)), "lib"))
  13. import prserv
  14. import prserv.serv
  15. VERSION = "2.0.0"
  16. PRHOST_DEFAULT="0.0.0.0"
  17. PRPORT_DEFAULT=8585
  18. def init_logger(logfile, loglevel):
  19. numeric_level = getattr(logging, loglevel.upper(), None)
  20. if not isinstance(numeric_level, int):
  21. raise ValueError("Invalid log level: %s" % loglevel)
  22. FORMAT = "%(asctime)-15s %(message)s"
  23. logging.basicConfig(level=numeric_level, filename=logfile, format=FORMAT)
  24. def main():
  25. parser = argparse.ArgumentParser(
  26. description="BitBake PR Server. Version=%s" % VERSION,
  27. formatter_class=argparse.RawTextHelpFormatter)
  28. parser.add_argument(
  29. "-f",
  30. "--file",
  31. default="prserv.sqlite3",
  32. help="database filename (default: prserv.sqlite3)",
  33. )
  34. parser.add_argument(
  35. "-l",
  36. "--log",
  37. default="prserv.log",
  38. help="log filename(default: prserv.log)",
  39. )
  40. parser.add_argument(
  41. "--loglevel",
  42. default="INFO",
  43. help="logging level, i.e. CRITICAL, ERROR, WARNING, INFO, DEBUG",
  44. )
  45. parser.add_argument(
  46. "--start",
  47. action="store_true",
  48. help="start daemon",
  49. )
  50. parser.add_argument(
  51. "--stop",
  52. action="store_true",
  53. help="stop daemon",
  54. )
  55. parser.add_argument(
  56. "--host",
  57. help="ip address to bind",
  58. default=PRHOST_DEFAULT,
  59. )
  60. parser.add_argument(
  61. "--port",
  62. type=int,
  63. default=PRPORT_DEFAULT,
  64. help="port number (default: 8585)",
  65. )
  66. parser.add_argument(
  67. "-r",
  68. "--read-only",
  69. action="store_true",
  70. help="open database in read-only mode",
  71. )
  72. parser.add_argument(
  73. "-u",
  74. "--upstream",
  75. default=os.environ.get("PRSERV_UPSTREAM", None),
  76. help="Upstream PR service (host:port)",
  77. )
  78. args = parser.parse_args()
  79. init_logger(os.path.abspath(args.log), args.loglevel)
  80. if args.start:
  81. ret=prserv.serv.start_daemon(
  82. args.file,
  83. args.host,
  84. args.port,
  85. os.path.abspath(args.log),
  86. args.read_only,
  87. args.upstream
  88. )
  89. elif args.stop:
  90. ret=prserv.serv.stop_daemon(args.host, args.port)
  91. else:
  92. ret=parser.print_help()
  93. return ret
  94. if __name__ == "__main__":
  95. try:
  96. ret = main()
  97. except Exception:
  98. ret = 1
  99. import traceback
  100. traceback.print_exc()
  101. sys.exit(ret)