8
0
Fork 0
mirror of https://gitlab2.federez.net/re2o/re2o synced 2024-11-30 08:32:26 +00:00

Optimisation des requètes sql pour récupérer l'ensemble des machines (divise le temps de traitement par 10...)

This commit is contained in:
Gabriel Detraz 2017-05-27 01:40:22 +02:00 committed by root
parent 22dcad7599
commit 4f0795a1ce
2 changed files with 10 additions and 6 deletions

View file

@ -31,7 +31,6 @@ from django.utils.functional import cached_property
from re2o.settings import MAIN_EXTENSION from re2o.settings import MAIN_EXTENSION
class Machine(models.Model): class Machine(models.Model):
PRETTY_NAME = "Machine" PRETTY_NAME = "Machine"

View file

@ -47,6 +47,7 @@ from .forms import NewMachineForm, EditMachineForm, EditInterfaceForm, AddInterf
from .forms import IpTypeForm, DelIpTypeForm, AliasForm, DelAliasForm, NsForm, DelNsForm, MxForm, DelMxForm from .forms import IpTypeForm, DelIpTypeForm, AliasForm, DelAliasForm, NsForm, DelNsForm, MxForm, DelMxForm
from .models import IpType, Machine, Interface, IpList, MachineType, Extension, Mx, Ns, Domain from .models import IpType, Machine, Interface, IpList, MachineType, Extension, Mx, Ns, Domain
from users.models import User from users.models import User
from users.models import all_has_access
from re2o.settings import PAGINATION_NUMBER, PAGINATION_LARGE_NUMBER, MAX_INTERFACES, MAX_ALIAS from re2o.settings import PAGINATION_NUMBER, PAGINATION_LARGE_NUMBER, MAX_INTERFACES, MAX_ALIAS
def full_domain_validator(request, domain): def full_domain_validator(request, domain):
@ -63,6 +64,14 @@ def full_domain_validator(request, domain):
return False return False
return True return True
def all_active_interfaces():
"""Renvoie l'ensemble des machines autorisées à sortir sur internet """
return Interface.objects.filter(machine__in=Machine.objects.filter(user__in=all_has_access()).filter(active=True)).select_related('domain').select_related('machine').select_related('type').select_related('ipv4').select_related('domain__extension').select_related('ipv4__ip_type').distinct()
def all_active_assigned_interfaces():
""" Renvoie l'ensemble des machines qui ont une ipv4 assignées et disposant de l'accès internet"""
return all_active_interfaces().filter(ipv4__isnull=False)
def unassign_ips(user): def unassign_ips(user):
machines = user.user_interfaces() machines = user.user_interfaces()
for machine in machines: for machine in machines:
@ -726,11 +735,7 @@ class JSONResponse(HttpResponse):
@login_required @login_required
@permission_required('serveur') @permission_required('serveur')
def mac_ip_list(request): def mac_ip_list(request):
interf = Interface.objects.select_related('ipv4').select_related('domain__extension').all() interfaces = all_active_assigned_interfaces()
interfaces = list(filter(
lambda interface: interface.ipv4 and interface.is_active,
interf
))
seria = InterfaceSerializer(interfaces, many=True) seria = InterfaceSerializer(interfaces, many=True)
return seria.data return seria.data