Ejemplo n.º 1
0
  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()
Ejemplo n.º 2
0
  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)
Ejemplo n.º 3
0
  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()
Ejemplo n.º 4
0
  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])
Ejemplo n.º 5
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)
Ejemplo n.º 6
0
  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()
Ejemplo n.º 7
0
  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)
Ejemplo n.º 8
0
  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)
Ejemplo n.º 9
0
  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)
Ejemplo n.º 10
0
    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)
Ejemplo n.º 11
0
  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])
Ejemplo n.º 12
0
  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)
Ejemplo n.º 13
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)
Ejemplo n.º 14
0
    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()
Ejemplo n.º 15
0
  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)
Ejemplo n.º 16
0
    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)