More data in API responses.

This commit is contained in:
Pēteris Caune 2016-07-09 17:06:00 +03:00
parent 760b5b4fdb
commit a97f23190e
9 changed files with 88 additions and 38 deletions

View File

@ -107,6 +107,25 @@ class Check(models.Model):
def tags_list(self): def tags_list(self):
return [t.strip() for t in self.tags.split(" ") if t.strip()] return [t.strip() for t in self.tags.split(" ") if t.strip()]
def to_dict(self):
result = {
"name": self.name,
"ping_url": self.url(),
"tags": self.tags,
"timeout": int(self.timeout.total_seconds()),
"grace": int(self.grace.total_seconds()),
"n_pings": self.n_pings
}
if self.last_ping:
result["last_ping"] = self.last_ping.isoformat()
result["next_ping"] = (self.last_ping + self.timeout).isoformat()
else:
result["last_ping"] = None
result["next_ping"] = None
return result
class Ping(models.Model): class Ping(models.Model):
n = models.IntegerField(null=True) n = models.IntegerField(null=True)

View File

@ -30,7 +30,13 @@ class CreateCheckTestCase(BaseTestCase):
}) })
self.assertEqual(r.status_code, 201) self.assertEqual(r.status_code, 201)
self.assertTrue("ping_url" in r.json())
doc = r.json()
assert "ping_url" in doc
self.assertEqual(doc["name"], "Foo")
self.assertEqual(doc["tags"], "bar,baz")
self.assertEqual(doc["last_ping"], None)
self.assertEqual(doc["n_pings"], 0)
self.assertEqual(Check.objects.count(), 1) self.assertEqual(Check.objects.count(), 1)
check = Check.objects.get() check = Check.objects.get()

View File

@ -1,5 +1,6 @@
import json import json
from datetime import timedelta as td from datetime import timedelta as td
from django.utils.timezone import now
from hc.api.models import Check from hc.api.models import Check
from hc.test import BaseTestCase from hc.test import BaseTestCase
@ -10,9 +11,13 @@ class ListChecksTestCase(BaseTestCase):
def setUp(self): def setUp(self):
super(ListChecksTestCase, self).setUp() super(ListChecksTestCase, self).setUp()
self.now = now()
self.a1 = Check(user=self.alice, name="Alice 1") self.a1 = Check(user=self.alice, name="Alice 1")
self.a1.timeout = td(seconds=3600) self.a1.timeout = td(seconds=3600)
self.a1.grace = td(seconds=900) self.a1.grace = td(seconds=900)
self.a1.last_ping = self.now
self.a1.n_pings = 1
self.a1.save() self.a1.save()
self.a2 = Check(user=self.alice, name="Alice 2") self.a2 = Check(user=self.alice, name="Alice 2")
@ -36,6 +41,11 @@ class ListChecksTestCase(BaseTestCase):
self.assertEqual(checks["Alice 1"]["timeout"], 3600) self.assertEqual(checks["Alice 1"]["timeout"], 3600)
self.assertEqual(checks["Alice 1"]["grace"], 900) self.assertEqual(checks["Alice 1"]["grace"], 900)
self.assertEqual(checks["Alice 1"]["ping_url"], self.a1.url()) self.assertEqual(checks["Alice 1"]["ping_url"], self.a1.url())
self.assertEqual(checks["Alice 1"]["last_ping"], self.now.isoformat())
self.assertEqual(checks["Alice 1"]["n_pings"], 1)
next_ping = self.now + td(seconds=3600)
self.assertEqual(checks["Alice 1"]["next_ping"], next_ping.isoformat())
self.assertEqual(checks["Alice 2"]["timeout"], 86400) self.assertEqual(checks["Alice 2"]["timeout"], 86400)
self.assertEqual(checks["Alice 2"]["grace"], 3600) self.assertEqual(checks["Alice 2"]["grace"], 3600)

View File

@ -50,17 +50,10 @@ def ping(request, code):
@validate_json(schemas.check) @validate_json(schemas.check)
def checks(request): def checks(request):
if request.method == "GET": if request.method == "GET":
code = 200 q = Check.objects.filter(user=request.user)
response = { doc = {"checks": [check.to_dict() for check in q]}
"checks": [{ return JsonResponse(doc)
"name": check.name,
"ping_url": check.url(),
"tags": check.tags,
"timeout": int(check.timeout.total_seconds()),
"grace": int(check.grace.total_seconds()),
# "channels": check.channels,
} for check in Check.objects.filter(user=request.user)]
}
elif request.method == "POST": elif request.method == "POST":
check = Check(user=request.user) check = Check(user=request.user)
check.name = str(request.json.get("name", "")) check.name = str(request.json.get("name", ""))
@ -77,14 +70,10 @@ def checks(request):
if request.json.get("channels") == "*": if request.json.get("channels") == "*":
check.assign_all_channels() check.assign_all_channels()
code = 201 return JsonResponse(check.to_dict(), status=201)
response = {
"ping_url": check.url()
}
else:
return HttpResponse(status=405)
return JsonResponse(response, status=code) # If request is neither GET nor POST, return "405 Method not allowed"
return HttpResponse(status=405)
@never_cache @never_cache

View File

@ -400,7 +400,7 @@ def add_slack_btn(request):
channel.value = result.text channel.value = result.text
channel.save() channel.save()
channel.assign_all_checks() channel.assign_all_checks()
messages.info(request, "The Slack integration has been added!") messages.success(request, "The Slack integration has been added!")
else: else:
s = doc.get("error") s = doc.get("error")
messages.warning(request, "Error message from slack: %s" % s) messages.warning(request, "Error message from slack: %s" % s)

View File

@ -1,4 +1,11 @@
<div class="highlight"><pre><span></span><span class="p">{</span> <div class="highlight"><pre><span></span><span class="p">{</span>
<span class="nt">&quot;ping_url&quot;</span><span class="p">:</span> <span class="s2">&quot;{{ PING_ENDPOINT }}20f2d3d0-efe4-4cc1-a114-a186a225de50&quot;</span> <span class="nt">&quot;grace&quot;</span><span class="p">:</span> <span class="mi">60</span><span class="p">,</span>
<span class="nt">&quot;last_ping&quot;</span><span class="p">:</span> <span class="kc">null</span><span class="p">,</span>
<span class="nt">&quot;n_pings&quot;</span><span class="p">:</span> <span class="mi">0</span><span class="p">,</span>
<span class="nt">&quot;name&quot;</span><span class="p">:</span> <span class="s2">&quot;Backups&quot;</span><span class="p">,</span>
<span class="nt">&quot;next_ping&quot;</span><span class="p">:</span> <span class="kc">null</span><span class="p">,</span>
<span class="nt">&quot;ping_url&quot;</span><span class="p">:</span> <span class="s2">&quot;{{ PING_ENDPOINT }}0c8983c9-9d73-446f-adb5-0641fdacc9d4&quot;</span><span class="p">,</span>
<span class="nt">&quot;tags&quot;</span><span class="p">:</span> <span class="s2">&quot;prod www&quot;</span><span class="p">,</span>
<span class="nt">&quot;timeout&quot;</span><span class="p">:</span> <span class="mi">3600</span>
<span class="p">}</span> <span class="p">}</span>
</pre></div> </pre></div>

View File

@ -1,3 +1,10 @@
{ {
"ping_url": "PING_ENDPOINT20f2d3d0-efe4-4cc1-a114-a186a225de50" "grace": 60,
"last_ping": null,
"n_pings": 0,
"name": "Backups",
"next_ping": null,
"ping_url": "PING_ENDPOINT0c8983c9-9d73-446f-adb5-0641fdacc9d4",
"tags": "prod www",
"timeout": 3600
} }

View File

@ -1,18 +1,24 @@
<div class="highlight"><pre><span></span><span class="p">{</span> <div class="highlight"><pre><span></span><span class="p">{</span>
<span class="nt">&quot;checks&quot;</span><span class="p">:</span> <span class="p">[</span> <span class="nt">&quot;checks&quot;</span><span class="p">:</span> <span class="p">[</span>
<span class="p">{</span> <span class="p">{</span>
<span class="nt">&quot;ping_url&quot;</span><span class="p">:</span> <span class="s2">&quot;{{ PING_ENDPOINT }}848f3002-266b-482a-89ad-9d66a11aa2fb&quot;</span><span class="p">,</span>
<span class="nt">&quot;grace&quot;</span><span class="p">:</span> <span class="mi">900</span><span class="p">,</span> <span class="nt">&quot;grace&quot;</span><span class="p">:</span> <span class="mi">900</span><span class="p">,</span>
<span class="nt">&quot;name&quot;</span><span class="p">:</span> <span class="s2">&quot;API test 1&quot;</span><span class="p">,</span> <span class="nt">&quot;last_ping&quot;</span><span class="p">:</span> <span class="s2">&quot;2016-07-09T13:58:43.366568+00:00&quot;</span><span class="p">,</span>
<span class="nt">&quot;timeout&quot;</span><span class="p">:</span> <span class="mi">3600</span><span class="p">,</span> <span class="nt">&quot;n_pings&quot;</span><span class="p">:</span> <span class="mi">1</span><span class="p">,</span>
<span class="nt">&quot;tags&quot;</span><span class="p">:</span> <span class="s2">&quot;foo&quot;</span> <span class="nt">&quot;name&quot;</span><span class="p">:</span> <span class="s2">&quot;Api test 1&quot;</span><span class="p">,</span>
<span class="nt">&quot;next_ping&quot;</span><span class="p">:</span> <span class="s2">&quot;2016-07-09T14:58:43.366568+00:00&quot;</span><span class="p">,</span>
<span class="nt">&quot;ping_url&quot;</span><span class="p">:</span> <span class="s2">&quot;{{ PING_ENDPOINT }}25c55e7c-8092-4d21-ad06-7dacfbb6fc10&quot;</span><span class="p">,</span>
<span class="nt">&quot;tags&quot;</span><span class="p">:</span> <span class="s2">&quot;foo&quot;</span><span class="p">,</span>
<span class="nt">&quot;timeout&quot;</span><span class="p">:</span> <span class="mi">3600</span>
<span class="p">},</span> <span class="p">},</span>
<span class="p">{</span> <span class="p">{</span>
<span class="nt">&quot;ping_url&quot;</span><span class="p">:</span> <span class="s2">&quot;{{ PING_ENDPOINT }}20324f81-5966-4e75-9734-8440df52ed75&quot;</span><span class="p">,</span>
<span class="nt">&quot;grace&quot;</span><span class="p">:</span> <span class="mi">60</span><span class="p">,</span> <span class="nt">&quot;grace&quot;</span><span class="p">:</span> <span class="mi">60</span><span class="p">,</span>
<span class="nt">&quot;name&quot;</span><span class="p">:</span> <span class="s2">&quot;API test 2&quot;</span><span class="p">,</span> <span class="nt">&quot;last_ping&quot;</span><span class="p">:</span> <span class="kc">null</span><span class="p">,</span>
<span class="nt">&quot;timeout&quot;</span><span class="p">:</span> <span class="mi">60</span><span class="p">,</span> <span class="nt">&quot;n_pings&quot;</span><span class="p">:</span> <span class="mi">0</span><span class="p">,</span>
<span class="nt">&quot;tags&quot;</span><span class="p">:</span> <span class="s2">&quot;bar,baz&quot;</span> <span class="nt">&quot;name&quot;</span><span class="p">:</span> <span class="s2">&quot;Api test 2&quot;</span><span class="p">,</span>
<span class="nt">&quot;next_ping&quot;</span><span class="p">:</span> <span class="kc">null</span><span class="p">,</span>
<span class="nt">&quot;ping_url&quot;</span><span class="p">:</span> <span class="s2">&quot;{{ PING_ENDPOINT }}7e1b6e61-b16f-4671-bae3-e3233edd1b5e&quot;</span><span class="p">,</span>
<span class="nt">&quot;tags&quot;</span><span class="p">:</span> <span class="s2">&quot;bar baz&quot;</span><span class="p">,</span>
<span class="nt">&quot;timeout&quot;</span><span class="p">:</span> <span class="mi">60</span>
<span class="p">}</span> <span class="p">}</span>
<span class="p">]</span> <span class="p">]</span>
<span class="p">}</span> <span class="p">}</span>

View File

@ -1,18 +1,24 @@
{ {
"checks": [ "checks": [
{ {
"ping_url": "PING_ENDPOINT848f3002-266b-482a-89ad-9d66a11aa2fb",
"grace": 900, "grace": 900,
"name": "API test 1", "last_ping": "2016-07-09T13:58:43.366568+00:00",
"timeout": 3600, "n_pings": 1,
"tags": "foo" "name": "Api test 1",
"next_ping": "2016-07-09T14:58:43.366568+00:00",
"ping_url": "PING_ENDPOINT25c55e7c-8092-4d21-ad06-7dacfbb6fc10",
"tags": "foo",
"timeout": 3600
}, },
{ {
"ping_url": "PING_ENDPOINT20324f81-5966-4e75-9734-8440df52ed75",
"grace": 60, "grace": 60,
"name": "API test 2", "last_ping": null,
"timeout": 60, "n_pings": 0,
"tags": "bar,baz" "name": "Api test 2",
"next_ping": null,
"ping_url": "PING_ENDPOINT7e1b6e61-b16f-4671-bae3-e3233edd1b5e",
"tags": "bar baz",
"timeout": 60
} }
] ]
} }