Browse Source

Merge branch 'foozmeat-issue-82'

pull/90/head
Pēteris Caune 8 years ago
parent
commit
1c5182278e
2 changed files with 36 additions and 1 deletions
  1. +26
    -1
      hc/api/views.py
  2. +10
    -0
      templates/front/docs_api.html

+ 26
- 1
hc/api/views.py View File

@ -1,5 +1,6 @@
from datetime import timedelta as td
from django.core.exceptions import FieldError
from django.db.models import F
from django.http import HttpResponse, HttpResponseBadRequest, JsonResponse
from django.utils import timezone
@ -55,8 +56,32 @@ def checks(request):
return JsonResponse(doc)
elif request.method == "POST":
unique_fields = request.json.get("unique", [])
name = str(request.json.get("name", ""))
if len(unique_fields) > 0:
existing_checks = Check.objects.filter(user=request.user)
for unique_field in unique_fields:
field_value = request.json.get(unique_field)
if unique_field == "timeout" or unique_field == "grace":
field_value = td(seconds=field_value)
try:
existing_checks = existing_checks.filter(**{unique_field: field_value})
except FieldError:
return HttpResponse(status=400)
if existing_checks.count() > 0:
# There might be more than one check with the same name since name
# uniqueness isn't enforced in the model
return JsonResponse(existing_checks.first().to_dict(), status=200)
check = Check(user=request.user)
check.name = str(request.json.get("name", ""))
check.name = name
check.tags = str(request.json.get("tags", ""))
if "timeout" in request.json:
check.timeout = td(seconds=request.json["timeout"])


+ 10
- 0
templates/front/docs_api.html View File

@ -127,6 +127,16 @@ The response may contain a JSON document with additional data.
to automatically assign all existing notification channels.</p>
</td>
</tr>
<tr>
<th>unique</th>
<td>
<p>array of strings, optional, default value: [].</p>
<p>Tells the API to only create a new check if the combination of fields
in <code>unqiue</code> is unique. The fields currently supported are
name, tags, timeout, and grace. If a new check is created the API returns
a 201 code, otherwise it returns a 200 code.</p>
</td>
</tr>
</table>
<h3 class="api-section">Example Request</h3>


Loading…
Cancel
Save