fix: кодировка при чтении данных с MikroTik (кириллица в identity)
This commit is contained in:
+15
-9
@@ -70,22 +70,26 @@ def notify(message: str) -> None:
|
||||
# ──────────────────────────────────────────────
|
||||
# MikroTik: получить список IP из address-list
|
||||
# ──────────────────────────────────────────────
|
||||
def decode(val) -> str:
|
||||
"""Декодирует bytes или str, игнорируя ошибки кодировки."""
|
||||
if isinstance(val, bytes):
|
||||
return val.decode("utf-8", errors="replace")
|
||||
return str(val) if val else ""
|
||||
|
||||
|
||||
def fetch_address_list(api) -> list[str]:
|
||||
"""
|
||||
Читает /ip firewall address-list и возвращает список IP
|
||||
из записей с именем ADDRESS_LIST_NAME (пропускает отключённые).
|
||||
"""
|
||||
resource = api.get_resource("/ip/firewall/address-list")
|
||||
entries = resource.get(list=ADDRESS_LIST_NAME)
|
||||
resource = api.get_binary_resource("/ip/firewall/address-list")
|
||||
entries = resource.get(**{b"list": ADDRESS_LIST_NAME.encode()})
|
||||
|
||||
ip_list = []
|
||||
for entry in entries:
|
||||
# Пропускаем отключённые записи
|
||||
if entry.get("disabled", "false") == "true":
|
||||
log.debug("Пропущена (disabled): %s", entry.get("address"))
|
||||
if decode(entry.get(b"disabled", b"false")) == "true":
|
||||
continue
|
||||
address = entry.get("address", "").strip()
|
||||
# Убираем префикс /32 если есть — пингуем чистый IP
|
||||
address = decode(entry.get(b"address", b"")).strip()
|
||||
if "/" in address:
|
||||
address = address.split("/")[0]
|
||||
if address:
|
||||
@@ -161,9 +165,11 @@ def mikrotik_ping(api, address: str) -> Optional[float]:
|
||||
# ──────────────────────────────────────────────
|
||||
def fetch_identity(api) -> str:
|
||||
try:
|
||||
resource = api.get_resource("/system/identity")
|
||||
resource = api.get_binary_resource("/system/identity")
|
||||
result = resource.get()
|
||||
return result[0].get("name", MIKROTIK_HOST) if result else MIKROTIK_HOST
|
||||
if result:
|
||||
return decode(result[0].get(b"name", MIKROTIK_HOST.encode()))
|
||||
return MIKROTIK_HOST
|
||||
except Exception:
|
||||
return MIKROTIK_HOST
|
||||
|
||||
|
||||
Reference in New Issue
Block a user