- FastAPI приложение для отправки мониторинговых алертов в мессенджеры - Поддержка Telegram и MAX/VK - Интеграция с Grafana, Zabbix, AlertManager - Автоматическое создание тикетов в Jira - Управление группами мессенджеров через API - Декораторы для авторизации и скрытия эндпоинтов - Подробная документация в папке docs/ Автор: Сергей Антропов Сайт: https://devops.org.ru
107 lines
4.7 KiB
Python
107 lines
4.7 KiB
Python
"""
|
||
Модели данных для управления группами мессенджеров.
|
||
|
||
Автор: Сергей Антропов
|
||
Сайт: https://devops.org.ru
|
||
"""
|
||
from typing import Optional, Dict, Any, Union
|
||
from pydantic import BaseModel, Field
|
||
|
||
|
||
class GroupInfo(BaseModel):
|
||
"""Информация о группе."""
|
||
name: str = Field(..., description="Имя группы", examples=["monitoring", "alerts", "devops"])
|
||
messenger: Optional[str] = Field(None, description="Тип мессенджера (telegram, max)", examples=["telegram", "max"])
|
||
chat_id: Optional[Union[int, str]] = Field(None, description="Chat ID группы (отображается только при наличии пароля)", examples=[-1001234567890, "123456789", None])
|
||
thread_id: Optional[int] = Field(None, description="ID треда в группе (опционально, только для Telegram)", examples=[0, 123, 456])
|
||
|
||
model_config = {
|
||
"json_schema_extra": {
|
||
"examples": [
|
||
{
|
||
"name": "monitoring",
|
||
"messenger": "telegram",
|
||
"chat_id": -1001234567890,
|
||
"thread_id": 0
|
||
},
|
||
{
|
||
"name": "alerts_max",
|
||
"messenger": "max",
|
||
"chat_id": "123456789",
|
||
"thread_id": None
|
||
},
|
||
{
|
||
"name": "devops",
|
||
"messenger": None,
|
||
"chat_id": None,
|
||
"thread_id": None
|
||
}
|
||
]
|
||
}
|
||
}
|
||
|
||
|
||
class CreateGroupRequest(BaseModel):
|
||
"""Запрос на создание группы."""
|
||
group_name: str = Field(..., description="Имя группы", examples=["monitoring", "alerts", "devops"])
|
||
chat_id: Union[int, str] = Field(..., description="ID чата (может быть int для Telegram или str для MAX/VK)", examples=[-1001234567890, "123456789"])
|
||
messenger: str = Field("telegram", description="Тип мессенджера (telegram, max)", examples=["telegram", "max"])
|
||
thread_id: int = Field(0, description="ID треда в группе (по умолчанию 0, только для Telegram)", examples=[0, 123, 456])
|
||
config: Optional[Dict[str, Any]] = Field(None, description="Дополнительная конфигурация для мессенджера (опционально)", examples=[None, {"access_token": "..."}, {"api_version": "5.131"}])
|
||
|
||
model_config = {
|
||
"json_schema_extra": {
|
||
"examples": [
|
||
{
|
||
"group_name": "monitoring",
|
||
"chat_id": -1001234567890,
|
||
"messenger": "telegram",
|
||
"thread_id": 0,
|
||
},
|
||
{
|
||
"group_name": "alerts_max",
|
||
"chat_id": "123456789",
|
||
"messenger": "max",
|
||
"thread_id": 0,
|
||
"config": {
|
||
"access_token": "your_access_token",
|
||
"api_version": "5.131"
|
||
}
|
||
}
|
||
]
|
||
}
|
||
}
|
||
|
||
|
||
class UpdateGroupRequest(BaseModel):
|
||
"""Запрос на обновление группы."""
|
||
chat_id: Optional[Union[int, str]] = Field(None, description="Новый Chat ID группы (можно получить через @userinfobot для Telegram)", examples=[-1001234567891, "123456789"])
|
||
messenger: Optional[str] = Field(None, description="Новый тип мессенджера (telegram, max)", examples=["telegram", "max"])
|
||
thread_id: Optional[int] = Field(None, description="Новый ID треда в группе (опционально, только для Telegram)", examples=[0, 123, 456])
|
||
config: Optional[Dict[str, Any]] = Field(None, description="Новая дополнительная конфигурация для мессенджера (опционально)", examples=[None, {"access_token": "..."}, {"api_version": "5.131"}])
|
||
|
||
model_config = {
|
||
"json_schema_extra": {
|
||
"examples": [
|
||
{
|
||
"chat_id": -1001234567891,
|
||
"messenger": "telegram",
|
||
"thread_id": 0,
|
||
},
|
||
{
|
||
"chat_id": "123456789",
|
||
"messenger": "max",
|
||
"config": {
|
||
"access_token": "your_access_token",
|
||
"api_version": "5.131"
|
||
}
|
||
}
|
||
]
|
||
}
|
||
}
|
||
|
||
|
||
class DeleteGroupRequest(BaseModel):
|
||
"""Запрос на удаление группы."""
|
||
pass
|