mirror of
https://github.com/BEDOLAGA-DEV/remnawave-bedolaga-telegram-bot.git
synced 2026-02-02 18:20:24 +00:00
102 lines
3.8 KiB
Python
102 lines
3.8 KiB
Python
"""Pydantic-схемы для работы с логами административного API."""
|
||
from __future__ import annotations
|
||
|
||
from datetime import datetime
|
||
from typing import Any, Dict, List, Optional
|
||
|
||
from pydantic import BaseModel, Field
|
||
|
||
|
||
class MonitoringLogEntry(BaseModel):
|
||
"""Запись лога мониторинга."""
|
||
|
||
id: int
|
||
event_type: str = Field(..., description="Тип события мониторинга")
|
||
message: str = Field(..., description="Краткое описание события")
|
||
data: Optional[Dict[str, Any]] = 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: Optional[int]
|
||
actor_telegram_id: int
|
||
is_moderator: bool
|
||
action: str
|
||
ticket_id: Optional[int]
|
||
target_user_id: Optional[int]
|
||
details: Optional[Dict[str, Any]] = 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: Optional[datetime] = 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: Optional[str] = Field(
|
||
default=None,
|
||
description="Относительный путь до endpoint для скачивания лог-файла",
|
||
)
|
||
|
||
|
||
class SystemLogFullResponse(BaseModel):
|
||
"""Полное содержимое системного лог-файла."""
|
||
|
||
path: str
|
||
exists: bool
|
||
updated_at: Optional[datetime] = None
|
||
size_bytes: int
|
||
size_chars: int
|
||
content: str
|