From 152334434cd6f9c19dedfe8f9ce0a1bb720dc06a Mon Sep 17 00:00:00 2001 From: Sergey Date: Sat, 16 May 2026 16:52:27 +0700 Subject: [PATCH] =?UTF-8?q?fix:=20=D1=81=D1=82=D0=B0=D1=80=D1=82=D0=BE?= =?UTF-8?q?=D0=B2=D0=BE=D0=B5=20=D1=81=D0=BE=D0=BE=D0=B1=D1=89=D0=B5=D0=BD?= =?UTF-8?q?=D0=B8=D0=B5=20=D0=BF=D0=BE=D1=81=D0=BB=D0=B5=20=D0=BF=D0=BE?= =?UTF-8?q?=D0=B4=D0=BA=D0=BB=D1=8E=D1=87=D0=B5=D0=BD=D0=B8=D1=8F=20=D0=BA?= =?UTF-8?q?=20MikroTik?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- monitor.py | 47 +++++++++++++++++------------------------------ 1 file changed, 17 insertions(+), 30 deletions(-) diff --git a/monitor.py b/monitor.py index b45f500..3e9289d 100644 --- a/monitor.py +++ b/monitor.py @@ -181,36 +181,7 @@ def main() -> None: failure_count: dict[str, int] = {} host_down: dict[str, bool] = {} - # Подключаемся один раз для стартового сообщения - startup_identity = MIKROTIK_HOST - startup_ip_list = [] - try: - _pool = routeros_api.RouterOsApiPool( - MIKROTIK_HOST, - username=MIKROTIK_USER, - password=MIKROTIK_PASSWORD, - port=MIKROTIK_PORT, - plaintext_login=True, - ) - _api = _pool.get_api() - startup_identity = fetch_identity(_api) - startup_ip_list = fetch_address_list(_api) - _pool.disconnect() - except Exception as exc: - log.warning("Не удалось получить данные для стартового сообщения: %s", exc) - - ip_lines = "\n".join(f" • {ip}" for ip in startup_ip_list) or " (список пуст)" - - notify( - f"🟢 MikroTik Monitor запущен\n" - f"\n" - f"🔧 Роутер: {startup_identity} ({MIKROTIK_HOST})\n" - f"📋 Address-list: {ADDRESS_LIST_NAME}\n" - f"\n" - f"Мониторинг адресов:\n{ip_lines}\n" - f"\n" - f"⏱ Интервал: {CHECK_INTERVAL} сек" - ) + startup_notified = False while True: pool = None @@ -229,6 +200,22 @@ def main() -> None: # Читаем актуальный список адресов с MikroTik ip_list = fetch_address_list(api) + # Стартовое сообщение — отправляем только после успешного подключения + if not startup_notified: + identity = fetch_identity(api) + ip_lines = "\n".join(f" • {ip}" for ip in ip_list) or " (список пуст)" + notify( + f"🟢 MikroTik Monitor запущен\n" + f"\n" + f"🔧 Роутер: {identity} ({MIKROTIK_HOST})\n" + f"📋 Address-list: {ADDRESS_LIST_NAME}\n" + f"\n" + f"Мониторинг адресов:\n{ip_lines}\n" + f"\n" + f"⏱ Интервал: {CHECK_INTERVAL} сек" + ) + startup_notified = True + if not ip_list: log.warning("Address-list '%s' пуст или не найден!", ADDRESS_LIST_NAME) else: