domovoy_bot/services/web_server.py
Admin fc7484889c feat: Веб-интерфейс - логин/пароль в .env + API команд
 WEB_ADMIN_LOGIN/PASSWORD в .env.example
 Конфиг web_admin в config.py
 API /api/command - выполнение команд
 API /api/commands - список команд
 Обновлён web_server.py с конфигом

📦 Бекап: backups/versions/v2.1.2_web_auth_2026-02-28/

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-02-28 20:28:31 +00:00

62 lines
2.1 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

"""
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}"