Merge pull request #4974 from AlanCoding/job_event_need_for_speed

job_event speedups, async filter removed, RBAC changes
This commit is contained in:
Alan Rominger 2017-01-27 11:23:25 -05:00 committed by GitHub
commit 6d590ca985
3 changed files with 11 additions and 16 deletions

View File

@ -3487,13 +3487,10 @@ class JobJobEventsList(BaseJobEventsList):
def get_queryset(self):
job = self.get_parent_object()
self.check_parent_access(job)
qs = job.job_events.all()
qs = job.job_events
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))
return qs.all()
class AdHocCommandList(ListCreateAPIView):

View File

@ -1797,21 +1797,15 @@ class JobEventAccess(BaseAccess):
model = JobEvent
def get_queryset(self):
qs = self.model.objects.all()
qs = qs.select_related('job', 'job__job_template', 'host', 'parent')
qs = qs.prefetch_related('hosts', 'children')
# Filter certain "internal" events generated by async polling.
qs = qs.exclude(event__in=('runner_on_ok', 'runner_on_failed'),
event_data__icontains='"ansible_job_id": "',
event_data__contains='"module_name": "async_status"')
qs = self.model.objects
qs = qs.prefetch_related('hosts', 'children', 'job__job_template', 'host')
if self.user.is_superuser or self.user.is_system_auditor:
return qs.all()
job_qs = self.user.get_queryset(Job)
host_qs = self.user.get_queryset(Host)
return qs.filter(Q(host__isnull=True) | Q(host__in=host_qs), job__in=job_qs)
return qs.filter(
Q(host__inventory__in=Inventory.accessible_pk_qs(self.user, 'read_role')) |
Q(job__job_template__in=JobTemplate.accessible_pk_qs(self.user, 'read_role')))
def can_add(self, data):
return False

View File

@ -37,6 +37,10 @@ class ResourceMixin(models.Model):
'''
return ResourceMixin._accessible_objects(cls, accessor, role_field)
@classmethod
def accessible_pk_qs(cls, accessor, role_field):
return ResourceMixin._accessible_pk_qs(cls, accessor, role_field)
@staticmethod
def _accessible_pk_qs(cls, accessor, role_field, content_types=None):
if type(accessor) == User: