multithreading/log refactoring
This commit is contained in:
@@ -18,7 +18,7 @@ from api.depends import get_session, verify_admin_token, verify_admin_token_shor
|
||||
from database import async_session_maker
|
||||
from config import API_TOKEN, BOT_SERVICE
|
||||
from core.bootstrap import MANAGEMENT_CONFIG
|
||||
from core.executor import get_thread_pool
|
||||
from core.executor import run_io
|
||||
from core.settings.management_config import update_management_config
|
||||
from database.models import Key, User
|
||||
from database.models import Server
|
||||
@@ -65,14 +65,7 @@ async def _restart_bot() -> None:
|
||||
is_systemd = parent and "systemd" in parent.name().lower()
|
||||
|
||||
if is_systemd:
|
||||
loop = asyncio.get_running_loop()
|
||||
await loop.run_in_executor(
|
||||
get_thread_pool(),
|
||||
lambda: subprocess.run(
|
||||
["sudo", "systemctl", "restart", BOT_SERVICE],
|
||||
check=True,
|
||||
),
|
||||
)
|
||||
await run_io(lambda: subprocess.run(["sudo", "systemctl", "restart", BOT_SERVICE], check=True))
|
||||
else:
|
||||
python_exe = sys.executable
|
||||
script_path = os.path.abspath(sys.argv[0])
|
||||
|
||||
+10
-10
@@ -6,6 +6,7 @@ from fastapi import APIRouter, Depends, HTTPException
|
||||
from pydantic import BaseModel
|
||||
|
||||
from api.depends import verify_admin_token
|
||||
from core.executor import run_io
|
||||
from utils.modules_loader import _is_safe_module_name
|
||||
from utils.modules_manager import manager
|
||||
|
||||
@@ -80,24 +81,23 @@ def _read_local_module_version(name: str) -> str | None:
|
||||
return None
|
||||
|
||||
|
||||
@router.get("/")
|
||||
async def list_modules(admin=Depends(verify_admin_token)):
|
||||
refresh = getattr(manager, "refresh_state", None)
|
||||
def sync_list_modules() -> list:
|
||||
"""Вся синхронная работа со списком модулей (файлы, состояние). Вызывать через run_io()."""
|
||||
refresh = getattr(manager, "refresh_state", None) or getattr(manager, "_load_state", None)
|
||||
if callable(refresh):
|
||||
refresh()
|
||||
else:
|
||||
legacy_refresh = getattr(manager, "_load_state", None)
|
||||
if callable(legacy_refresh):
|
||||
legacy_refresh()
|
||||
module_names = _available_module_names()
|
||||
_prune_missing_state(set(module_names))
|
||||
modules = [_module_state(name) for name in module_names]
|
||||
|
||||
for item in modules:
|
||||
name = str(item.get("name") or "").strip()
|
||||
local_version = _read_local_module_version(name)
|
||||
item["local_version"] = local_version
|
||||
item["local_version"] = _read_local_module_version(name)
|
||||
return modules
|
||||
|
||||
|
||||
@router.get("/")
|
||||
async def list_modules(admin=Depends(verify_admin_token)):
|
||||
modules = await run_io(sync_list_modules)
|
||||
return {"items": modules}
|
||||
|
||||
|
||||
|
||||
@@ -18,7 +18,7 @@ from api.depends import get_session, verify_identity_admin, verify_identity_admi
|
||||
from database import async_session_maker
|
||||
from config import API_TOKEN, BOT_SERVICE
|
||||
from core.bootstrap import MANAGEMENT_CONFIG
|
||||
from core.executor import get_thread_pool
|
||||
from core.executor import run_io
|
||||
from core.settings.management_config import update_management_config
|
||||
from database.models import Key, Server, User
|
||||
from handlers.admin.sender.sender_service import BroadcastService
|
||||
@@ -64,14 +64,7 @@ async def _restart_bot() -> None:
|
||||
parent = psutil.Process(os.getpid()).parent()
|
||||
is_systemd = parent and "systemd" in parent.name().lower()
|
||||
if is_systemd:
|
||||
loop = asyncio.get_running_loop()
|
||||
await loop.run_in_executor(
|
||||
get_thread_pool(),
|
||||
lambda: subprocess.run(
|
||||
["sudo", "systemctl", "restart", BOT_SERVICE],
|
||||
check=True,
|
||||
),
|
||||
)
|
||||
await run_io(lambda: subprocess.run(["sudo", "systemctl", "restart", BOT_SERVICE], check=True))
|
||||
else:
|
||||
python_exe = sys.executable
|
||||
script_path = os.path.abspath(sys.argv[0])
|
||||
|
||||
+12
-10
@@ -6,6 +6,7 @@ from fastapi import APIRouter, Depends, HTTPException
|
||||
from pydantic import BaseModel
|
||||
|
||||
from api.depends import verify_identity_admin
|
||||
from core.executor import run_io
|
||||
from utils.modules_loader import _is_safe_module_name
|
||||
from utils.modules_manager import manager
|
||||
|
||||
@@ -77,23 +78,24 @@ def _read_local_module_version(name: str) -> str | None:
|
||||
return None
|
||||
|
||||
|
||||
@router.get("/")
|
||||
async def list_modules(identity=Depends(verify_identity_admin)):
|
||||
"""Список модулей с состоянием и локальной версией."""
|
||||
refresh = getattr(manager, "refresh_state", None)
|
||||
def sync_list_modules() -> list:
|
||||
"""Вся синхронная работа со списком модулей (файлы, состояние). Вызывать через run_io()."""
|
||||
refresh = getattr(manager, "refresh_state", None) or getattr(manager, "_load_state", None)
|
||||
if callable(refresh):
|
||||
refresh()
|
||||
else:
|
||||
legacy_refresh = getattr(manager, "_load_state", None)
|
||||
if callable(legacy_refresh):
|
||||
legacy_refresh()
|
||||
module_names = _available_module_names()
|
||||
_prune_missing_state(set(module_names))
|
||||
modules = [_module_state(name) for name in module_names]
|
||||
for item in modules:
|
||||
name = str(item.get("name") or "").strip()
|
||||
local_version = _read_local_module_version(name)
|
||||
item["local_version"] = local_version
|
||||
item["local_version"] = _read_local_module_version(name)
|
||||
return modules
|
||||
|
||||
|
||||
@router.get("/")
|
||||
async def list_modules(identity=Depends(verify_identity_admin)):
|
||||
"""Список модулей с состоянием и локальной версией."""
|
||||
modules = await run_io(sync_list_modules)
|
||||
return {"items": modules}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user