def test_get_section_content(hostname, host_entries, cluster_node_keys, expected_result): multi_host_sections = MultiHostSections() for nodename, node_section_content in host_entries: multi_host_sections.setdefault( HostKey(nodename, "127.0.0.1", SourceType.HOST), AgentHostSections( sections={ SectionName("section_plugin_name"): node_section_content }), ) section_content = multi_host_sections.get_section_content( HostKey(hostname, "127.0.0.1", SourceType.HOST), check_api_utils.HOST_ONLY, "section_plugin_name", False, cluster_node_keys=cluster_node_keys, check_legacy_info= {}, # only for parse_function lookup, not needed in this test ) assert expected_result == section_content section_content = multi_host_sections.get_section_content( HostKey(hostname, "127.0.0.1", SourceType.HOST), check_api_utils.HOST_PRECEDENCE, "section_plugin_name", False, cluster_node_keys=cluster_node_keys, check_legacy_info= {}, # only for parse_function lookup, not needed in this test ) assert expected_result == section_content section_content = multi_host_sections.get_section_content( HostKey(hostname, "127.0.0.1", SourceType.MANAGEMENT), check_api_utils.MGMT_ONLY, "section_plugin_name", False, cluster_node_keys=None if cluster_node_keys is None else [ HostKey(hn, ip, SourceType.MANAGEMENT) for (hn, ip, _st) in cluster_node_keys ], check_legacy_info= {}, # only for parse_function lookup, not needed in this test ) assert section_content is None
def test_get_section_content(monkeypatch, hostname, nodes, host_entries, cluster_mapping, service_descr, expected_result): ts = Scenario() if nodes is None: ts.add_host(hostname) else: ts.add_cluster(hostname, nodes=nodes) for node in nodes or []: ts.add_host(node) config_cache = ts.apply(monkeypatch) def host_of_clustered_service(hostname, service_description): return cluster_mapping[hostname] multi_host_sections = MultiHostSections() for nodename, node_section_content in host_entries: multi_host_sections.add_or_get_host_sections( nodename, "127.0.0.1", AgentHostSections(sections={"check_plugin_name": node_section_content})) monkeypatch.setattr(ip_lookup, "lookup_ip_address", lambda h: "127.0.0.1") monkeypatch.setattr(config_cache, "host_of_clustered_service", host_of_clustered_service) section_content = multi_host_sections.get_section_content(hostname, "127.0.0.1", "check_plugin_name", False, service_description=service_descr) assert expected_result == section_content,\ "Section content: Expected '%s' but got '%s'" % (expected_result, section_content)
def test_get_section_content(monkeypatch, hostname, nodes, host_entries, cluster_mapping, service_descr, expected_result): _set_up(monkeypatch, hostname, nodes, cluster_mapping) multi_host_sections = MultiHostSections() for nodename, node_section_content in host_entries: multi_host_sections.setdefault_host_sections( (nodename, "127.0.0.1", SourceType.HOST), AgentHostSections( sections={"check_plugin_name": node_section_content}), ) section_content = multi_host_sections.get_section_content( hostname, "127.0.0.1", check_api_utils.HOST_ONLY, "check_plugin_name", False, service_description=service_descr, ) assert expected_result == section_content,\ "Section content: Expected '%s' but got '%s'" % (expected_result, section_content) section_content = multi_host_sections.get_section_content( hostname, "127.0.0.1", check_api_utils.HOST_PRECEDENCE, "check_plugin_name", False, service_description=service_descr, ) assert expected_result == section_content,\ "Section content: Expected '%s' but got '%s'" % (expected_result, section_content) section_content = multi_host_sections.get_section_content( hostname, "127.0.0.1", check_api_utils.MGMT_ONLY, "check_plugin_name", False, service_description=service_descr, ) assert section_content is None, \ "Section content: Expected 'None' but got '%s'" % (section_content,)
def test_get_section_content(monkeypatch, hostname, nodes, host_entries, cluster_mapping, service_descr, expected_result): _set_up(monkeypatch, hostname, nodes, cluster_mapping) multi_host_sections = MultiHostSections() for nodename, node_section_content in host_entries: multi_host_sections.setdefault( HostKey(nodename, "127.0.0.1", SourceType.HOST), AgentHostSections(sections={SectionName("section_plugin_name"): node_section_content}), ) section_content = multi_host_sections.get_section_content( HostKey(hostname, "127.0.0.1", SourceType.HOST), check_api_utils.HOST_ONLY, "section_plugin_name", False, service_description=service_descr, check_info={}, # only for parse_function lookup, not needed in this test ) assert expected_result == section_content,\ "Section content: Expected '%s' but got '%s'" % (expected_result, section_content) section_content = multi_host_sections.get_section_content( HostKey(hostname, "127.0.0.1", SourceType.HOST), check_api_utils.HOST_PRECEDENCE, "section_plugin_name", False, service_description=service_descr, check_info={}, # only for parse_function lookup, not needed in this test ) assert expected_result == section_content,\ "Section content: Expected '%s' but got '%s'" % (expected_result, section_content) section_content = multi_host_sections.get_section_content( HostKey(hostname, "127.0.0.1", SourceType.MANAGEMENT), check_api_utils.MGMT_ONLY, "section_plugin_name", False, service_description=service_descr, check_info={}, # only for parse_function lookup, not needed in this test ) assert section_content is None, \ "Section content: Expected 'None' but got '%s'" % (section_content,)
def test_get_section_content(monkeypatch, hostname, nodes, host_entries, cluster_mapping, service_descr, expected_result): _set_up(monkeypatch, hostname, nodes, cluster_mapping) multi_host_sections = MultiHostSections() for nodename, node_section_content in host_entries: multi_host_sections.add_or_get_host_sections( nodename, "127.0.0.1", AgentHostSections( sections={"check_plugin_name": node_section_content})) section_content = multi_host_sections.get_section_content( hostname, "127.0.0.1", "check_plugin_name", False, service_description=service_descr) assert expected_result == section_content,\ "Section content: Expected '%s' but got '%s'" % (expected_result, section_content)
def _execute_check_legacy_mode(multi_host_sections: MultiHostSections, hostname: HostName, ipaddress: Optional[HostAddress], service: Service) -> bool: check_function = config.check_info[service.check_plugin_name].get("check_function") if check_function is None: _submit_check_result(hostname, service.description, CHECK_NOT_IMPLEMENTED, None) return True # Make a bit of context information globally available, so that functions # called by checks know this context check_api_utils.set_service(service.check_plugin_name, service.description) item_state.set_item_state_prefix(service.check_plugin_name, service.item) section_name = section_name_of(service.check_plugin_name) section_content = None mgmt_board_info = config.get_management_board_precedence(section_name, config.check_info) try: # TODO: There is duplicate code with discovery._execute_discovery(). section_content = multi_host_sections.get_section_content( HostKey( hostname, ipaddress, SourceType.MANAGEMENT if mgmt_board_info == LEGACY_MGMT_ONLY else SourceType.HOST, ), mgmt_board_info, section_name, for_discovery=False, service_description=service.description, ) # TODO: Move this to a helper function if section_content is None: # No data for this check type return False # Call the actual check function item_state.reset_wrapped_counters() used_params = legacy_determine_check_params(service.parameters) raw_result = check_function(service.item, used_params, section_content) result = sanitize_check_result(raw_result) item_state.raise_counter_wrap() except item_state.MKCounterWrapped as e: # handle check implementations that do not yet support the # handling of wrapped counters via exception on their own. # Do not submit any check result in that case: console.verbose("%-20s PEND - Cannot compute check result: %s\n", ensure_str(service.description), e) # Don't submit to core - we're done. return True except MKTimeout: raise except Exception: if cmk.utils.debug.enabled(): raise result = 3, cmk.base.crash_reporting.create_check_crash_dump( hostname, service.check_plugin_name, { "item": service.item, "params": used_params, "section_content": section_content }, is_manual_check(hostname, service.check_plugin_name, service.item), service.description, ), [] _submit_check_result( hostname, service.description, result, _legacy_determine_cache_info(multi_host_sections, SectionName(section_name)), ) return True