mirror of
https://github.com/ansible/awx.git
synced 2026-02-18 11:40:05 -03:30
additionaly, optimize away several per-event host lookups and changed/failed propagation lookups we've always performed these (fairly expensive) queries *on every event save* - if you're processing tens of thousands of events in short bursts, this is way too slow this commit also introduces a new command for profiling the insertion rate of events, `awx-manage callback_stats` see: https://github.com/ansible/awx/issues/5514
64 lines
1.9 KiB
Python
64 lines
1.9 KiB
Python
from unittest import mock
|
|
import pytest
|
|
|
|
from awx.main.models import Job, JobEvent
|
|
|
|
|
|
@pytest.mark.django_db
|
|
@mock.patch('awx.main.models.events.emit_event_detail')
|
|
def test_parent_changed(emit):
|
|
j = Job()
|
|
j.save()
|
|
JobEvent.create_from_data(job_id=j.pk, uuid='abc123', event='playbook_on_task_start').save()
|
|
assert JobEvent.objects.count() == 1
|
|
for e in JobEvent.objects.all():
|
|
assert e.changed is False
|
|
|
|
JobEvent.create_from_data(
|
|
job_id=j.pk,
|
|
parent_uuid='abc123',
|
|
event='runner_on_ok',
|
|
event_data={
|
|
'res': {'changed': ['localhost']}
|
|
}
|
|
).save()
|
|
# the `playbook_on_stats` event is where we update the parent changed linkage
|
|
JobEvent.create_from_data(
|
|
job_id=j.pk,
|
|
parent_uuid='abc123',
|
|
event='playbook_on_stats'
|
|
).save()
|
|
events = JobEvent.objects.filter(event__in=['playbook_on_task_start', 'runner_on_ok'])
|
|
assert events.count() == 2
|
|
for e in events.all():
|
|
assert e.changed is True
|
|
|
|
|
|
@pytest.mark.django_db
|
|
@pytest.mark.parametrize('event', JobEvent.FAILED_EVENTS)
|
|
@mock.patch('awx.main.models.events.emit_event_detail')
|
|
def test_parent_failed(emit, event):
|
|
j = Job()
|
|
j.save()
|
|
JobEvent.create_from_data(job_id=j.pk, uuid='abc123', event='playbook_on_task_start').save()
|
|
assert JobEvent.objects.count() == 1
|
|
for e in JobEvent.objects.all():
|
|
assert e.failed is False
|
|
|
|
JobEvent.create_from_data(
|
|
job_id=j.pk,
|
|
parent_uuid='abc123',
|
|
event=event
|
|
).save()
|
|
|
|
# the `playbook_on_stats` event is where we update the parent failed linkage
|
|
JobEvent.create_from_data(
|
|
job_id=j.pk,
|
|
parent_uuid='abc123',
|
|
event='playbook_on_stats'
|
|
).save()
|
|
events = JobEvent.objects.filter(event__in=['playbook_on_task_start', event])
|
|
assert events.count() == 2
|
|
for e in events.all():
|
|
assert e.failed is True
|