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: