Compare commits

...

2 Commits

Author SHA1 Message Date
Влад Зверев
d0e91f5259 Merge remote-tracking branch 'git.udochudo.ru/master'
# Conflicts:
#	telezab.py
2025-02-13 17:27:21 +05:00
Влад Зверев
3c407b2a07 Refactoring get_zabbix_triggers now using problem.get instead of trigger.get 2025-02-13 17:24:38 +05:00

View File

@ -1266,7 +1266,7 @@ def get_zabbix_triggers(group_id):
# Получение активных проблем для этих хостов # Получение активных проблем для этих хостов
problems = zapi.problem.get( problems = zapi.problem.get(
output=["eventid", "name", "severity", "clock"], output=["eventid", "name", "severity", "clock", "objectid"],
hostids=host_ids, hostids=host_ids,
suppressed=0, suppressed=0,
acknowledged=0, acknowledged=0,
@ -1278,6 +1278,20 @@ def get_zabbix_triggers(group_id):
telebot.logger.info(f"No active problems found for group {group_id}") telebot.logger.info(f"No active problems found for group {group_id}")
return [] return []
# Получение триггеров и их связи с хостами
trigger_ids = [problem["objectid"] for problem in problems]
triggers = zapi.trigger.get(
triggerids=trigger_ids,
output=["triggerid", "description"],
selectHosts=["hostid"]
)
# Создаем карту триггеров к хостам
trigger_to_host_map = {}
for trigger in triggers:
if "hosts" in trigger and trigger["hosts"]:
trigger_to_host_map[trigger["triggerid"]] = trigger["hosts"][0]["hostid"]
# Получение IP-адресов хостов # Получение IP-адресов хостов
host_interfaces = zapi.hostinterface.get( host_interfaces = zapi.hostinterface.get(
hostids=host_ids, hostids=host_ids,
@ -1285,6 +1299,19 @@ def get_zabbix_triggers(group_id):
) )
host_ip_map = {iface["hostid"]: iface["ip"] for iface in host_interfaces} host_ip_map = {iface["hostid"]: iface["ip"] for iface in host_interfaces}
# print(host_ip_map) # print(host_ip_map)
# Получение itemid для триггеров на основе их описания
item_map = {}
for host in active_hosts:
host_id = host["hostid"]
items = zapi.item.get(
hostids=host_id,
output=["itemid", "name"]
)
for item in items:
item_map[(host_id, item["name"])] = item["itemid"]
moscow_tz = timezone('Europe/Moscow') moscow_tz = timezone('Europe/Moscow')
severity_map = {'4': 'HIGH', '5': 'DISASTER'} severity_map = {'4': 'HIGH', '5': 'DISASTER'}
priority_map = {'4': '⚠️', '5': '⛔️'} priority_map = {'4': '⚠️', '5': '⛔️'}
@ -1299,12 +1326,16 @@ def get_zabbix_triggers(group_id):
priority = priority_map.get(problem['severity'], '') priority = priority_map.get(problem['severity'], '')
description = problem.get('name', 'Нет описания') description = problem.get('name', 'Нет описания')
# Получаем хост из описания (или по-другому, если известно) # Получаем hostid через триггер
trigger_id = problem.get("objectid")
host_id = trigger_to_host_map.get(trigger_id, "Неизвестный хост")
host_ip = host_ip_map.get(host_id, "Неизвестный IP")
host = extract_host_from_name(description) host = extract_host_from_name(description)
host_ip = host_ip_map.get(problem.get("hostid"), "Неизвестный IP") description = escape_telegram_chars(description)
message = (f"<b>{priority} Host</b>: {host}\n"
f"<b>IP</b>: {host_ip}\n"
message = (f"{priority} {host} ({host_ip})\n"
f"<b>Описание</b>: {description}\n" f"<b>Описание</b>: {description}\n"
f"<b>Критичность</b>: {severity}\n" f"<b>Критичность</b>: {severity}\n"
f"<b>Время создания</b>: {event_time_formatted}") f"<b>Время создания</b>: {event_time_formatted}")