diff --git a/hc/api/models.py b/hc/api/models.py index a71b81b0..414d2824 100644 --- a/hc/api/models.py +++ b/hc/api/models.py @@ -146,6 +146,9 @@ class Check(models.Model): if self.status in ("new", "paused"): return False + if self.last_ping_was_fail: + return False + grace_start = self.get_grace_start() grace_end = grace_start + self.grace return grace_start < timezone.now() < grace_end diff --git a/hc/api/tests/test_check_model.py b/hc/api/tests/test_check_model.py index 0f28b346..a5ab9e54 100644 --- a/hc/api/tests/test_check_model.py +++ b/hc/api/tests/test_check_model.py @@ -20,6 +20,16 @@ class CheckModelTestCase(TestCase): check = Check() self.assertFalse(check.in_grace_period()) + def test_in_grace_period_handles_fail_ping(self): + check = Check() + check.status = "up" + check.last_ping = timezone.now() - timedelta(days=1, minutes=30) + check.last_ping_was_fail = True + + # If last ping was signalling a failure, we're not in grace period, + # we're down + self.assertFalse(check.in_grace_period()) + def test_status_works_with_grace_period(self): check = Check() check.status = "up"