Browse Source

DNS endpoint SQL optimization

better_user
Maël Kervella 8 years ago
parent
commit
a9cfc9aebc
  1. 3
      api/serializers.py
  2. 9
      api/views.py
  3. 15
      machines/models.py

3
api/serializers.py

@ -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):

9
api/views.py

@ -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

15
machines/models.py

@ -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):

Loading…
Cancel
Save