diff --git a/backend/app/services/device_discovery.py b/backend/app/services/device_discovery.py index 51b80c2..16f4b77 100644 --- a/backend/app/services/device_discovery.py +++ b/backend/app/services/device_discovery.py @@ -103,40 +103,49 @@ def _parse_config(config_text: str, rack_host: str) -> list[DiscoveredDevice]: discovered: list[DiscoveredDevice] = [] seen_ips: set[str] = set() + all_sections = parser.sections() + plugin_sections = [s for s in all_sections if s.startswith("plugin:")] - for section in parser.sections(): + logger.info(f"[ssh_discovery] Config parsing: found {len(all_sections)} sections total, {len(plugin_sections)} are plugins") + + for section in all_sections: if not section.startswith("plugin:"): continue plugin_name = section[len("plugin:"):] if any(plugin_name.startswith(prefix) for prefix in _SKIP_PLUGIN_PREFIXES): - logger.debug(f"[ssh_discovery] Plugin {plugin_name} - IGNORED (prefix in skip list: {_SKIP_PLUGIN_PREFIXES})") + logger.info(f"[ssh_discovery] Plugin '{plugin_name}' - IGNORED (in skip list)") continue cls = parser.get(section, "cls", fallback="") if not cls: - logger.debug(f"[ssh_discovery] Plugin {plugin_name} - IGNORED (no 'cls' field)") + logger.info(f"[ssh_discovery] Plugin '{plugin_name}' - IGNORED (no 'cls' field)") continue + logger.info(f"[ssh_discovery] Plugin '{plugin_name}' (cls={cls})") + # Collect all URI-like values in this section uri_fields = ("uri", "frame_uri", "host") + found_ip_in_plugin = False for field_name in uri_fields: raw = parser.get(section, field_name, fallback=None) if not raw: + logger.debug(f"[ssh_discovery] {field_name}: not set") continue + logger.debug(f"[ssh_discovery] {field_name}='{raw}'") ip = _extract_ip(raw) if not ip: - logger.debug(f"[ssh_discovery] Plugin {plugin_name} field {field_name}='{raw}' - IGNORED (not a valid network IP)") + logger.info(f"[ssh_discovery] {field_name}='{raw}' - IGNORED (not a valid network IP)") continue if ip == rack_host: - logger.debug(f"[ssh_discovery] IP {ip} from plugin {plugin_name} - IGNORED (matches rack_host)") + logger.info(f"[ssh_discovery] IP {ip} - IGNORED (matches rack_host {rack_host})") continue if ip in seen_ips: - logger.debug(f"[ssh_discovery] IP {ip} from plugin {plugin_name} - IGNORED (duplicate, already seen)") + logger.info(f"[ssh_discovery] IP {ip} - IGNORED (duplicate, already seen)") continue seen_ips.add(ip) - logger.debug(f"[ssh_discovery] IP {ip} from plugin {plugin_name} - EXTRACTED (cls={cls}, category={_cls_to_category(cls)}, role={_cls_to_role(cls, plugin_name)})") + logger.info(f"[ssh_discovery] IP {ip} - EXTRACTED (category={_cls_to_category(cls)}, role={_cls_to_role(cls, plugin_name)})") discovered.append(DiscoveredDevice( ip=ip, category=_cls_to_category(cls), @@ -144,6 +153,7 @@ def _parse_config(config_text: str, rack_host: str) -> list[DiscoveredDevice]: plugin_name=plugin_name, cls=cls, )) + found_ip_in_plugin = True return discovered