""" Вспомогательные утилиты. Автор: Сергей Антропов Сайт: https://devops.org.ru """ import re import logging from typing import List logger = logging.getLogger(__name__) # Список стоп-слов (алерты, которые не должны отправляться) STOP_WORDS = [ r"^InfoInhibitor", r"^Watchdog", r"^[E,e]tcdHighCommitDurations", r"^[E,e]tcdHighNumberOfFailedGRPCRequests", r"^[K,k]ubePersistentVolumeFillingUp", r"^[K,k]ubePersistentVolumeInodesFillingUp", ] def check_stop_words(name: str) -> bool: """ Проверить, содержит ли название алерта стоп-слова. Args: name: Название алерта. Returns: True если алерт должен быть заблокирован, False в противном случае. """ logger.debug(f"Проверка стоп-слов для алерта: '{name}'") for pattern in STOP_WORDS: if re.search(pattern, name): logger.warning(f"Алерт '{name}' заблокирован стоп-словом: {pattern}") return True return False def add_spaces_to_alert_name(name: str) -> str: """ Добавить пробелы в название алерта для лучшей читаемости. Пример: "HighCPUUsage" -> "High CPU Usage" Args: name: Название алерта без пробелов. Returns: Название алерта с пробелами. """ if not name: return name result = name[0] for letter in name[1:]: if letter.isupper(): result += f' {letter}' else: result += letter # Исправляем известные сокращения result = result.replace('C P U', 'CPU') result = result.replace('etcd', 'ETCD') result = result.replace('A P I', 'API') result = result.replace('K 8 S', 'K8S') result = result.replace('P V C', 'PVC') result = result.replace('G R P C', 'GRPC') return result def truncate_message(message: str, max_length: int = 4090) -> str: """ Обрезать сообщение до максимальной длины для Telegram. Telegram имеет лимит в 4096 символов на сообщение. Args: message: Исходное сообщение. max_length: Максимальная длина сообщения. Returns: Обрезанное сообщение с индикацией обрезки. """ if len(message) <= max_length: return message truncated = message[:max_length - 10] truncated += "\n\n... (сообщение обрезано)" logger.warning(f"Сообщение обрезано с {len(message)} до {max_length} символов") return truncated