feat: (tg message composer) improve composing message now have more usefull information

Add event duration time
Add event start date and time
Add event resolved date and time
Add event chart link

Signed-off-by: UdoChudo <stream@udochudo.ru>
This commit is contained in:
Udo Chudo 2025-06-27 20:37:06 +05:00
parent 3d5a237d4d
commit ab33329e31
2 changed files with 36 additions and 5 deletions

View File

@ -1,8 +1,12 @@
# composer.py
import time
from datetime import datetime
from typing import Optional, Tuple
from zoneinfo import ZoneInfo
from app.bot.utils.tg_escape_chars import escape_telegram_chars # или твоя функция, если кастомная
from config import ZABBIX_TZ
def compose_telegram_message(data: dict) -> Tuple[str, Optional[str]]:
"""
@ -19,6 +23,12 @@ def compose_telegram_message(data: dict) -> Tuple[str, Optional[str]]:
'High': '⚠️',
'Disaster': '⛔️'
}
convert_time_format = {
"h": "ч",
"m": "м",
"s": "с"
}
priority = priority_map.get(data.get('severity', ''), '')
msg = escape_telegram_chars(data.get('msg', ''))
host = escape_telegram_chars(data.get('host', ''))
@ -26,7 +36,8 @@ def compose_telegram_message(data: dict) -> Tuple[str, Optional[str]]:
severity = escape_telegram_chars(data.get('severity', ''))
status = data.get('status', '').upper()
timestamp = int(data.get('date_reception', 0))
time_str = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(timestamp))
dt = datetime.fromtimestamp(timestamp, tz=ZoneInfo(ZABBIX_TZ))
time_str = dt.strftime('%d.%m.%Y %H:%M:%S')
if status == "PROBLEM":
message = (
@ -36,12 +47,32 @@ def compose_telegram_message(data: dict) -> Tuple[str, Optional[str]]:
f"<b>Время возникновения</b>: {time_str} Мск\n"
)
else:
event_duration = data.get('event_duration', '')
duration = ' '.join(
f"{part[:-1]}{convert_time_format.get(part[-1], part[-1])}"
for part in event_duration.split()
)
# Переформатируем event_date из '2025.06.27 16:46:04' в '27.06.2025 16:46:04'
event_date_str = data.get('event_date', '')
if event_date_str:
try:
dt_start = datetime.strptime(event_date_str, "%Y.%m.%d %H:%M:%S")
# не меняем timezone, просто меняем формат
time_start = dt_start.strftime('%d.%m.%Y %H:%M:%S')
except Exception:
time_start = event_date_str # fallback — оставляем как есть
else:
time_start = ''
message = (
f"{host} ({ip})\n"
f"<b>Описание</b>: {msg}\n"
f"<b>Критичность</b>: {severity}\n"
f"<b>Проблема устранена!</b>\n"
f"<b>Время начала</b>: {time_start} Мск\n"
f"<b>Время устранения</b>: {time_str} Мск\n"
f"<b>Длительность проблемы</b>: {duration}\n"
)
link = data.get("link")

View File

@ -12,6 +12,6 @@ def create_link_button(link: Optional[str]) -> Optional[InlineKeyboardMarkup]:
return None
markup = InlineKeyboardMarkup()
button = InlineKeyboardButton(text="График", url=link)
button = InlineKeyboardButton(text="Открыть график", url=link)
markup.add(button)
return markup