console.py 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. # -*- coding: utf-8 -*-
  2. from datetime import datetime
  3. from typing import Optional
  4. from rich import get_console
  5. from rich.panel import Panel
  6. from rich.text import Text
  7. from rich.console import Group
  8. from app.config.setting import settings
  9. console = get_console()
  10. def create_service_panel(
  11. host: str, port: int, reload: bool, *,
  12. redis_ready: Optional[bool] = None,
  13. scheduler_jobs: Optional[int] = None,
  14. scheduler_status: Optional[str] = None,
  15. ) -> Panel:
  16. """创建简洁的服务启动信息面板"""
  17. url = f'http://{host}:{port}'
  18. base_url = f'{url}{settings.ROOT_PATH}'
  19. docs_url = base_url + settings.DOCS_URL
  20. redoc_url = base_url + settings.REDOC_URL
  21. # 核心服务信息
  22. service_info = Text()
  23. service_info.append(f"服务名称 {settings.TITLE} • 优雅 • 简洁 • 高效", style="bold magenta")
  24. service_info.append(f"\n当前版本 v{settings.VERSION}" , style="bold green")
  25. service_info.append(f"\n服务地址 {url}", style="bold blue")
  26. service_info.append(f"\n运行环境 {settings.ENVIRONMENT.value if hasattr(settings.ENVIRONMENT, 'value') else settings.ENVIRONMENT}", style="bold red")
  27. service_info.append(f"\n重载配置: {'✅ 开启' if reload else '❌ 关闭'}", style="bold italic")
  28. service_info.append(f"\n调试模式: {'✅ 开启' if settings.DEBUG else '❌ 关闭'}", style="bold italic")
  29. service_info.append(f"\n数据库类型: {settings.DATABASE_TYPE} 数据库", style="bold italic")
  30. service_info.append(f"\nRedis: {'✅ 已连接' if redis_ready else '❌ 未连接'}", style="bold italic")
  31. service_info.append(f"\n定时任务 {'✅ 运行中' if scheduler_status == 'running' else '⏸️ 暂停'} {scheduler_jobs}", style="bold italic")
  32. docs_info = Text()
  33. docs_info.append("📖 文档", style="bold magenta")
  34. docs_info.append(f"\n🔗 Swagger: {docs_url}", style="blue link")
  35. docs_info.append(f"\n🔗 ReDoc: {redoc_url}", style="blue link")
  36. final_content = Group(
  37. service_info,
  38. "\n" + "─" * 40,
  39. docs_info,
  40. )
  41. return Panel(
  42. renderable=final_content,
  43. title="[bold purple]🚀 服务启动完成[/]",
  44. border_style="green",
  45. padding=(1, 2)
  46. )
  47. def run(host: str, port: int, reload: bool, *,
  48. redis_ready: Optional[bool] = None,
  49. scheduler_jobs: Optional[int] = None,
  50. scheduler_status: Optional[str] = None
  51. ) -> None:
  52. """显示启动信息面板"""
  53. # 创建并显示启动面板
  54. service_panel = create_service_panel(
  55. host=host,
  56. port=port,
  57. reload=reload,
  58. redis_ready=redis_ready,
  59. scheduler_jobs=scheduler_jobs,
  60. scheduler_status=scheduler_status,
  61. )
  62. console.print(service_panel)
  63. def display_shutdown_info():
  64. """显示关闭信息"""
  65. shutdown_content = Text()
  66. shutdown_content.append("🛑 ", style="bold red")
  67. shutdown_content.append("FastapiAdmin 服务关闭")
  68. shutdown_content.append(f"\n⏰ {datetime.now().strftime('%H:%M:%S')}")
  69. shutdown_content.append("\n👋 感谢使用!", style="dim")
  70. shutdown_panel = Panel(
  71. shutdown_content,
  72. title="[bold red]服务关闭[/]",
  73. border_style="red",
  74. padding=(1, 2)
  75. )
  76. console.print(shutdown_panel)