import sys import os import time import webbrowser import threading import uvicorn import logging # Set up professional logging logging.basicConfig( level=logging.INFO, format="%(asctime)s | %(levelname)s | %(message)s", ) logger = logging.getLogger("super-ai-launcher") # ASCII Art Header BANNER = r""" ____ _ _ ____ _____ ____ _ ___ _ _ _ _ _ __ ______ ___ ____ / ___|| | | | _ \| ____| _ \ / \ |_ _| / \ | \ | | / \ | | \ \ / / ___|_ _/ ___| \___ \| | | | |_) | _| | |_) | / _ \ | | / _ \ | \| | / _ \ | | \ V /\___ \ | \___ \ ___) | |_| | __/| |___| _ < / ___ \ | | / ___ \| |\ |/ ___ \| |___| | ___) | | ___) | |____/ \___/|_| |_____|_| \_\/_/ \_\___| /_/ \_\_| \_/_/ \_\_____|_| |____/___|____/ ══════════════════════════════════════════════════════════════════════════════════════════════ TRADING INTELLIGENT TERMINAL - AI PHÂN TÍCH BIỂU ĐỒ NẾN SỐ 1 THẾ GIỚI ══════════════════════════════════════════════════════════════════════════════════════════════ """ def print_banner(): # Clear console for a clean startup os.system('cls' if os.name == 'nt' else 'clear') print("\033[96m" + BANNER + "\033[0m") print(" [*] Đang khởi động hệ thống phân tích AI...") print(" [*] Đang nạp cơ sở dữ liệu thị trường...") print(" [*] Hệ thống sẽ tự động mở trình duyệt sau khi hoàn tất.") print(" ══════════════════════════════════════════════════════════════════════════════════════════════\n") # Import the FastAPI app try: from main import app except ImportError: # If running from within the backend folder sys.path.append(os.path.dirname(__file__)) from main import app def open_browser(): """Wait for the server to start and then open the browser.""" # Give the server a few seconds to initialize time.sleep(2.5) url = "http://127.0.0.1:8000" logger.info(f"Kết nối thành công! Đang mở bảng điều khiển tại {url}...") webbrowser.open(url) if __name__ == "__main__": print_banner() # Start the browser opener in a separate thread threading.Thread(target=open_browser, daemon=True).start() # Run the uvicorn server logger.info("Khởi động Backend Core...") try: # Hide the detailed uvicorn logs for a cleaner professional feel, # or keep them for transparency. Let's use 'warning' level for uvicorn # but keep our own logs at 'info'. uvicorn.run(app, host="127.0.0.1", port=8000, log_level="warning") except Exception as e: logger.error(f"Lỗi khởi động hệ thống: {e}") print("\n [!] Có lỗi xảy ra trong quá trình khởi động.") print(" [!] Nhấn Enter để xem chi tiết lỗi và thoát...") input()