Browse Source

Return max notification_id in metrics.

pull/366/head
Pēteris Caune 5 years ago
parent
commit
3730c67c80
No known key found for this signature in database GPG Key ID: E28D7679E9A9EDE2
2 changed files with 19 additions and 5 deletions
  1. +13
    -1
      hc/api/tests/test_metrics.py
  2. +6
    -4
      hc/api/views.py

+ 13
- 1
hc/api/tests/test_metrics.py View File

@ -1,6 +1,6 @@
from django.test.utils import override_settings from django.test.utils import override_settings
from django.utils.timezone import now from django.utils.timezone import now
from hc.api.models import Check, Flip, Ping
from hc.api.models import Channel, Check, Flip, Notification, Ping
from hc.test import BaseTestCase from hc.test import BaseTestCase
@ -33,6 +33,18 @@ class MetricsTestCase(BaseTestCase):
doc = r.json() doc = r.json()
self.assertEqual(doc["max_ping_id"], last_ping.id) self.assertEqual(doc["max_ping_id"], last_ping.id)
def test_it_returns_max_notification_id(self):
check = Check.objects.create(project=self.project, status="down")
channel = Channel.objects.create(project=self.project, kind="email")
Notification.objects.create(owner=check, channel=channel, check_status="down")
last_notification = Notification.objects.last()
r = self.client.get(self.url, HTTP_X_METRICS_KEY="foo")
self.assertEqual(r.status_code, 200)
doc = r.json()
self.assertEqual(doc["max_notification_id"], last_notification.id)
@override_settings(METRICS_KEY=None) @override_settings(METRICS_KEY=None)
def test_it_handles_unset_metrics_key(self): def test_it_handles_unset_metrics_key(self):
r = self.client.get(self.url, HTTP_X_METRICS_KEY="foo") r = self.client.get(self.url, HTTP_X_METRICS_KEY="foo")


+ 6
- 4
hc/api/views.py View File

@ -329,10 +329,12 @@ def metrics(request):
if key != settings.METRICS_KEY: if key != settings.METRICS_KEY:
return HttpResponseForbidden() return HttpResponseForbidden()
doc = {}
doc["ts"] = int(time.time())
doc["max_ping_id"] = Ping.objects.values_list("id", flat=True).last()
doc["num_unprocessed_flips"] = Flip.objects.filter(processed__isnull=True).count()
doc = {
"ts": int(time.time()),
"max_ping_id": Ping.objects.values_list("id", flat=True).last(),
"max_notification_id": Notification.objects.values_list("id", flat=True).last(),
"num_unprocessed_flips": Flip.objects.filter(processed__isnull=True).count(),
}
return JsonResponse(doc) return JsonResponse(doc)


Loading…
Cancel
Save