From 5df4096660deb6ce385fc1b8b5999b2e3b1ce88a Mon Sep 17 00:00:00 2001 From: Matthew Jones Date: Tue, 22 Nov 2016 09:31:17 -0500 Subject: [PATCH] Make websocket events more informative * Make sure we always populate workflow information when relevant to job status changes. * Include detail about workflow job node --- awx/main/models/inventory.py | 5 +++-- awx/main/models/projects.py | 4 +++- awx/main/models/unified_jobs.py | 13 +++++++++++-- 3 files changed, 17 insertions(+), 5 deletions(-) diff --git a/awx/main/models/inventory.py b/awx/main/models/inventory.py index cae2d10cfb..f8ca4abe1d 100644 --- a/awx/main/models/inventory.py +++ b/awx/main/models/inventory.py @@ -1230,9 +1230,10 @@ class InventoryUpdate(UnifiedJob, InventorySourceOptions, JobNotificationMixin): return 'DEFAULT_INVENTORY_UPDATE_TIMEOUT' def websocket_emit_data(self): + websocket_data = super(InventoryUpdate, self).websocket_emit_data() if self.inventory_source.group is not None: - return dict(group_id=self.inventory_source.group.id) - return {} + websocket_data.update(dict(group_id=self.inventory_source.group.id)) + return websocket_data def save(self, *args, **kwargs): update_fields = kwargs.get('update_fields', []) diff --git a/awx/main/models/projects.py b/awx/main/models/projects.py index ee65791e6a..a672ea4a7b 100644 --- a/awx/main/models/projects.py +++ b/awx/main/models/projects.py @@ -435,7 +435,9 @@ class ProjectUpdate(UnifiedJob, ProjectOptions, JobNotificationMixin): return False def websocket_emit_data(self): - return dict(project_id=self.project.id) + websocket_data = super(ProjectUpdate, self).websocket_emit_data() + websocket_data.update(dict(project_id=self.project.id)) + return websocket_data @property def task_impact(self): diff --git a/awx/main/models/unified_jobs.py b/awx/main/models/unified_jobs.py index dd892922ad..65ab501913 100644 --- a/awx/main/models/unified_jobs.py +++ b/awx/main/models/unified_jobs.py @@ -784,6 +784,12 @@ class UnifiedJob(PolymorphicModel, PasswordFieldsModel, CommonModelNameNotUnique return self.unified_job_node.workflow_job.pk return None + @property + def workflow_node_id(self): + if self.spawned_by_workflow: + return self.unified_job_node.pk + return None + @property def celery_task(self): try: @@ -808,7 +814,11 @@ class UnifiedJob(PolymorphicModel, PasswordFieldsModel, CommonModelNameNotUnique def websocket_emit_data(self): ''' Return extra data that should be included when submitting data to the browser over the websocket connection ''' - return {'workflow_job_id': self.workflow_job_id} + websocket_data = dict() + if self.spawned_by_workflow: + websocket_data.update(dict(workflow_job_id=self.workflow_job_id, + workflow_node_id=self.workflow_node_id)) + return websocket_data def websocket_emit_status(self, status): status_data = dict(unified_job_id=self.id, status=status) @@ -820,7 +830,6 @@ class UnifiedJob(PolymorphicModel, PasswordFieldsModel, CommonModelNameNotUnique status_data['group_name'] = "workflow_events" emit_channel_notification('workflow_events-' + str(self.workflow_job_id), status_data) - def notification_data(self): return dict(id=self.id, name=self.name,