8
0
Fork 0
mirror of https://gitlab2.federez.net/re2o/re2o synced 2024-11-22 11:23:10 +00:00

DNS endpoint SQL optimization

This commit is contained in:
Maël Kervella 2018-06-23 21:19:11 +00:00
parent 67b492b17d
commit a9cfc9aebc
3 changed files with 22 additions and 5 deletions

View file

@ -701,10 +701,11 @@ class CNAMERecordSerializer(serializers.ModelSerializer):
""" """
alias = serializers.CharField(source='cname.name', read_only=True) alias = serializers.CharField(source='cname.name', read_only=True)
hostname = serializers.CharField(source='name', read_only=True) hostname = serializers.CharField(source='name', read_only=True)
extension = serializers.CharField(source='extension.name', read_only=True)
class Meta: class Meta:
model = machines.Domain model = machines.Domain
fields = ('alias', 'hostname') fields = ('alias', 'hostname', 'extension')
class DNSZonesSerializer(serializers.ModelSerializer): class DNSZonesSerializer(serializers.ModelSerializer):

View file

@ -491,7 +491,14 @@ class DNSZonesView(generics.ListAPIView):
"""Exposes the detailed information about each extension (hostnames, """Exposes the detailed information about each extension (hostnames,
IPs, DNS records, etc.) in order to build the DNS zone files. IPs, DNS records, etc.) in order to build the DNS zone files.
""" """
queryset = machines.Extension.objects.all() queryset = (machines.Extension.objects
.prefetch_related('soa')
.prefetch_related('ns_set').prefetch_related('ns_set__ns')
.prefetch_related('origin')
.prefetch_related('mx_set').prefetch_related('mx_set__name')
.prefetch_related('txt_set')
.prefetch_related('srv_set').prefetch_related('srv_set__target')
.all())
serializer_class = serializers.DNSZonesSerializer serializer_class = serializers.DNSZonesSerializer

View file

@ -563,13 +563,22 @@ class Extension(RevMixin, AclMixin, models.Model):
return entry return entry
def get_associated_a_records(self): def get_associated_a_records(self):
return Interface.objects.filter(type__ip_type__extension=self).filter(ipv4__isnull=False) return (Interface.objects
.filter(type__ip_type__extension=self)
.filter(ipv4__isnull=False)
.prefetch_related('domain')
.prefetch_related('ipv4'))
def get_associated_aaaa_records(self): def get_associated_aaaa_records(self):
return Interface.objects.filter(type__ip_type__extension=self) return (Interface.objects
.filter(type__ip_type__extension=self)
.prefetch_related('domain'))
def get_associated_cname_records(self): def get_associated_cname_records(self):
return Domain.objects.filter(extension=self).filter(cname__isnull=False) return (Domain.objects
.filter(extension=self)
.filter(cname__isnull=False)
.prefetch_related('cname'))
@staticmethod @staticmethod
def can_use_all(user_request, *_args, **_kwargs): def can_use_all(user_request, *_args, **_kwargs):