- FastAPI приложение для отправки мониторинговых алертов в мессенджеры - Поддержка Telegram и MAX/VK - Интеграция с Grafana, Zabbix, AlertManager - Автоматическое создание тикетов в Jira - Управление группами мессенджеров через API - Декораторы для авторизации и скрытия эндпоинтов - Подробная документация в папке docs/ Автор: Сергей Антропов Сайт: https://devops.org.ru
74 lines
3.2 KiB
Python
74 lines
3.2 KiB
Python
"""
|
|
Модели данных для Jira тикетов.
|
|
|
|
Автор: Сергей Антропов
|
|
Сайт: https://devops.org.ru
|
|
"""
|
|
from typing import Optional, Dict, Any, List
|
|
from pydantic import BaseModel, Field
|
|
|
|
|
|
class JiraMappingCondition(BaseModel):
|
|
"""Условия для маппинга алерта в Jira тикет."""
|
|
severity: Optional[str] = None
|
|
namespace: Optional[str] = None
|
|
state: Optional[str] = None
|
|
status: Optional[str] = None
|
|
tags: Optional[Dict[str, str]] = None
|
|
event_severity: Optional[str] = Field(None, alias="event-severity")
|
|
|
|
|
|
class JiraMapping(BaseModel):
|
|
"""Маппинг алерта в Jira тикет."""
|
|
conditions: JiraMappingCondition
|
|
project: str = Field(..., description="Ключ проекта Jira")
|
|
assignee: Optional[str] = Field(None, description="Email исполнителя")
|
|
issue_type: str = Field("Bug", description="Тип задачи")
|
|
priority: str = Field("High", description="Приоритет задачи")
|
|
labels: Optional[List[str]] = Field(None, description="Метки задачи")
|
|
|
|
model_config = {"populate_by_name": True}
|
|
|
|
|
|
class JiraSourceMapping(BaseModel):
|
|
"""Маппинг для источника алертов."""
|
|
default_project: str = Field(..., description="Проект по умолчанию")
|
|
default_assignee: Optional[str] = Field(None, description="Исполнитель по умолчанию")
|
|
default_issue_type: str = Field("Bug", description="Тип задачи по умолчанию")
|
|
default_priority: str = Field("High", description="Приоритет по умолчанию")
|
|
mappings: List[JiraMapping] = Field(default_factory=list, description="Список маппингов")
|
|
|
|
|
|
class JiraMappingConfig(BaseModel):
|
|
"""Конфигурация маппинга алертов в Jira тикеты."""
|
|
alertmanager: Optional[JiraSourceMapping] = None
|
|
grafana: Optional[JiraSourceMapping] = None
|
|
zabbix: Optional[JiraSourceMapping] = None
|
|
|
|
|
|
class JiraIssue(BaseModel):
|
|
"""Модель Jira тикета."""
|
|
project: str = Field(..., description="Ключ проекта")
|
|
summary: str = Field(..., description="Заголовок тикета")
|
|
description: str = Field(..., description="Описание тикета")
|
|
issue_type: str = Field("Bug", description="Тип задачи")
|
|
assignee: Optional[str] = Field(None, description="Email исполнителя")
|
|
priority: Optional[str] = Field(None, description="Приоритет задачи")
|
|
labels: Optional[List[str]] = Field(None, description="Метки задачи")
|
|
components: Optional[List[str]] = Field(None, description="Компоненты проекта")
|
|
|
|
model_config = {
|
|
"json_schema_extra": {
|
|
"examples": [{
|
|
"project": "MON",
|
|
"summary": "[Critical] High CPU Usage - Production",
|
|
"description": "**Alert:** High CPU Usage\n\n**Severity:** Critical\n\n**Namespace:** production",
|
|
"issue_type": "Bug",
|
|
"assignee": "devops-team@example.com",
|
|
"priority": "Highest",
|
|
"labels": ["critical", "production", "alertmanager"]
|
|
}]
|
|
}
|
|
}
|
|
|