Stage 02 - system status screen
This commit is contained in:
91
app/src/core/system_status.py
Normal file
91
app/src/core/system_status.py
Normal file
@@ -0,0 +1,91 @@
|
||||
from __future__ import annotations
|
||||
|
||||
import platform
|
||||
from dataclasses import dataclass
|
||||
|
||||
from src.core.constants import APP_NAME, APP_VERSION
|
||||
from src.core.config import load_settings
|
||||
|
||||
|
||||
@dataclass(slots=True)
|
||||
class ComponentStatus:
|
||||
name: str
|
||||
state: str
|
||||
details: str
|
||||
|
||||
|
||||
@dataclass(slots=True)
|
||||
class SystemSnapshot:
|
||||
app_name: str
|
||||
app_version: str
|
||||
app_env: str
|
||||
python_version: str
|
||||
os_name: str
|
||||
timezone_name: str
|
||||
components: list[ComponentStatus]
|
||||
|
||||
|
||||
def get_system_snapshot() -> SystemSnapshot:
|
||||
settings = load_settings()
|
||||
|
||||
components = [
|
||||
ComponentStatus(
|
||||
name="Бот",
|
||||
state="🟢 работает",
|
||||
details="Процесс бота запущен и обрабатывает команды.",
|
||||
),
|
||||
ComponentStatus(
|
||||
name="Telegram",
|
||||
state="🟢 OK",
|
||||
details="Polling активен, базовая маршрутизация подключена.",
|
||||
),
|
||||
ComponentStatus(
|
||||
name="Биржа",
|
||||
state="🟡 не подключена",
|
||||
details="Интеграция с биржей будет добавлена на следующем этапе.",
|
||||
),
|
||||
ComponentStatus(
|
||||
name="База данных",
|
||||
state="🟡 не подключена",
|
||||
details="Слой хранения пока только подготовлен структурно.",
|
||||
),
|
||||
]
|
||||
|
||||
return SystemSnapshot(
|
||||
app_name=APP_NAME,
|
||||
app_version=APP_VERSION,
|
||||
app_env=settings.app_env,
|
||||
python_version=platform.python_version(),
|
||||
os_name=f"{platform.system()} {platform.release()}",
|
||||
timezone_name=settings.tz,
|
||||
components=components,
|
||||
)
|
||||
|
||||
|
||||
def build_system_text() -> str:
|
||||
snapshot = get_system_snapshot()
|
||||
|
||||
component_lines = []
|
||||
for component in snapshot.components:
|
||||
component_lines.append(
|
||||
f"{component.state} <b>{component.name}</b>\n"
|
||||
f"— {component.details}"
|
||||
)
|
||||
|
||||
components_block = "\n\n".join(component_lines)
|
||||
|
||||
return (
|
||||
"<b>⚙️ Система</b>\n\n"
|
||||
"<b>Статус компонентов</b>\n"
|
||||
f"{components_block}\n\n"
|
||||
"<b>Окружение</b>\n"
|
||||
f"- приложение: {snapshot.app_name} {snapshot.app_version}\n"
|
||||
f"- env: {snapshot.app_env}\n"
|
||||
f"- python: {snapshot.python_version}\n"
|
||||
f"- os: {snapshot.os_name}\n"
|
||||
f"- timezone: {snapshot.timezone_name}\n\n"
|
||||
"<b>Справка</b>\n"
|
||||
"/start — стартовый экран\n"
|
||||
"/menu — показать меню\n"
|
||||
"/help — открыть системную справку"
|
||||
)
|
||||
Reference in New Issue
Block a user