def _find_mgmt_candidates( broker: ParsedSectionsBroker, preliminary_candidates: List[checking_classes.CheckPlugin], parsed_sections_of_interest: Set[ParsedSectionName], ) -> Set[CheckPluginName]: available_parsed_sections = { s.parsed_section_name for s in broker.determine_applicable_sections( parsed_sections_of_interest, SourceType.MANAGEMENT, ) } return { # *create* all management only names of the plugins plugin.name.create_management_name() for plugin in preliminary_candidates if any(section in available_parsed_sections for section in plugin.sections) }
def _find_host_candidates( broker: ParsedSectionsBroker, preliminary_candidates: List[checking_classes.CheckPlugin], parsed_sections_of_interest: Set[ParsedSectionName], ) -> Set[CheckPluginName]: available_parsed_sections = { s.parsed_section_name for s in broker.determine_applicable_sections( parsed_sections_of_interest, SourceType.HOST, ) } return { plugin.name for plugin in preliminary_candidates # *filter out* all names of management only check plugins if not plugin.name.is_management_name() and any( section in available_parsed_sections for section in plugin.sections) }
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