""" Модели данных для Zabbix webhooks. Автор: Сергей Антропов Сайт: https://devops.org.ru """ from typing import Optional from pydantic import BaseModel, Field class ZabbixAlert(BaseModel): """Модель данных вебхука из Zabbix.""" link: str = Field(..., description="Ссылка на событие в Zabbix", examples=["{$ZABBIX_URL}/tr_events.php?triggerid=42667&eventid=8819711"]) status: str = Field(..., description="Статус события (OK, PROBLEM)", examples=["OK"]) action_id: str = Field(..., alias="action-id", description="ID действия", examples=["7"]) alert_subject: str = Field(..., alias="alert-subject", description="Тема алерта", examples=["Resolved in 1m 0s: High CPU utilization (over 90% for 5m)"]) alert_message: str = Field(..., alias="alert-message", description="Сообщение алерта", examples=["Problem has been resolved at 16:49:44 on 2024.02.08"]) event_id: str = Field(..., alias="event-id", description="ID события", examples=["8819711"]) event_name: str = Field(..., alias="event-name", description="Название события", examples=["High CPU utilization (over 90% for 5m)"]) event_nseverity: str = Field(..., alias="event-nseverity", description="Числовой уровень серьезности", examples=["2"]) event_opdata: Optional[str] = Field(None, alias="event-opdata", description="Операционные данные события", examples=["Current utilization: 70.9 %"]) event_recovery_date: Optional[str] = Field(None, alias="event-recovery-date", description="Дата восстановления", examples=["2024.02.08"]) event_recovery_time: Optional[str] = Field(None, alias="event-recovery-time", description="Время восстановления", examples=["16:49:44"]) event_duration: Optional[str] = Field(None, alias="event-duration", description="Длительность события", examples=["1m 0s"]) event_recovery_name: Optional[str] = Field(None, alias="event-recovery-name", description="Название восстановленного события", examples=["High CPU utilization (over 90% for 5m)"]) event_recovery_status: Optional[str] = Field(None, alias="event-recovery-status", description="Статус восстановления", examples=["RESOLVED"]) event_recovery_tags: Optional[str] = Field(None, alias="event-recovery-tags", description="Теги восстановленного события", examples=["Application:CPU"]) event_severity: Optional[str] = Field(None, alias="event-severity", description="Уровень серьезности (Disaster, High, Warning, Average, Information)", examples=["Warning"]) host_name: str = Field(..., alias="host-name", description="Имя хоста", examples=["pnode28"]) host_ip: str = Field(..., alias="host-ip", description="IP адрес хоста", examples=["10.14.253.38"]) host_port: str = Field(..., alias="host-port", description="Порт хоста", examples=["10050"]) model_config = { "populate_by_name": True, "json_schema_extra": { "examples": [ { "link": "https://zabbix.example.com/tr_events.php?triggerid=42667&eventid=8819711", "status": "PROBLEM", "action-id": "7", "alert-subject": "Problem: High CPU utilization (over 90% for 5m)", "alert-message": "Problem started at 16:48:44 on 2024.02.08\r\nProblem name: High CPU utilization (over 90% for 5m)\r\nHost: pnode28\r\nSeverity: Warning\r\nCurrent utilization: 95.2 %\r\n", "event-id": "8819711", "event-name": "High CPU utilization (over 90% for 5m)", "event-nseverity": "2", "event-opdata": "Current utilization: 95.2 %", "event-recovery-date": None, "event-recovery-time": None, "event-duration": None, "event-recovery-name": None, "event-recovery-status": None, "event-recovery-tags": None, "event-severity": "Warning", "host-name": "pnode28", "host-ip": "10.14.253.38", "host-port": "10050" }, { "link": "https://zabbix.example.com/tr_events.php?triggerid=42667&eventid=8819711", "status": "OK", "action-id": "7", "alert-subject": "Resolved in 1m 0s: High CPU utilization (over 90% for 5m)", "alert-message": "Problem has been resolved at 16:49:44 on 2024.02.08\r\nProblem name: High CPU utilization (over 90% for 5m)\r\nProblem duration: 1m 0s\r\nHost: pnode28\r\nSeverity: Warning\r\nOriginal problem ID: 8819711\r\n", "event-id": "8819711", "event-name": "High CPU utilization (over 90% for 5m)", "event-nseverity": "2", "event-opdata": "Current utilization: 70.9 %", "event-recovery-date": "2024.02.08", "event-recovery-time": "16:49:44", "event-duration": "1m 0s", "event-recovery-name": "High CPU utilization (over 90% for 5m)", "event-recovery-status": "RESOLVED", "event-recovery-tags": "Application:CPU", "event-severity": "Warning", "host-name": "pnode28", "host-ip": "10.14.253.38", "host-port": "10050" } ] } }