"""Журнал событий сети/mDNS в админке (тот же JSONL, component=network).""" from __future__ import annotations import logging from typing import Any, Dict, Optional from app.services.admin_peripheral_monitor import append_peripheral_event _LOG = logging.getLogger(__name__) def log_network_event( app, *, code: str, message: str, level: str = "info", details: Optional[Dict[str, Any]] = None, force: bool = False, ) -> None: append_peripheral_event( app, component="network", code=code, level=level, message=message, details=details, force=force, ) _LOG.info("network/%s: %s", code, message) def log_network_settings_saved(app, *, updates: dict, user_login: str) -> None: parts = [] if "local_hostname" in updates: parts.append(f"hostname={updates['local_hostname']}") if "public_base_url" in updates: parts.append(f"url={updates['public_base_url'] or '(auto)'}") if "mdns_enabled" in updates: parts.append(f"mdns={'on' if updates['mdns_enabled'] else 'off'}") log_network_event( app, code="network_settings_saved", level="ok", message=f"Настройки сети сохранены ({', '.join(parts) or '—'})", details={"user": user_login, **updates}, force=True, ) def log_mdns_started(app, *, hostname: str, lan_ip: str, port: int) -> None: log_network_event( app, code="mdns_started", level="ok", message=f"mDNS: {hostname} → {lan_ip}:{port}", details={"hostname": hostname, "lan_ip": lan_ip, "port": port}, force=True, ) def log_mdns_stopped(app, *, reason: str = "") -> None: msg = "mDNS остановлен" if reason: msg = f"{msg}: {reason}" log_network_event( app, code="mdns_stopped", level="info", message=msg, details={"reason": reason} if reason else None, force=True, ) def log_mdns_error(app, *, message: str) -> None: log_network_event( app, code="mdns_error", level="err", message=message, force=False, )