Files
MessageGateway/app/api/v1/endpoints/debug.py
Sergey Antropov b90def35ed Initial commit: Message Gateway project
- FastAPI приложение для отправки мониторинговых алертов в мессенджеры
- Поддержка Telegram и MAX/VK
- Интеграция с Grafana, Zabbix, AlertManager
- Автоматическое создание тикетов в Jira
- Управление группами мессенджеров через API
- Декораторы для авторизации и скрытия эндпоинтов
- Подробная документация в папке docs/

Автор: Сергей Антропов
Сайт: https://devops.org.ru
2025-11-12 20:25:11 +03:00

115 lines
3.8 KiB
Python

"""
Эндпоинты для отладки.
Автор: Сергей Антропов
Сайт: https://devops.org.ru
"""
import json
import logging
from typing import Dict, Any
from fastapi import APIRouter, HTTPException, Body
import aiofiles
from app.core.metrics import metrics
from app.core.auth import hide_from_api
# Импортируем settings в функции, чтобы избежать циклических зависимостей
logger = logging.getLogger(__name__)
router = APIRouter(prefix="/debug", tags=["debug"])
@hide_from_api
@router.post(
"/dump",
name="JSON Debug dump",
response_model=Dict[str, Any],
include_in_schema=False, # Скрываем эндпоинт из Swagger UI
responses={
200: {
"description": "Данные успешно сохранены",
"content": {
"application/json": {
"example": {
"status": "ok",
"message": "Данные сохранены в dump.json",
"data": {
"test": "data",
"timestamp": "2024-01-01T00:00:00Z",
"source": "grafana",
"alert": {
"title": "Test alert",
"state": "alerting"
}
}
}
}
}
},
500: {
"description": "Ошибка сохранения данных",
"content": {
"application/json": {
"example": {"detail": "Ошибка записи в файл"}
}
}
}
}
)
async def dump_request(
dump: Dict[str, Any] = Body(
...,
description="JSON данные для сохранения в файл dump.json",
examples=[
{
"test": "data",
"timestamp": "2024-01-01T00:00:00Z",
"source": "grafana",
"alert": {
"title": "Test alert",
"state": "alerting"
}
},
{
"source": "zabbix",
"event": {
"event-id": "8819711",
"event-name": "High CPU utilization",
"status": "PROBLEM"
}
},
{
"source": "alertmanager",
"status": "firing",
"commonLabels": {
"alertname": "HighCPUUsage",
"severity": "critical"
}
}
]
)
) -> Dict[str, Any]:
"""
Сохранить JSON данные в файл для отладки.
Используется для сохранения входящих webhook запросов для анализа.
Подробная документация: см. docs/api/debug.md
"""
metrics.increment_api_endpoint("debug_dump")
logger.info("Получен запрос на сохранение данных для отладки")
try:
dump_path = "/app/app/dump.json"
async with aiofiles.open(dump_path, 'w', encoding='utf-8') as f:
await f.write(json.dumps(dump, indent=4, ensure_ascii=False))
logger.info(f"Данные сохранены в {dump_path}")
return {
"status": "ok",
"message": "Данные сохранены в dump.json",
"data": dump
}
except Exception as e:
logger.error(f"Ошибка сохранения данных: {e}")
raise HTTPException(status_code=500, detail=f"Ошибка записи в файл: {str(e)}")