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 _run(self, hostname, ipaddress, get_raw_data): # type: (Optional[HostName], Optional[HostAddress], bool) -> Union[BoundedAbstractRawData, BoundedAbstractHostSections] """Wrapper for self._execute() that unifies several things: a) Exception handling b) Caching of raw data c) CPU tracking Exceptions: All exceptions are caught and written to self._exception. The caller should use self.get_summary_result() to get the summary result of this data source which also includes information about the happed exception. In case the --debug mode is enabled, the exceptions are raised. self._exception is re-initialized to None when this method is called. Both hostname and ipaddress are optional, used for virtual Check_MK clusters.""" # TODO: This is manipulating the state that has been initialized with the constructor?! if hostname is not None: self._hostname = hostname if ipaddress is not None: self._ipaddress = ipaddress self._exception = None self._host_sections = None self._persisted_sections = None try: cpu_tracking.push_phase(self._cpu_tracking_id()) persisted_sections_from_disk = self._load_persisted_sections() self._persisted_sections = persisted_sections_from_disk raw_data, is_cached_data = self._get_raw_data() self._host_sections = host_sections = self._convert_to_sections( raw_data) assert isinstance(host_sections, AbstractHostSections) if get_raw_data: return raw_data # Add information from previous persisted infos host_sections = self._update_info_with_persisted_sections( persisted_sections_from_disk, host_sections, is_cached_data) self._persisted_sections = host_sections.persisted_sections return host_sections except MKTerminate: raise except Exception as e: self._logger.log(VERBOSE, "ERROR: %s", e) if cmk.utils.debug.enabled(): raise self._exception = e finally: cpu_tracking.pop_phase() if get_raw_data: return self._empty_raw_data() return self._empty_host_sections()
def test_push_without_tracking(): cpu_tracking.push_phase("bla") assert cpu_tracking._is_not_tracking()