From ab33329e3104ff33c911015771820e435de3de62 Mon Sep 17 00:00:00 2001 From: UdoChudo Date: Fri, 27 Jun 2025 20:37:06 +0500 Subject: [PATCH] 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 --- app/bot/services/mailing_service/composer.py | 39 +++++++++++++++++-- .../mailing_service/utils/link_button.py | 2 +- 2 files changed, 36 insertions(+), 5 deletions(-) diff --git a/app/bot/services/mailing_service/composer.py b/app/bot/services/mailing_service/composer.py index 2fe4b72..5108659 100644 --- a/app/bot/services/mailing_service/composer.py +++ b/app/bot/services/mailing_service/composer.py @@ -1,8 +1,12 @@ # composer.py -import time +from datetime import datetime from typing import Optional, Tuple -from app.bot.utils.tg_escape_chars import escape_telegram_chars # или твоя функция, если кастомная +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,16 +47,36 @@ def compose_telegram_message(data: dict) -> Tuple[str, Optional[str]]: f"Время возникновения: {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"Описание: {msg}\n" f"Критичность: {severity}\n" f"Проблема устранена!\n" + f"Время начала: {time_start} Мск\n" f"Время устранения: {time_str} Мск\n" + f"Длительность проблемы: {duration}\n" ) link = data.get("link") return message, link except KeyError as e: - raise ValueError(f"Missing key in data: {e}") + raise ValueError(f"Missing key in data: {e}") \ No newline at end of file diff --git a/app/bot/services/mailing_service/utils/link_button.py b/app/bot/services/mailing_service/utils/link_button.py index 0d81a97..3c11709 100644 --- a/app/bot/services/mailing_service/utils/link_button.py +++ b/app/bot/services/mailing_service/utils/link_button.py @@ -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