All checks were successful
Build and Push Docker Images / build (push) Successful in 1m28s
- Рефакторинг Telegram бота на модульную структуру для удобства поддержки и расширения - Создан общий RabbitMQ клиент для Flask и Telegram компонентов - Подготовлена базовая архитектура для будущего масштабирования и новых функций Signed-off-by: UdoChudo <stream@udochudo.ru>
52 lines
2.0 KiB
Python
52 lines
2.0 KiB
Python
# composer.py
|
||
|
||
import time
|
||
from typing import Optional, Tuple
|
||
from app.bot.utils.tg_escape_chars import escape_telegram_chars # или твоя функция, если кастомная
|
||
|
||
def compose_telegram_message(data: dict) -> Tuple[str, Optional[str]]:
|
||
"""
|
||
Формирует сообщение для Telegram и возвращает его вместе со ссылкой (если есть).
|
||
|
||
Args:
|
||
data (dict): сообщение из очереди
|
||
|
||
Returns:
|
||
Tuple[str, Optional[str]]: текст сообщения и ссылка для кнопки (если есть)
|
||
"""
|
||
try:
|
||
priority_map = {
|
||
'High': '⚠️',
|
||
'Disaster': '⛔️'
|
||
}
|
||
priority = priority_map.get(data.get('severity', ''), '')
|
||
msg = escape_telegram_chars(data.get('msg', ''))
|
||
host = escape_telegram_chars(data.get('host', ''))
|
||
ip = escape_telegram_chars(data.get('ip', ''))
|
||
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))
|
||
|
||
if status == "PROBLEM":
|
||
message = (
|
||
f"{priority} {host} ({ip})\n"
|
||
f"<b>Описание</b>: {msg}\n"
|
||
f"<b>Критичность</b>: {severity}\n"
|
||
f"<b>Время возникновения</b>: {time_str} Мск\n"
|
||
)
|
||
else:
|
||
message = (
|
||
f"✅ {host} ({ip})\n"
|
||
f"<b>Описание</b>: {msg}\n"
|
||
f"<b>Критичность</b>: {severity}\n"
|
||
f"<b>Проблема устранена!</b>\n"
|
||
f"<b>Время устранения</b>: {time_str} Мск\n"
|
||
)
|
||
|
||
link = data.get("link")
|
||
return message, link
|
||
|
||
except KeyError as e:
|
||
raise ValueError(f"Missing key in data: {e}")
|