#!/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), logging.FileHandler('my_network.log') ] ) 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 NodeService # Создать сервис ноды node_service = NodeService() # Запустить сервис 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): """Настроить маршруты приложения.""" try: # Импортировать маршруты MY Network from app.api.routes.my_network_routes import router as my_network_router from app.api.routes.my_monitoring import router as monitoring_router # Добавить маршруты app.include_router(my_network_router) app.include_router(monitoring_router) logger.info("MY Network routes configured") except ImportError as e: logger.error(f"Failed to import MY Network routes: {e}") # Создать минимальные маршруты если основные не работают setup_minimal_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