def test_cpu_tracking_simple(monkeypatch): monkeypatch.setattr("time.time", lambda: 0.0) cpu_tracking.start("busy") assert cpu_tracking.get_times() == {} monkeypatch.setattr("time.time", lambda: 1.0) cpu_tracking.end() times = cpu_tracking.get_times() assert len(times) == 2 assert len(times["TOTAL"]) == 5 assert times["TOTAL"][4] == 1.0 assert times["busy"][4] == 1.0
def test_cpu_tracking_add_times(monkeypatch): monkeypatch.setattr("time.time", lambda: 0.0) cpu_tracking.start("busy") monkeypatch.setattr("time.time", lambda: 2.0) cpu_tracking.push_phase("agent") monkeypatch.setattr("time.time", lambda: 5.0) cpu_tracking.pop_phase() cpu_tracking.push_phase("agent") monkeypatch.setattr("time.time", lambda: 7.0) cpu_tracking.pop_phase() cpu_tracking.end() times = cpu_tracking.get_times() assert len(times) == 3 assert times["TOTAL"][4] == 7.0 assert times["busy"][4] == 2.0 assert times["agent"][4] == 5.0
def do_check(hostname, ipaddress, only_check_plugin_names=None): cpu_tracking.start("busy") console.verbose("Check_MK version %s\n" % cmk.__version__) config_cache = config.get_config_cache() host_config = config_cache.get_host_config(hostname) exit_spec = host_config.exit_code_spec() status, infotexts, long_infotexts, perfdata = 0, [], [], [] try: # In case of keepalive we always have an ipaddress (can be 0.0.0.0 or :: when # address is unknown). When called as non keepalive ipaddress may be None or # is already an address (2nd argument) if ipaddress is None and not host_config.is_cluster: ipaddress = ip_lookup.lookup_ip_address(hostname) item_state.load(hostname) sources = data_sources.DataSources(hostname, ipaddress) num_success, missing_sections = \ _do_all_checks_on_host(sources, host_config, ipaddress, only_check_plugin_names) if _submit_to_core: item_state.save(hostname) for source in sources.get_data_sources(): source_state, source_output, source_perfdata = source.get_summary_result_for_checking( ) if source_output != "": status = max(status, source_state) infotexts.append("[%s] %s" % (source.id(), source_output)) perfdata.extend(source_perfdata) if missing_sections and num_success > 0: missing_sections_status, missing_sections_infotext = \ _check_missing_sections(missing_sections, exit_spec) status = max(status, missing_sections_status) infotexts.append(missing_sections_infotext) elif missing_sections: infotexts.append("Got no information from host") status = max(status, exit_spec.get("empty_output", 2)) cpu_tracking.end() phase_times = cpu_tracking.get_times() total_times = phase_times["TOTAL"] run_time = total_times[4] infotexts.append("execution time %.1f sec" % run_time) if config.check_mk_perfdata_with_times: perfdata += [ "execution_time=%.3f" % run_time, "user_time=%.3f" % total_times[0], "system_time=%.3f" % total_times[1], "children_user_time=%.3f" % total_times[2], "children_system_time=%.3f" % total_times[3], ] for phase, times in phase_times.items(): if phase in ["agent", "snmp", "ds"]: t = times[4] - sum(times[:4]) # real time - CPU time perfdata.append("cmk_time_%s=%.3f" % (phase, t)) else: perfdata.append("execution_time=%.3f" % run_time) return status, infotexts, long_infotexts, perfdata finally: if _checkresult_file_fd is not None: _close_checkresult_file() if config.record_inline_snmp_stats \ and host_config.snmp_config(ipaddress).is_inline_snmp_host: inline_snmp.save_snmp_stats()