send and subcribe to summary events for all new events

This commit is contained in:
Ryan Petrello
2018-01-02 12:09:13 -05:00
parent 2bd656e61d
commit c6b6a3ad89
8 changed files with 29 additions and 16 deletions

View File

@@ -25,6 +25,7 @@ from django.core.cache import cache as django_cache
# AWX # AWX
from awx.main.models import * # noqa from awx.main.models import * # noqa
from awx.main.consumers import emit_channel_notification
logger = logging.getLogger('awx.main.commands.run_callback_receiver') logger = logging.getLogger('awx.main.commands.run_callback_receiver')
@@ -159,6 +160,17 @@ class CallbackBrokerWorker(ConsumerMixin):
job_identifier = body[key] job_identifier = body[key]
break break
if body.get('event') == 'EOF':
# EOF events are sent when stdout for the running task is
# closed. don't actually persist them to the database; we
# just use them to report `summary` websocket events as an
# approximation for when a job is "done"
emit_channel_notification(
'jobs-summary',
dict(group_name='jobs', unified_job_id=job_identifier)
)
continue
retries = 0 retries = 0
while retries <= self.MAX_RETRIES: while retries <= self.MAX_RETRIES:
try: try:

View File

@@ -9,7 +9,6 @@ from django.utils.translation import ugettext_lazy as _
from django.utils.encoding import force_text from django.utils.encoding import force_text
from awx.api.versioning import reverse from awx.api.versioning import reverse
from awx.main.consumers import emit_channel_notification
from awx.main.fields import JSONField from awx.main.fields import JSONField
from awx.main.models.base import CreatedModifiedModel from awx.main.models.base import CreatedModifiedModel
from awx.main.utils import ignore_inventory_computed_fields from awx.main.utils import ignore_inventory_computed_fields
@@ -361,8 +360,6 @@ class BasePlaybookEvent(CreatedModifiedModel):
self._update_host_summary_from_stats(hostnames) self._update_host_summary_from_stats(hostnames)
self.job.inventory.update_computed_fields() self.job.inventory.update_computed_fields()
emit_channel_notification('jobs-summary', dict(group_name='jobs', unified_job_id=self.job.id))
class JobEvent(BasePlaybookEvent): class JobEvent(BasePlaybookEvent):

View File

@@ -878,8 +878,10 @@ class OutputEventFilter(object):
if self._buffer: if self._buffer:
self._emit_event(self._buffer) self._emit_event(self._buffer)
self._buffer = '' self._buffer = ''
self._event_callback(dict(event='EOF'))
def _emit_event(self, buffered_stdout, next_event_data=None): def _emit_event(self, buffered_stdout, next_event_data=None):
next_event_data = next_event_data or {}
if self._current_event_data: if self._current_event_data:
event_data = self._current_event_data event_data = self._current_event_data
stdout_chunks = [buffered_stdout] stdout_chunks = [buffered_stdout]

View File

@@ -216,15 +216,14 @@ export default
self.unsubscribe(state); self.unsubscribe(state);
} }
else{ else{
if(state.data && state.data.socket && state.data.socket.groups.hasOwnProperty( "job_events")){ ["job_events", "ad_hoc_command_events", "workflow_events",
state.data.socket.groups.job_events = [id]; "project_update_events", "inventory_update_events",
} "system_job_events"
if(state.data && state.data.socket && state.data.socket.groups.hasOwnProperty( "ad_hoc_command_events")){ ].forEach(function(group) {
state.data.socket.groups.ad_hoc_command_events = [id]; if(state.data && state.data.socket && state.data.socket.groups.hasOwnProperty(group)){
} state.data.socket.groups[group] = [id];
if(state.data && state.data.socket && state.data.socket.groups.hasOwnProperty( "workflow_events")){ }
state.data.socket.groups.workflow_events = [id]; });
}
self.subscribe(state); self.subscribe(state);
} }
return true; return true;

View File

@@ -19,7 +19,7 @@ export default {
jobType: 'ad_hoc_commands', jobType: 'ad_hoc_commands',
socket: { socket: {
"groups": { "groups": {
"jobs": ["status_changed"], "jobs": ["status_changed", "summary"],
"ad_hoc_command_events": [] "ad_hoc_command_events": []
} }
} }

View File

@@ -20,7 +20,8 @@ export default {
data: { data: {
socket: { socket: {
"groups":{ "groups":{
"jobs": ["status_changed"] "jobs": ["status_changed", "summary"],
"inventory_update_events": [],
} }
}, },
jobType: 'inventory_updates' jobType: 'inventory_updates'

View File

@@ -19,7 +19,8 @@ export default {
jobType: 'system_jobs', jobType: 'system_jobs',
socket: { socket: {
"groups": { "groups": {
"jobs": ["status_changed"] "jobs": ["status_changed", "summary"],
"system_job_events": [],
} }
} }
} }

View File

@@ -21,7 +21,8 @@ export default {
jobType: 'project_updates', jobType: 'project_updates',
socket: { socket: {
"groups": { "groups": {
"jobs": ["status_changed"] "jobs": ["status_changed", "summary"],
"project_update_events": [],
} }
}, },
} }