From 0a753b340eba9dea0dafb2b4ddf31eb7407f2308 Mon Sep 17 00:00:00 2001 From: Sergey Date: Sat, 16 May 2026 16:30:56 +0700 Subject: [PATCH] =?UTF-8?q?feat:=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=D1=81=D0=BE=20=D1=81=D0=BF=D0=B8=D1=81=D0=BA?= =?UTF-8?q?=D0=BE=D0=BC=20IP=20=D0=B8=20system=20identity?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- monitor.py | 41 +++++++++++++++++++++++++++++++++++++++-- 1 file changed, 39 insertions(+), 2 deletions(-) diff --git a/monitor.py b/monitor.py index e504324..b45f500 100644 --- a/monitor.py +++ b/monitor.py @@ -156,6 +156,18 @@ def mikrotik_ping(api, address: str) -> Optional[float]: return None +# ────────────────────────────────────────────── +# MikroTik: получить system identity +# ────────────────────────────────────────────── +def fetch_identity(api) -> str: + try: + resource = api.get_resource("/system/identity") + result = resource.get() + return result[0].get("name", MIKROTIK_HOST) if result else MIKROTIK_HOST + except Exception: + return MIKROTIK_HOST + + # ────────────────────────────────────────────── # Основной цикл # ────────────────────────────────────────────── @@ -169,10 +181,35 @@ 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"Address-list: {ADDRESS_LIST_NAME}\n" - f"Интервал: {CHECK_INTERVAL} сек" + 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} сек" ) while True: