""" Web Server Service - сервис для запуска веб-сервера """ import logging import threading from typing import Optional logger = logging.getLogger(__name__) class WebServerService: """Сервис для управления веб-сервером""" def __init__(self, host: str = None, port: int = None): # Импортируем конфиг при инициализации import config self.host = host or config.WEB_ADMIN_HOST self.port = port or config.WEB_ADMIN_PORT self.server = None self.thread: Optional[threading.Thread] = None self.is_running = False def start(self): """Запустить веб-сервер в отдельном потоке""" if self.is_running: logger.warning("Веб-сервер уже запущен") return try: import uvicorn from web.app import app import config def run_server(): uvicorn.run(app, host=self.host, port=self.port, log_level="info") self.thread = threading.Thread(target=run_server, daemon=True) self.thread.start() self.is_running = True logger.info(f"✅ Веб-сервер запущен на http://{self.host}:{self.port}") logger.info(f" Логин: {config.WEB_ADMIN_LOGIN}") logger.info(f" Пароль: {config.WEB_ADMIN_PASSWORD}") except Exception as e: logger.error(f"Ошибка запуска веб-сервера: {e}") self.is_running = False def stop(self): """Остановить веб-сервер""" if not self.is_running: return try: self.is_running = False logger.info("🛑 Веб-сервер остановлен") except Exception as e: logger.error(f"Ошибка остановки веб-сервера: {e}") def get_url(self) -> str: """Получить URL веб-интерфейса""" return f"http://{self.host}:{self.port}"