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