mirror of
https://github.com/ansible/awx.git
synced 2026-05-06 17:07:36 -02:30
Merge pull request #4213 from cchurch/optimize-job-events
Optimize query for job events to speed up loading job details page.
This commit is contained in:
@@ -2504,16 +2504,15 @@ class JobEventSerializer(BaseSerializer):
|
|||||||
def get_related(self, obj):
|
def get_related(self, obj):
|
||||||
res = super(JobEventSerializer, self).get_related(obj)
|
res = super(JobEventSerializer, self).get_related(obj)
|
||||||
res.update(dict(
|
res.update(dict(
|
||||||
job = reverse('api:job_detail', args=(obj.job.pk,)),
|
job = reverse('api:job_detail', args=(obj.job_id,)),
|
||||||
#children = reverse('api:job_event_children_list', args=(obj.pk,)),
|
|
||||||
))
|
))
|
||||||
if obj.parent:
|
if obj.parent_id:
|
||||||
res['parent'] = reverse('api:job_event_detail', args=(obj.parent.pk,))
|
res['parent'] = reverse('api:job_event_detail', args=(obj.parent_id,))
|
||||||
if obj.children.count():
|
if obj.children.exists():
|
||||||
res['children'] = reverse('api:job_event_children_list', args=(obj.pk,))
|
res['children'] = reverse('api:job_event_children_list', args=(obj.pk,))
|
||||||
if obj.host:
|
if obj.host_id:
|
||||||
res['host'] = reverse('api:host_detail', args=(obj.host.pk,))
|
res['host'] = reverse('api:host_detail', args=(obj.host_id,))
|
||||||
if obj.hosts.count():
|
if obj.hosts.exists():
|
||||||
res['hosts'] = reverse('api:job_event_hosts_list', args=(obj.pk,))
|
res['hosts'] = reverse('api:job_event_hosts_list', args=(obj.pk,))
|
||||||
return res
|
return res
|
||||||
|
|
||||||
|
|||||||
@@ -3504,6 +3504,17 @@ class JobJobEventsList(BaseJobEventsList):
|
|||||||
|
|
||||||
parent_model = Job
|
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()
|
||||||
|
host_qs = self.request.user.get_queryset(Host)
|
||||||
|
return qs.filter(Q(host__isnull=True) | Q(host__in=host_qs))
|
||||||
|
|
||||||
|
|
||||||
class JobJobPlaysList(BaseJobEventsList):
|
class JobJobPlaysList(BaseJobEventsList):
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user