diff --git a/monitor.py b/monitor.py
index 41f9409..298f758 100644
--- a/monitor.py
+++ b/monitor.py
@@ -77,9 +77,9 @@ def decode(val) -> str:
return str(val) if val else ""
-def fetch_address_list(api) -> list[str]:
+def fetch_address_list(api) -> list[tuple[str, str]]:
"""
- Читает /ip firewall address-list и возвращает список IP
+ Читает /ip firewall address-list и возвращает список (ip, comment)
из записей с именем ADDRESS_LIST_NAME (пропускает отключённые).
"""
resource = api.get_binary_resource("/ip/firewall/address-list")
@@ -96,8 +96,9 @@ def fetch_address_list(api) -> list[str]:
address = decode(entry.get("address", b"")).strip()
if "/" in address:
address = address.split("/")[0]
+ comment = decode(entry.get("comment", b"")).strip()
if address:
- ip_list.append(address)
+ ip_list.append((address, comment))
return ip_list
@@ -213,7 +214,10 @@ def main() -> None:
# Стартовое сообщение — отправляем только после успешного подключения
if not startup_notified:
identity = fetch_identity(api)
- ip_lines = "\n".join(f" • {ip}" for ip in ip_list) or " (список пуст)"
+ ip_lines = "\n".join(
+ f" • {ip} ({comment})" if comment else f" • {ip}"
+ for ip, comment in ip_list
+ ) or " (список пуст)"
notify(
f"🟢 MikroTik Monitor запущен\n"
f"\n"
@@ -232,24 +236,25 @@ def main() -> None:
log.info("Адресов для проверки: %d → %s", len(ip_list), ip_list)
# Добавляем новые хосты в state (без сброса существующих)
- for ip in ip_list:
+ for ip, comment in ip_list:
if ip not in failure_count:
failure_count[ip] = 0
host_down[ip] = False
# Пингуем каждый адрес
- for ip in ip_list:
+ for ip, comment in ip_list:
+ label = f"{ip} ({comment})" if comment else ip
now = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
rtt = mikrotik_ping(api, ip)
if rtt is not None:
- log.info("✅ %-18s avg-rtt=%.1f ms", ip, rtt)
+ log.info("✅ %-28s avg-rtt=%.1f ms", label, rtt)
if host_down[ip]:
host_down[ip] = False
failure_count[ip] = 0
notify(
f"✅ Хост восстановился\n"
- f"IP: {ip}\n"
+ f"IP: {ip}" + (f" ({comment})" if comment else "") + f"\n"
f"RTT: {rtt:.1f} ms\n"
f"Время: {now}"
)
@@ -258,14 +263,14 @@ def main() -> None:
else:
failure_count[ip] += 1
log.warning(
- "❌ %-18s не отвечает (%d/%d)",
- ip, failure_count[ip], FAILURE_THRESHOLD,
+ "❌ %-28s не отвечает (%d/%d)",
+ label, failure_count[ip], FAILURE_THRESHOLD,
)
if failure_count[ip] >= FAILURE_THRESHOLD and not host_down[ip]:
host_down[ip] = True
notify(
f"🔴 Хост недоступен!\n"
- f"IP: {ip}\n"
+ f"IP: {ip}" + (f" ({comment})" if comment else "") + f"\n"
f"Список: {ADDRESS_LIST_NAME}\n"
f"Не отвечает {failure_count[ip]} проверки подряд\n"
f"Время: {now}"