Initial commit: Message Gateway project

- FastAPI приложение для отправки мониторинговых алертов в мессенджеры
- Поддержка Telegram и MAX/VK
- Интеграция с Grafana, Zabbix, AlertManager
- Автоматическое создание тикетов в Jira
- Управление группами мессенджеров через API
- Декораторы для авторизации и скрытия эндпоинтов
- Подробная документация в папке docs/

Автор: Сергей Антропов
Сайт: https://devops.org.ru
This commit is contained in:
2025-11-12 20:25:11 +03:00
commit b90def35ed
72 changed files with 10609 additions and 0 deletions

195
docs/groups.md Normal file
View File

@@ -0,0 +1,195 @@
# Конфигурация групп
## Формат конфигурации
Конфигурация групп хранится в файле `config/groups.json`.
**Пример конфигурации:**
```json
{
"monitoring": {
"messenger": "telegram",
"chat_id": -1001234567890,
"thread_id": 0,
"config": {}
},
"alerts_max": {
"messenger": "max",
"chat_id": "123456789",
"thread_id": null,
"config": {
"access_token": "optional_override_max_token",
"api_version": "5.131"
}
}
}
```
**Поля конфигурации:**
- `messenger` - тип мессенджера (`telegram`, `max`)
- `chat_id` - ID чата (может быть числом для Telegram или строкой для MAX/VK)
- `thread_id` - ID треда в группе (только для Telegram, `0` для основной группы, `null` для MAX/VK)
- `config` - дополнительная конфигурация для мессенджера (например, `access_token` для MAX/VK)
## Управление группами через API
Управление группами доступно через REST API с защитой API ключом.
### Получение списка поддерживаемых мессенджеров
```bash
GET /api/v1/groups/messengers
```
**Пример ответа:**
```json
{
"status": "ok",
"messengers": [
{
"type": "telegram",
"name": "Telegram",
"supports_threads": true,
"enabled": true
},
{
"type": "max",
"name": "MAX/VK",
"supports_threads": false,
"enabled": false
}
]
}
```
### Получение списка групп
```bash
# Без API ключа (только названия)
GET /api/v1/groups
# С API ключом (полная информация)
GET /api/v1/groups
Headers: X-API-Key: your_api_key_here
```
**Пример ответа (без API ключа):**
```json
{
"status": "ok",
"groups": [
{"name": "monitoring", "chat_id": null},
{"name": "alerts", "chat_id": null}
],
"count": 2
}
```
**Пример ответа (с API ключом):**
```json
{
"status": "ok",
"groups": [
{
"name": "monitoring",
"messenger": "telegram",
"chat_id": -1001234567890,
"thread_id": 0
},
{
"name": "alerts_max",
"messenger": "max",
"chat_id": "123456789",
"thread_id": null
}
],
"count": 2
}
```
### Создание группы
```bash
POST /api/v1/groups
Headers:
Content-Type: application/json
X-API-Key: your_api_key_here
{
"group_name": "monitoring",
"messenger": "telegram",
"chat_id": -1001234567890,
"thread_id": 0
}
```
**Пример запроса для MAX/VK:**
```bash
POST /api/v1/groups
Headers:
Content-Type: application/json
X-API-Key: your_api_key_here
{
"group_name": "max_alerts",
"messenger": "max",
"chat_id": "123456789",
"thread_id": 0,
"config": {
"access_token": "your_max_access_token"
}
}
```
**Пример ответа:**
```json
{
"status": "ok",
"message": "Группа 'monitoring' создана с мессенджером 'telegram' и ID -1001234567890"
}
```
### Обновление группы
```bash
PUT /api/v1/groups/{group_name}
Headers:
Content-Type: application/json
X-API-Key: your_api_key_here
{
"messenger": "telegram",
"chat_id": -1001234567891,
"thread_id": 0
}
```
**Пример ответа:**
```json
{
"status": "ok",
"message": "Группа 'monitoring' обновлена"
}
```
### Удаление группы
```bash
DELETE /api/v1/groups/{group_name}
Headers: X-API-Key: your_api_key_here
```
**Пример ответа:**
```json
{
"status": "ok",
"message": "Группа 'monitoring' удалена"
}
```
**API ключ для управления группами:**
- Настраивается в переменной окружения `API_KEY`
- Без API ключа можно только просматривать названия групп
- С API ключом доступны все операции (создание, обновление, удаление)
- API ключ передается в заголовке: `X-API-Key: your_api_key_here`