Initial commit: Message Gateway project
- FastAPI приложение для отправки мониторинговых алертов в мессенджеры - Поддержка Telegram и MAX/VK - Интеграция с Grafana, Zabbix, AlertManager - Автоматическое создание тикетов в Jira - Управление группами мессенджеров через API - Декораторы для авторизации и скрытия эндпоинтов - Подробная документация в папке docs/ Автор: Сергей Антропов Сайт: https://devops.org.ru
This commit is contained in:
114
app/api/v1/endpoints/debug.py
Normal file
114
app/api/v1/endpoints/debug.py
Normal file
@@ -0,0 +1,114 @@
|
||||
"""
|
||||
Эндпоинты для отладки.
|
||||
|
||||
Автор: Сергей Антропов
|
||||
Сайт: 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)}")
|
||||
Reference in New Issue
Block a user