#!/usr/bin/env python3 """ MY Network Server Startup Script Скрипт для запуска MY Network с минимальными HTTP эндпоинтами """ import asyncio import logging import signal import sys from pathlib import Path from typing import Optional # Добавить корневую директорию в путь sys.path.append(str(Path(__file__).parent)) import uvicorn from fastapi import FastAPI, HTTPException from fastapi.middleware.cors import CORSMiddleware from fastapi.staticfiles import StaticFiles from fastapi.responses import HTMLResponse # Настройка логирования logging.basicConfig( level=logging.INFO, format='%(asctime)s - %(name)s - %(levelname)s - %(message)s', handlers=[ logging.StreamHandler(sys.stdout) ] ) logger = logging.getLogger(__name__) # Глобальные переменные app: Optional[FastAPI] = None node_service = None def create_app() -> FastAPI: """Создать FastAPI приложение для MY Network.""" app = FastAPI( title="MY Network", description="Distributed Content Protocol v2.0", version="2.0.0", docs_url="/api/docs", redoc_url="/api/redoc" ) # Настройка CORS app.add_middleware( CORSMiddleware, allow_origins=["*"], allow_credentials=True, allow_methods=["*"], allow_headers=["*"], ) return app async def init_my_network_service(): """Инициализировать MY Network сервис.""" global node_service try: logger.info("Initializing MY Network service...") # Импортировать и инициализировать сервис ноды from app.core.my_network.node_service import MyNetworkNodeService # Создать сервис ноды node_service = MyNetworkNodeService() # Запустить сервис await node_service.start() logger.info("MY Network service initialized successfully") except Exception as e: logger.error(f"Failed to initialize MY Network service: {e}") raise def setup_routes(app: FastAPI): """Настроить маршруты приложения.""" # Всегда загружать продвинутый мониторинг advanced_monitoring_loaded = False try: logger.info("Attempting to import advanced monitoring routes...") from app.api.routes.monitor_routes import router as advanced_monitoring_router app.include_router(advanced_monitoring_router) logger.info("✅ Advanced monitoring dashboard configured successfully") advanced_monitoring_loaded = True except ImportError as e: logger.error(f"❌ Failed to import advanced monitoring routes: {e}") except Exception as e: logger.error(f"❌ Error loading advanced monitoring: {e}") # Пытаться загрузить основные MY Network маршруты my_network_loaded = False try: logger.info("Attempting to import MY Network routes...") from app.api.routes.my_network_routes import router as my_network_router app.include_router(my_network_router) logger.info("✅ MY Network routes configured successfully") my_network_loaded = True except ImportError as e: logger.error(f"❌ Failed to import MY Network routes: {e}") except Exception as e: logger.error(f"❌ Error loading MY Network routes: {e}") # Создать минимальные маршруты только если ничего не загружено if not advanced_monitoring_loaded and not my_network_loaded: logger.info("Setting up minimal routes as fallback...") setup_minimal_routes(app) elif not my_network_loaded: logger.warning("MY Network routes not loaded, using advanced monitoring only") # Добавить только базовые эндпоинты, не перекрывающие продвинутый мониторинг setup_basic_routes(app) def setup_minimal_routes(app: FastAPI): """Настроить минимальные маршруты.""" @app.get("/") async def root(): return {"message": "MY Network v2.0 - Distributed Content Protocol"} @app.get("/health") async def health_check(): return { "status": "healthy" if node_service else "initializing", "service": "MY Network", "version": "2.0.0" } @app.get("/api/my/node/info") async def node_info(): if not node_service: raise HTTPException(status_code=503, detail="MY Network service not available") try: info = await node_service.get_node_info() return {"success": True, "data": info} except Exception as e: logger.error(f"Error getting node info: {e}") raise HTTPException(status_code=500, detail=str(e)) @app.get("/api/my/monitor/", response_class=HTMLResponse) async def monitoring_dashboard(): """Простой HTML мониторинг если шаблоны не работают.""" html_content = """
MY Network service is running