console.py 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  1. from datetime import datetime
  2. from rich import get_console
  3. from rich.console import Group
  4. from rich.panel import Panel
  5. from rich.text import Text
  6. from app.config.setting import settings
  7. console = get_console()
  8. def console_run(
  9. host: str,
  10. port: int,
  11. reload: bool,
  12. *,
  13. database_ready: bool | None = None,
  14. redis_ready: bool | None = None,
  15. scheduler_ready: bool | None = None,
  16. limiter_ready: bool | None = None,
  17. ) -> None:
  18. """
  19. 在终端输出 Rich 面板:服务信息、组件就绪状态与文档链接。
  20. 参数:
  21. - host (str): 监听主机。
  22. - port (int): 监听端口。
  23. - reload (bool): 是否开启热重载。
  24. - database_ready (bool | None): 数据库是否就绪。
  25. - redis_ready (bool | None): Redis 是否就绪。
  26. - scheduler_ready (bool | None): 调度器是否就绪。
  27. - limiter_ready (bool | None): 限流器是否就绪。
  28. 返回:
  29. - None
  30. """
  31. url = f"http://{host}:{port}"
  32. base_url = f"{url}{settings.ROOT_PATH}"
  33. docs_url = base_url + settings.DOCS_URL
  34. redoc_url = base_url + settings.REDOC_URL
  35. ljdoc_url = base_url + settings.LJDOC_URL
  36. # 核心服务信息
  37. service_info = Text()
  38. service_info.append(f"服务名称 {settings.TITLE} • 优雅 • 简洁 • 高效", style="bold magenta")
  39. service_info.append(f"\n当前版本 v{settings.VERSION}", style="bold green")
  40. service_info.append(f"\n服务地址 {url}", style="bold blue")
  41. service_info.append(
  42. f"\n运行环境 {settings.ENVIRONMENT.value if hasattr(settings.ENVIRONMENT, 'value') else settings.ENVIRONMENT}",
  43. style="bold red",
  44. )
  45. service_info.append(
  46. f"\n重载配置: {'✅ 启动' if reload else '❌ 关闭'}",
  47. style="bold italic",
  48. )
  49. service_info.append(
  50. f"\n调试模式: {'✅ 启动' if settings.DEBUG else '❌ 关闭'}",
  51. style="bold italic",
  52. )
  53. service_info.append(
  54. f"\n{settings.DATABASE_TYPE}: {'✅ 启动' if database_ready else '❌ 关闭'}",
  55. style="bold italic",
  56. )
  57. service_info.append(
  58. f"\nRedis: {'✅ 启动' if redis_ready else '❌ 关闭'}",
  59. style="bold italic",
  60. )
  61. service_info.append(
  62. f"\n调度器: {'✅ 启动' if scheduler_ready else '❌ 关闭'}",
  63. style="bold italic",
  64. )
  65. service_info.append(
  66. f"\n限流器: {'✅ 启动' if limiter_ready else '❌ 关闭'}",
  67. style="bold italic",
  68. )
  69. docs_info = Text()
  70. docs_info.append("📖 文档", style="bold magenta")
  71. docs_info.append(f"\n🔗 Swagger: {docs_url}", style="blue link")
  72. docs_info.append(f"\n🔗 ReDoc: {redoc_url}", style="blue link")
  73. docs_info.append(f"\n🔗 LangJin: {ljdoc_url}", style="blue link")
  74. final_content = Group(
  75. service_info,
  76. "\n" + "─" * 40,
  77. docs_info,
  78. )
  79. result = Panel(
  80. renderable=final_content,
  81. title="[bold purple]🚀 服务启动完成[/]",
  82. border_style="green",
  83. padding=(1, 2),
  84. )
  85. console.print(result)
  86. def console_close() -> None:
  87. """
  88. 在终端输出服务关闭提示面板。
  89. 返回:
  90. - None
  91. """
  92. shutdown_content = Text()
  93. shutdown_content.append("🛑 ", style="bold red")
  94. shutdown_content.append("FastapiAdmin 服务关闭")
  95. shutdown_content.append(f"\n⏰ {datetime.now().strftime('%H:%M:%S')}")
  96. shutdown_content.append("\n👋 感谢使用!", style="dim")
  97. result = Panel(
  98. shutdown_content,
  99. title="[bold red]服务关闭[/]",
  100. border_style="red",
  101. padding=(1, 2),
  102. )
  103. console.print(result)