8
0
Fork 0
mirror of https://gitlab.federez.net/re2o/re2o synced 2024-05-16 23:56:12 +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)
hostname = serializers.CharField(source='name', read_only=True)
extension = serializers.CharField(source='extension.name', read_only=True)
class Meta:
model = machines.Domain
fields = ('alias', 'hostname')
fields = ('alias', 'hostname', 'extension')
class DNSZonesSerializer(serializers.ModelSerializer):

View file

@ -491,7 +491,14 @@ class DNSZonesView(generics.ListAPIView):
"""Exposes the detailed information about each extension (hostnames,
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

View file

@ -563,13 +563,22 @@ class Extension(RevMixin, AclMixin, models.Model):
return entry
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):
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):
return Domain.objects.filter(extension=self).filter(cname__isnull=False)
return (Domain.objects
.filter(extension=self)
.filter(cname__isnull=False)
.prefetch_related('cname'))
@staticmethod
def can_use_all(user_request, *_args, **_kwargs):