From 1ce81f9640c061c3105779af1941e7ec17b20082 Mon Sep 17 00:00:00 2001 From: Chris Church Date: Thu, 1 Dec 2016 18:33:05 -0500 Subject: [PATCH 1/2] Optimize query for job events for a single job to speed up loading job details page. --- awx/api/serializers.py | 15 +++++++-------- awx/api/views.py | 10 ++++++++++ 2 files changed, 17 insertions(+), 8 deletions(-) diff --git a/awx/api/serializers.py b/awx/api/serializers.py index 490651798b..42d4cf3404 100644 --- a/awx/api/serializers.py +++ b/awx/api/serializers.py @@ -2490,16 +2490,15 @@ class JobEventSerializer(BaseSerializer): def get_related(self, obj): res = super(JobEventSerializer, self).get_related(obj) res.update(dict( - job = reverse('api:job_detail', args=(obj.job.pk,)), - #children = reverse('api:job_event_children_list', args=(obj.pk,)), + job = reverse('api:job_detail', args=(obj.job_id,)), )) - if obj.parent: - res['parent'] = reverse('api:job_event_detail', args=(obj.parent.pk,)) - if obj.children.count(): + if obj.parent_id: + res['parent'] = reverse('api:job_event_detail', args=(obj.parent_id,)) + if obj.children.exists(): res['children'] = reverse('api:job_event_children_list', args=(obj.pk,)) - if obj.host: - res['host'] = reverse('api:host_detail', args=(obj.host.pk,)) - if obj.hosts.count(): + if obj.host_id: + res['host'] = reverse('api:host_detail', args=(obj.host_id,)) + if obj.hosts.exists(): res['hosts'] = reverse('api:job_event_hosts_list', args=(obj.pk,)) return res diff --git a/awx/api/views.py b/awx/api/views.py index de88b44518..127c5bb34b 100644 --- a/awx/api/views.py +++ b/awx/api/views.py @@ -3502,6 +3502,16 @@ class JobJobEventsList(BaseJobEventsList): parent_model = Job + def get_queryset(self): + job = self.get_parent_object() + self.check_parent_access(job) + qs = job.job_events.all() + qs = qs.select_related('host') + qs = qs.prefetch_related('hosts', 'children') + if self.request.user.is_superuser or self.request.user.is_system_auditor: + return qs.all() + return qs.filter(Q(host__isnull=True) | Q(host__in=host_qs)) + class JobJobPlaysList(BaseJobEventsList): From 2e7e424109f65881463acfca4c2982708a09cdab Mon Sep 17 00:00:00 2001 From: Chris Church Date: Fri, 2 Dec 2016 16:14:16 -0500 Subject: [PATCH 2/2] Add missing host_qs. --- awx/api/views.py | 1 + 1 file changed, 1 insertion(+) diff --git a/awx/api/views.py b/awx/api/views.py index 127c5bb34b..576b410926 100644 --- a/awx/api/views.py +++ b/awx/api/views.py @@ -3510,6 +3510,7 @@ class JobJobEventsList(BaseJobEventsList): qs = qs.prefetch_related('hosts', 'children') if self.request.user.is_superuser or self.request.user.is_system_auditor: return qs.all() + host_qs = self.request.user.get_queryset(Host) return qs.filter(Q(host__isnull=True) | Q(host__in=host_qs))