mirror of
https://github.com/BEDOLAGA-DEV/remnawave-bedolaga-telegram-bot.git
synced 2026-02-22 12:21:26 +00:00
- Add pyproject.toml with uv and ruff configuration - Pin Python version to 3.13 via .python-version - Add Makefile commands: lint, format, fix - Apply ruff formatting to entire codebase - Remove unused imports (base64 in yookassa/simple_subscription) - Update .gitignore for new config files
101 lines
3.7 KiB
Python
101 lines
3.7 KiB
Python
"""Pydantic-схемы для работы с логами административного API."""
|
||
|
||
from __future__ import annotations
|
||
|
||
from datetime import datetime
|
||
from typing import Any
|
||
|
||
from pydantic import BaseModel, Field
|
||
|
||
|
||
class MonitoringLogEntry(BaseModel):
|
||
"""Запись лога мониторинга."""
|
||
|
||
id: int
|
||
event_type: str = Field(..., description='Тип события мониторинга')
|
||
message: str = Field(..., description='Краткое описание события')
|
||
data: dict[str, Any] | None = Field(
|
||
default=None,
|
||
description='Дополнительные данные события',
|
||
)
|
||
is_success: bool = Field(..., description='Флаг успешности выполнения операции')
|
||
created_at: datetime = Field(..., description='Дата и время создания записи')
|
||
|
||
|
||
class MonitoringLogListResponse(BaseModel):
|
||
"""Ответ со списком логов мониторинга."""
|
||
|
||
total: int = Field(..., ge=0)
|
||
limit: int = Field(..., ge=1)
|
||
offset: int = Field(..., ge=0)
|
||
items: list[MonitoringLogEntry]
|
||
|
||
|
||
class MonitoringLogTypeListResponse(BaseModel):
|
||
"""Ответ со списком доступных типов событий мониторинга."""
|
||
|
||
items: list[str] = Field(default_factory=list)
|
||
|
||
|
||
class SupportAuditLogEntry(BaseModel):
|
||
"""Запись аудита модераторов поддержки."""
|
||
|
||
id: int
|
||
actor_user_id: int | None
|
||
actor_telegram_id: int | None = None
|
||
is_moderator: bool
|
||
action: str
|
||
ticket_id: int | None
|
||
target_user_id: int | None
|
||
details: dict[str, Any] | None = None
|
||
created_at: datetime
|
||
|
||
|
||
class SupportAuditLogListResponse(BaseModel):
|
||
"""Ответ со списком аудита поддержки."""
|
||
|
||
total: int = Field(..., ge=0)
|
||
limit: int = Field(..., ge=1)
|
||
offset: int = Field(..., ge=0)
|
||
items: list[SupportAuditLogEntry]
|
||
|
||
|
||
class SupportAuditActionsResponse(BaseModel):
|
||
"""Ответ со списком доступных действий аудита поддержки."""
|
||
|
||
items: list[str] = Field(default_factory=list)
|
||
|
||
|
||
class SystemLogPreviewResponse(BaseModel):
|
||
"""Ответ с превью системного лог-файла бота."""
|
||
|
||
path: str = Field(..., description='Абсолютный путь до лог-файла')
|
||
exists: bool = Field(..., description='Флаг наличия лог-файла')
|
||
updated_at: datetime | None = Field(
|
||
default=None,
|
||
description='Дата и время последнего изменения лог-файла',
|
||
)
|
||
size_bytes: int = Field(..., ge=0, description='Размер лог-файла в байтах')
|
||
size_chars: int = Field(..., ge=0, description='Количество символов в лог-файле')
|
||
preview: str = Field(
|
||
default='',
|
||
description='Фрагмент содержимого лог-файла, возвращаемый для предпросмотра',
|
||
)
|
||
preview_chars: int = Field(..., ge=0, description='Размер предпросмотра в символах')
|
||
preview_truncated: bool = Field(..., description='Флаг усечения предпросмотра относительно полного файла')
|
||
download_url: str | None = Field(
|
||
default=None,
|
||
description='Относительный путь до endpoint для скачивания лог-файла',
|
||
)
|
||
|
||
|
||
class SystemLogFullResponse(BaseModel):
|
||
"""Полное содержимое системного лог-файла."""
|
||
|
||
path: str
|
||
exists: bool
|
||
updated_at: datetime | None = None
|
||
size_bytes: int
|
||
size_chars: int
|
||
content: str
|