def _get_filtered_services( host_name: HostName, belongs_to_cluster: bool, config_cache: config.ConfigCache, only_check_plugins: Optional[Set[CheckPluginName]] = None, ) -> List[Service]: services = check_table.get_precompiled_check_table( host_name, remove_duplicates=True, filter_mode="include_clustered" if belongs_to_cluster else None, ) # When check types are specified via command line, enforce them. Otherwise use the # list of checks defined by the check table. if only_check_plugins is None: only_check_plugins = { # TODO (mo): make service.check_plugin_name a CheckPluginName instance and thus # TODO (mo): centralize maincheckify: CMK-4295 CheckPluginName(maincheckify(service.check_plugin_name)) for service in services } def _is_not_of_host(service): return host_name != config_cache.host_of_clustered_service(host_name, service.description) # Filter out check types which are not used on the node if belongs_to_cluster: removed_plugins = { plugin for plugin in only_check_plugins if all( _is_not_of_host(service) for service in services # TODO (mo): centralize maincheckify: CMK-4295 if CheckPluginName(maincheckify(service.check_plugin_name)) == plugin) } only_check_plugins -= removed_plugins return [ service for service in services if ( # TODO (mo): centralize maincheckify: CMK-4295 CheckPluginName(maincheckify(service.check_plugin_name)) in only_check_plugins and not (belongs_to_cluster and _is_not_of_host(service)) and not service_outside_check_period(config_cache, host_name, service.description)) ]
def _do_all_checks_on_host(sources, host_config, ipaddress, only_check_plugin_names=None): # type: (data_sources.DataSources, config.HostConfig, Optional[HostAddress], Optional[List[str]]) -> Tuple[int, List[SectionName]] hostname = host_config.hostname # type: HostName config_cache = config.get_config_cache() num_success, missing_sections = 0, set() check_api_utils.set_hostname(hostname) filter_mode = None belongs_to_cluster = len(config_cache.clusters_of(hostname)) > 0 if belongs_to_cluster: filter_mode = "include_clustered" services = check_table.get_precompiled_check_table(hostname, remove_duplicates=True, filter_mode=filter_mode) # When check types are specified via command line, enforce them. Otherwise use the # list of checks defined by the check table. if only_check_plugin_names is None: only_check_plugins = { service.check_plugin_name for service in services } else: only_check_plugins = set(only_check_plugin_names) sources.enforce_check_plugin_names(only_check_plugins) # Gather the data from the sources multi_host_sections = sources.get_host_sections() # Filter out check types which are not used on the node if belongs_to_cluster: pos_match = set() neg_match = set() for service in services: if hostname != config_cache.host_of_clustered_service( hostname, service.description): pos_match.add(service.check_plugin_name) else: neg_match.add(service.check_plugin_name) only_check_plugins -= (pos_match - neg_match) for service in services: if only_check_plugins is not None and service.check_plugin_name not in only_check_plugins: continue if belongs_to_cluster and hostname != config_cache.host_of_clustered_service( hostname, service.description): continue success = execute_check(config_cache, multi_host_sections, hostname, ipaddress, service.check_plugin_name, service.item, service.parameters, service.description) if success: num_success += 1 elif success is None: # If the service is in any timeperiod we do not want to # - increase num_success or # - add to missing sections continue else: missing_sections.add( cmk.base.check_utils.section_name_of( service.check_plugin_name)) import cmk.base.inventory as inventory # pylint: disable=import-outside-toplevel inventory.do_inventory_actions_during_checking_for(sources, multi_host_sections, host_config, ipaddress) missing_section_list = sorted(missing_sections) return num_success, missing_section_list
def _do_all_checks_on_host(sources, host_config, ipaddress, only_check_plugin_names=None): # type: (data_sources.DataSources, config.HostConfig, Optional[HostAddress], Optional[List[str]]) -> Tuple[int, List[SectionName]] hostname = host_config.hostname # type: HostName config_cache = config.get_config_cache() num_success, missing_sections = 0, set() check_api_utils.set_hostname(hostname) belongs_to_cluster = len(config_cache.clusters_of(hostname)) > 0 services = check_table.get_precompiled_check_table( hostname, remove_duplicates=True, filter_mode="include_clustered" if belongs_to_cluster else None, ) # When check types are specified via command line, enforce them. Otherwise use the # list of checks defined by the check table. if only_check_plugin_names is None: only_check_plugins = { service.check_plugin_name for service in services } else: only_check_plugins = set(only_check_plugin_names) sources.enforce_check_plugin_names(only_check_plugins) # Gather the data from the sources multi_host_sections = sources.get_host_sections() def _is_not_of_host(host_name, service): return hostname != config_cache.host_of_clustered_service( hostname, service.description) # Filter out check types which are not used on the node if belongs_to_cluster: removed_plugins = { plugin for plugin in only_check_plugins if all( _is_not_of_host(hostname, service) for service in services if service.check_plugin_name == plugin) } only_check_plugins -= removed_plugins for service in services: if service.check_plugin_name not in only_check_plugins: continue if belongs_to_cluster and _is_not_of_host(hostname, service): continue if service_outside_check_period(config_cache, hostname, service.description): continue success = execute_check(multi_host_sections, hostname, ipaddress, service) if success: num_success += 1 else: missing_sections.add( cmk.base.check_utils.section_name_of( service.check_plugin_name)) import cmk.base.inventory as inventory # pylint: disable=import-outside-toplevel inventory.do_inventory_actions_during_checking_for(sources, multi_host_sections, host_config, ipaddress) missing_section_list = sorted(missing_sections) return num_success, missing_section_list