diff --git a/checks/__init__.py b/checks/__init__.py index 248af288a5..1f08da47b4 100644 --- a/checks/__init__.py +++ b/checks/__init__.py @@ -130,10 +130,16 @@ def _rate(cls, sample1, sample2): interval = sample2[0] - sample1[0] if interval == 0: raise Infinity() + delta = sample2[1] - sample1[1] + if delta < 0: + raise UnknownValue() + return (sample2[0], delta / interval) except Infinity: raise + except UnknownValue: + raise except Exception, e: raise NaN(e) diff --git a/tests/test_common.py b/tests/test_common.py index e3f95ce715..6569547481 100644 --- a/tests/test_common.py +++ b/tests/test_common.py @@ -42,17 +42,17 @@ def test_counter(self): self.assertEquals(self.c.get_sample("test-counter"), 1.0) self.assertEquals(self.c.get_sample_with_timestamp("test-counter"), (2.0, 1.0)) self.c.save_sample("test-counter", -2.0, 3.0) - self.assertEquals(self.c.get_sample_with_timestamp("test-counter"), (3.0, -4.0)) + self.assertRaises(UnknownValue, self.c.get_sample_with_timestamp, "test-counter") def test_samples(self): self.assertEquals(self.c.get_samples(), {}) self.c.save_sample("test-metric", 1.0, 0.0) # value, ts self.c.save_sample("test-counter", 1.0, 1.0) # value, ts - self.c.save_sample("test-counter", 0.0, 2.0) # value, ts + self.c.save_sample("test-counter", 4.0, 2.0) # value, ts assert "test-metric" in self.c.get_samples_with_timestamps(), self.c.get_samples_with_timestamps() self.assertEquals(self.c.get_samples_with_timestamps()["test-metric"], (0.0, 1.0)) assert "test-counter" in self.c.get_samples_with_timestamps(), self.c.get_samples_with_timestamps() - self.assertEquals(self.c.get_samples_with_timestamps()["test-counter"], (2.0, -1.0)) + self.assertEquals(self.c.get_samples_with_timestamps()["test-counter"], (2.0, 3.0)) if __name__ == '__main__': unittest.main()