|
@@ -1,11 +1,15 @@
|
|
|
from django.views.generic import DetailView
|
|
|
from django.contrib.auth.mixins import LoginRequiredMixin
|
|
|
-from django.views.decorators.http import require_POST
|
|
|
+from django.views.decorators.http import require_GET, require_POST
|
|
|
from django.http import HttpResponseForbidden, HttpResponse
|
|
|
from django.conf import settings
|
|
|
from django.views.decorators.csrf import csrf_exempt
|
|
|
+from django.shortcuts import get_object_or_404
|
|
|
+from django.db import models
|
|
|
+from django.db.models.functions import Concat
|
|
|
|
|
|
-from .models import Service
|
|
|
+from djadhere.utils import get_active_filter
|
|
|
+from .models import Service, Route, IPResource, ServiceAllocation
|
|
|
from .utils.fastpinger import fastpinger_update
|
|
|
|
|
|
|
|
@@ -24,3 +28,39 @@ def fastpinger(request):
|
|
|
return HttpResponse(status=400) # Bad Request
|
|
|
stats = fastpinger_update(request.FILES['fastpinger'])
|
|
|
return HttpResponse(stats + '\n')
|
|
|
+
|
|
|
+
|
|
|
+@require_GET
|
|
|
+def routes(request, route=None):
|
|
|
+ resources = IPResource.objects.filter(category=0) # IP publics
|
|
|
+ if route:
|
|
|
+ route = get_object_or_404(Route, name=route)
|
|
|
+ resources = resources.filter(pk__in=route.get_ip())
|
|
|
+ resources = resources.annotate(
|
|
|
+ route=models.Subquery(
|
|
|
+ ServiceAllocation.objects.filter(
|
|
|
+ models.Q(resource=models.OuterRef('pk')) & get_active_filter(),
|
|
|
+ ).values('route__name')[:1],
|
|
|
+ )
|
|
|
+ )
|
|
|
+ resources = resources.annotate(
|
|
|
+ route=models.Case(
|
|
|
+ models.When(reserved=True, then=models.Value('reserved')),
|
|
|
+ models.When(route__isnull=True, then=models.Value('unused')),
|
|
|
+ default='route',
|
|
|
+ output_field=models.CharField()
|
|
|
+ )
|
|
|
+ )
|
|
|
+ resources = resources.annotate(
|
|
|
+ route=Concat('ip', models.Value(' '), 'route', output_field=models.CharField()),
|
|
|
+ )
|
|
|
+ resources = resources.annotate(
|
|
|
+ order=models.Case(
|
|
|
+ models.When(ip__startswith='91.224', then=1),
|
|
|
+ models.When(ip__startswith='89.234', then=2),
|
|
|
+ models.When(ip__startswith='185.119', then=3),
|
|
|
+ )
|
|
|
+ )
|
|
|
+ resources = resources.order_by('order', 'ip')
|
|
|
+ content = '\n'.join(resources.values_list('route', flat=True)) + '\n'
|
|
|
+ return HttpResponse(content, content_type='text/plain')
|