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
No known key found for this signature in database
GPG Key ID: F2AA5F2122351777
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
from awx.main.models import * # noqa
from awx.main.consumers import emit_channel_notification
logger = logging.getLogger('awx.main.commands.run_callback_receiver')
@ -159,6 +160,17 @@ class CallbackBrokerWorker(ConsumerMixin):
job_identifier = body[key]
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
while retries <= self.MAX_RETRIES:
try:

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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