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