def test_sample_by_process_from_history(self, mock_get_active_processes): fake_process_name_1 = 'fake-process-name-1' fake_process_name_2 = 'fake-process-name-2' task_path = '.' task_monitor = TaskMonitor(task_path, 'fake-task-id') fake_process_status_1 = ProcessStatus(process=fake_process_name_1) fake_process_status_2 = ProcessStatus(process=fake_process_name_2) mock_get_active_processes.return_value = [(fake_process_status_1, 1), (fake_process_status_2, 2)] fake_history = ResourceHistory(2) fake_history.add(time(), ResourceMonitorBase.FullResourceResult( {fake_process_status_1: ResourceMonitorBase.ProcResourceResult(ProcessSample.empty(), 1), fake_process_status_2: ResourceMonitorBase.ProcResourceResult(ProcessSample.empty(), 2), }, 10)) task_resource_monitor = TaskResourceMonitor('fake-task-id', task_monitor, history_provider=self.FakeResourceHistoryProvider(fake_history)) assert task_resource_monitor.name == 'TaskResourceMonitor[fake-task-id]' assert task_resource_monitor.sample_by_process(fake_process_name_1) == ProcessSample.empty() assert task_resource_monitor.sample_by_process(fake_process_name_2) == ProcessSample.empty() _, sample = task_resource_monitor.sample() assert sample.num_procs == 3 # 1 pid in fake_process_status_1 and 2 in fake_process_status_2 assert sample.process_sample == ProcessSample.empty() assert sample.disk_usage == 10 assert mock_get_active_processes.mock_calls == [mock.call(task_monitor), mock.call(task_monitor)]
def test_process_tree_collector(mock_process_iter): collector = ProcessTreeCollector(None) mock_process_iter.side_effect = psutil.Error collector.sample() assert collector.value == ProcessSample.empty() mock_process_iter.side_effect = IOError collector.sample() assert collector.value == ProcessSample.empty()
def test_null_sample(self): monitor = NullTaskResourceMonitor() monitor.start() null_aggregate = (0, ProcessSample.empty(), 0) assert monitor.sample()[1] == null_aggregate assert monitor.sample_at(time())[1] == null_aggregate assert monitor.sample_by_process( "any_process") == ProcessSample.empty() monitor.kill()
def _get_process_resource_consumption(self, task_id, process_name): if task_id not in self.active_tasks: log.debug("Task %s not found in active tasks" % task_id) return ProcessSample.empty().to_dict() sample = self.active_tasks[task_id].resource_monitor.sample_by_process(process_name).to_dict() log.debug('Resource consumption (%s, %s) => %s' % (task_id, process_name, sample)) return sample
def _mock_resource_monitor(num_procs=0, process_sample=ProcessSample.empty(), disk_usage=0): mock_resource_monitor = mock.Mock(spec=ResourceMonitorBase) mock_resource_monitor.sample.return_value = ( 12345, # timestamp ResourceMonitorBase.AggregateResourceResult(num_procs, process_sample, disk_usage)) return mock_resource_monitor
def _sample(self, task_id): if task_id not in self.active_tasks: sample = ProcessSample.empty().to_dict() sample['disk'] = 0 else: resource_sample = self.active_tasks[task_id].resource_monitor.sample()[1] sample = resource_sample.process_sample.to_dict() sample['disk'] = resource_sample.disk_usage log.debug("Got sample for task %s: %s" % (task_id, sample)) return sample
def test_sample_by_process(self, mock_get_active_processes, mock_sample): fake_process_name = 'fake-process-name' task_path = '.' task_monitor = TaskMonitor(task_path, 'fake-task-id') fake_process_status = ProcessStatus(process=fake_process_name) mock_get_active_processes.return_value = [(fake_process_status, 1)] fake_process_sample = ProcessSample.empty() mock_sample.return_value = fake_process_sample task_resource_monitor = TaskResourceMonitor('fake-task-id', task_monitor) assert fake_process_sample == task_resource_monitor.sample_by_process(fake_process_name) assert mock_get_active_processes.mock_calls == [mock.call(task_monitor)] assert mock_sample.mock_calls == [mock.call( task_resource_monitor._process_collectors[fake_process_status])]