mirror of
https://github.com/ansible/awx.git
synced 2026-05-07 01:17:37 -02:30
send and subcribe to summary events for all new events
This commit is contained in:
@@ -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:
|
||||||
|
|||||||
@@ -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):
|
||||||
|
|||||||
@@ -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]
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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": []
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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'
|
||||||
|
|||||||
@@ -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": [],
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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": [],
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user