def test_compute_value_marks_buffer_inactive(self): interval_buffer = IntervalBuffer(600) interval_buffer.input((600, 1.0)) self.metric_buffer.interval_buffers[600] = interval_buffer with patch.object(interval_buffer, 'mark_inactive') as mark_inactive_mock: self.metric_buffer.compute_value() mark_inactive_mock.assert_called_once_with()
def test_compute_value_skips_inactive_buffers(self, metric_generated_mock): interval_buffer = IntervalBuffer(600) interval_buffer.input((600, 1.0)) interval_buffer.mark_inactive() self.metric_buffer.interval_buffers[600] = interval_buffer self.metric_buffer.compute_value() self.assertFalse(metric_generated_mock.called)
def test_compute_value_marks_buffer_inactive(self): interval_buffer = IntervalBuffer(600) interval_buffer.input((600, 1.0)) self.metric_buffer.interval_buffers[600] = interval_buffer with patch.object(IntervalBuffer, 'mark_inactive') as mark_inactive_mock: self.metric_buffer.compute_value() mark_inactive_mock.assert_called_once_with()
def test_compute_value_computes_aggregate(self): interval_buffer = IntervalBuffer(600) interval_buffer.input((600, 1.0)) interval_buffer.input((601, 2.0)) interval_buffer.input((602, 3.0)) self.metric_buffer.interval_buffers[600] = interval_buffer with patch.object(self.metric_buffer, 'aggregation_func') as aggregation_func_mock: self.metric_buffer.compute_value() aggregation_func_mock.assert_called_once_with([1.0, 2.0, 3.0])
def test_compute_value_unregisters_metric_if_last_buffer_deleted(self): from carbon.conf import settings current_interval = 600 + 60 * settings['MAX_AGGREGATION_INTERVALS'] interval_buffer = IntervalBuffer(600) interval_buffer.input((600, 1.0)) interval_buffer.mark_inactive() self.metric_buffer.interval_buffers[600] = interval_buffer BufferManager.buffers['carbon.foo.bar'] = self.metric_buffer with patch("time.time", new=Mock(return_value=current_interval + 60)): self.metric_buffer.compute_value() self.assertFalse('carbon.foo.bar' in BufferManager.buffers)
def test_compute_value_closes_metric_if_last_buffer_deleted(self): from carbon.conf import settings current_interval = 600 + 60 * settings['MAX_AGGREGATION_INTERVALS'] interval_buffer = IntervalBuffer(600) interval_buffer.input((600, 1.0)) interval_buffer.mark_inactive() self.metric_buffer.interval_buffers[600] = interval_buffer BufferManager.buffers['carbon.foo.bar'] = self.metric_buffer with patch("time.time", new=Mock(return_value=current_interval + 60)): with patch.object(self.metric_buffer, 'close') as close_mock: self.metric_buffer.compute_value() close_mock.assert_called_once_with()
def test_compute_value_doesnt_flush_unchanged_interval_many_times(self, metric_generated_mock): interval_buffer = IntervalBuffer(600) interval_buffer.input((600, 1.0)) self.metric_buffer.interval_buffers[600] = interval_buffer with patch("time.time") as time_mock: time_mock.return_value = 600 self.metric_buffer.compute_value() calls = [call("carbon.foo.bar", (600, 1.0))] # say WRITE_BACK_FREQUENCY is 30, we flush again but no point came in time_mock.return_value = 630 self.metric_buffer.compute_value() metric_generated_mock.assert_has_calls(calls)
def test_compute_value_deletes_expired_buffers(self): from carbon.conf import settings current_interval = 600 + 60 * settings['MAX_AGGREGATION_INTERVALS'] interval_buffer = IntervalBuffer(600) interval_buffer.input((600, 1.0)) interval_buffer.mark_inactive() self.metric_buffer.interval_buffers[600] = interval_buffer # 2nd interval for current time interval_buffer = IntervalBuffer(current_interval) interval_buffer.input((current_interval, 1.0)) interval_buffer.mark_inactive() self.metric_buffer.interval_buffers[current_interval] = interval_buffer with patch("time.time", new=Mock(return_value=current_interval + 60)): self.metric_buffer.compute_value() self.assertFalse(600 in self.metric_buffer.interval_buffers)
def test_compute_value_can_flush_interval_multiple_times(self, metric_generated_mock): interval_buffer = IntervalBuffer(600) interval_buffer.input((600, 1.0)) interval_buffer.input((601, 2.0)) interval_buffer.input((602, 3.0)) self.metric_buffer.interval_buffers[600] = interval_buffer with patch("time.time") as time_mock: time_mock.return_value = 600 self.metric_buffer.compute_value() calls = [call("carbon.foo.bar", (600, 6.0))] # say WRITE_BACK_FREQUENCY is 30, we flush again if another point came in time_mock.return_value = 630 interval_buffer.input((604, 4.0)) self.metric_buffer.compute_value() calls.append(call("carbon.foo.bar", (600, 10.0))) metric_generated_mock.assert_has_calls(calls)