Files
MessageGateway/app/models/jira.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

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"]
}]
}
}