def _discover_host_labels_for_source_type( *, host_key: HostKey, parsed_sections_broker: ParsedSectionsBroker, on_error: OnError, ) -> Mapping[str, HostLabel]: host_labels = {} try: parsed_results = parsed_sections_broker.all_parsing_results(host_key) console.vverbose( "Trying host label discovery with: %s\n" % ", ".join(str(r.section.name) for r in parsed_results)) for (section_data, _cache_info), section_plugin in parsed_results: kwargs = {'section': section_data} host_label_params = config.get_host_label_parameters( host_key.hostname, section_plugin) if host_label_params is not None: kwargs["params"] = host_label_params try: for label in section_plugin.host_label_function(**kwargs): console.vverbose( f" {label.name}: {label.value} ({section_plugin.name})\n" ) host_labels[label.name] = HostLabel( label.name, label.value, section_plugin.name, ) except (KeyboardInterrupt, MKTimeout): raise except Exception as exc: if on_error is OnError.RAISE: raise if on_error is OnError.WARN: console.error( f"Host label discovery of '{section_plugin.name}' failed: {exc}\n" ) except KeyboardInterrupt: raise MKGeneralException("Interrupted by Ctrl-C.") return host_labels
def _discover_host_labels_for_source_type( *, host_key: HostKey, parsed_sections_broker: ParsedSectionsBroker, discovery_parameters: DiscoveryParameters, ) -> Mapping[str, HostLabel]: try: host_data = parsed_sections_broker[host_key] except KeyError: return {} host_labels = {} try: # We do *not* process all available raw sections. Instead we see which *parsed* # sections would result from them, and then process those. parse_sections = { agent_based_register.get_section_plugin(rs).parsed_section_name for rs in host_data.sections } applicable_sections = parsed_sections_broker.determine_applicable_sections( parse_sections, host_key.source_type, ) console.vverbose("Trying host label discovery with: %s\n" % ", ".join(str(s.name) for s in applicable_sections)) for section_plugin in _sort_sections_by_label_priority( applicable_sections): kwargs = { 'section': parsed_sections_broker.get_parsed_section( host_key, section_plugin.parsed_section_name), } host_label_params = config.get_host_label_parameters( host_key.hostname, section_plugin) if host_label_params is not None: kwargs["params"] = host_label_params try: for label in section_plugin.host_label_function(**kwargs): console.vverbose( f" {label.name}: {label.value} ({section_plugin.name})\n" ) host_labels[label.name] = HostLabel( label.name, label.value, section_plugin.name, ) except (KeyboardInterrupt, MKTimeout): raise except Exception as exc: if cmk.utils.debug.enabled( ) or discovery_parameters.on_error == "raise": raise if discovery_parameters.on_error == "warn": console.error("Host label discovery of '%s' failed: %s\n" % (section_plugin.name, exc)) except KeyboardInterrupt: raise MKGeneralException("Interrupted by Ctrl-C.") return host_labels