|
2 | 2 | from django.http import HttpResponse
|
3 | 3 | from django.template import loader
|
4 | 4 | from ping.tasks import ping
|
| 5 | +from ping.models import PingRequest, Ping |
| 6 | +from ping.serializers import PingRequestSerializer, PingSerializer |
| 7 | +from rest_framework import viewsets |
| 8 | +from rest_framework.response import Response |
5 | 9 |
|
6 | 10 |
|
7 | 11 | def index(request):
|
8 | 12 | """Ping app index view."""
|
9 |
| - if "HTTP_X_FORWARDED_FOR" in request.META: |
10 |
| - host = request.META["HTTP_X_FORWARDED_FOR"] |
11 |
| - else: |
12 |
| - host = request.META["REMOTE_ADDR"] |
| 13 | + host = request.GET.get("host") |
| 14 | + |
| 15 | + if host is None: |
| 16 | + if "HTTP_X_FORWARDED_FOR" in request.META: |
| 17 | + host = request.META["HTTP_X_FORWARDED_FOR"] |
| 18 | + else: |
| 19 | + host = request.META["REMOTE_ADDR"] |
| 20 | + |
13 | 21 | task = ping.delay(host=host)
|
14 | 22 | template = loader.get_template("ping/base.html")
|
15 | 23 | context = {"host": host, "status": task.status, "id": task, "title": "Ping"}
|
16 | 24 | return HttpResponse(template.render(context, request))
|
| 25 | + |
| 26 | + |
| 27 | +class PingRequestViewSet(viewsets.ReadOnlyModelViewSet): |
| 28 | + """Rest API View for 'list' and 'retrieving' PingRequest actions.""" |
| 29 | + |
| 30 | + queryset = PingRequest.objects.all() |
| 31 | + serializer_class = PingRequestSerializer |
| 32 | + |
| 33 | + |
| 34 | +class PingViewSet(viewsets.ViewSet): |
| 35 | + """Ping Viewset.""" |
| 36 | + |
| 37 | + def create(self, request): # pylint: disable=no-self-use |
| 38 | + """CREATE view.""" |
| 39 | + host = request.POST.get("host") |
| 40 | + |
| 41 | + if host is None: |
| 42 | + if "HTTP_X_FORWARDED_FOR" in request.META: |
| 43 | + host = request.META["HTTP_X_FORWARDED_FOR"] |
| 44 | + else: |
| 45 | + host = request.META["REMOTE_ADDR"] |
| 46 | + |
| 47 | + task = ping.delay(host=host) |
| 48 | + data = Ping(task_id=task.task_id) |
| 49 | + serializer = PingSerializer(data, context={"request": request}) |
| 50 | + return Response(serializer.data) |
0 commit comments