| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293 |
- # -*- coding: utf-8 -*-
- from datetime import datetime
- from typing import Optional
- from rich import get_console
- from rich.panel import Panel
- from rich.text import Text
- from rich.console import Group
- from app.config.setting import settings
- console = get_console()
- def create_service_panel(
- host: str, port: int, reload: bool, *,
- redis_ready: Optional[bool] = None,
- scheduler_jobs: Optional[int] = None,
- scheduler_status: Optional[str] = None,
- ) -> Panel:
- """创建简洁的服务启动信息面板"""
-
- url = f'http://{host}:{port}'
- base_url = f'{url}{settings.ROOT_PATH}'
- docs_url = base_url + settings.DOCS_URL
- redoc_url = base_url + settings.REDOC_URL
- # 核心服务信息
- service_info = Text()
- service_info.append(f"服务名称 {settings.TITLE} • 优雅 • 简洁 • 高效", style="bold magenta")
- service_info.append(f"\n当前版本 v{settings.VERSION}" , style="bold green")
- service_info.append(f"\n服务地址 {url}", style="bold blue")
- service_info.append(f"\n运行环境 {settings.ENVIRONMENT.value if hasattr(settings.ENVIRONMENT, 'value') else settings.ENVIRONMENT}", style="bold red")
- service_info.append(f"\n重载配置: {'✅ 开启' if reload else '❌ 关闭'}", style="bold italic")
- service_info.append(f"\n调试模式: {'✅ 开启' if settings.DEBUG else '❌ 关闭'}", style="bold italic")
- service_info.append(f"\n数据库类型: {settings.DATABASE_TYPE} 数据库", style="bold italic")
- service_info.append(f"\nRedis: {'✅ 已连接' if redis_ready else '❌ 未连接'}", style="bold italic")
- service_info.append(f"\n定时任务 {'✅ 运行中' if scheduler_status == 'running' else '⏸️ 暂停'} {scheduler_jobs}", style="bold italic")
-
- docs_info = Text()
- docs_info.append("📖 文档", style="bold magenta")
- docs_info.append(f"\n🔗 Swagger: {docs_url}", style="blue link")
- docs_info.append(f"\n🔗 ReDoc: {redoc_url}", style="blue link")
- final_content = Group(
- service_info,
- "\n" + "─" * 40,
- docs_info,
- )
- return Panel(
- renderable=final_content,
- title="[bold purple]🚀 服务启动完成[/]",
- border_style="green",
- padding=(1, 2)
- )
- def run(host: str, port: int, reload: bool, *,
- redis_ready: Optional[bool] = None,
- scheduler_jobs: Optional[int] = None,
- scheduler_status: Optional[str] = None
- ) -> None:
- """显示启动信息面板"""
-
- # 创建并显示启动面板
- service_panel = create_service_panel(
- host=host,
- port=port,
- reload=reload,
- redis_ready=redis_ready,
- scheduler_jobs=scheduler_jobs,
- scheduler_status=scheduler_status,
- )
-
- console.print(service_panel)
- def display_shutdown_info():
- """显示关闭信息"""
- shutdown_content = Text()
- shutdown_content.append("🛑 ", style="bold red")
- shutdown_content.append("FastapiAdmin 服务关闭")
- shutdown_content.append(f"\n⏰ {datetime.now().strftime('%H:%M:%S')}")
- shutdown_content.append("\n👋 感谢使用!", style="dim")
-
- shutdown_panel = Panel(
- shutdown_content,
- title="[bold red]服务关闭[/]",
- border_style="red",
- padding=(1, 2)
- )
-
- console.print(shutdown_panel)
|