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: