diff --git a/awx/ui/static/js/controllers/JobDetail.js b/awx/ui/static/js/controllers/JobDetail.js index 38a584a66a..04f6086b45 100644 --- a/awx/ui/static/js/controllers/JobDetail.js +++ b/awx/ui/static/js/controllers/JobDetail.js @@ -88,6 +88,7 @@ function JobDetailController ($location, $rootScope, $scope, $compile, $routePar if (parseInt(data.unified_job_id, 10) === parseInt(job_id,10)) { if (data.status === 'failed' || data.status === 'canceled' || data.status === 'error' || data.status === 'successful') { + $scope.liveEventProcessing = false; if ($rootScope.jobDetailInterval) { window.clearInterval($rootScope.jobDetailInterval); } @@ -319,6 +320,7 @@ function JobDetailController ($location, $rootScope, $scope, $compile, $routePar // this is not the first task play.tasks[event.id].hostCount = play.tasks[play.firstTask].hostCount; } + play.taskCount++; SetTaskStyles({ task: play.tasks[event.id] }); @@ -402,6 +404,7 @@ function JobDetailController ($location, $rootScope, $scope, $compile, $routePar elapsed: elapsed, hostCount: 0, fistTask: null, + taskCount: 0, playActiveClass: '', unreachableCount: (event.unreachable_count) ? event.unreachable_count : 0, tasks: {} @@ -414,6 +417,11 @@ function JobDetailController ($location, $rootScope, $scope, $compile, $routePar scope.jobData.plays[event.id].hostCount = ok + changed + failed + skipped; + if (scope.jobData.plays[event.id].hostCount > 0) { + // force the play to be on the 'active' list + scope.jobData.plays[event.id].taskCount = 1; + } + scope.host_summary.ok += ok; scope.host_summary.changed += changed; scope.host_summary.unreachable += (event.unreachable_count) ? event.unreachable_count : 0; diff --git a/awx/ui/static/js/helpers/JobDetail.js b/awx/ui/static/js/helpers/JobDetail.js index 3d0814a0e7..446df9f0e0 100644 --- a/awx/ui/static/js/helpers/JobDetail.js +++ b/awx/ui/static/js/helpers/JobDetail.js @@ -205,6 +205,7 @@ function($rootScope, $log, UpdatePlayStatus, UpdateHostStatus, AddHostResult, Ge if (newActivePlay && scope.activePlay && newActivePlay !== scope.activePlay) { scope.jobData.plays[scope.activePlay].tasks = {}; scope.jobData.plays[scope.activePlay].playActiveClass = ''; + scope.activeTask = null; } if (newActivePlay) { scope.activePlay = newActivePlay; @@ -284,7 +285,7 @@ function($rootScope, $log, UpdatePlayStatus, UpdateHostStatus, AddHostResult, Ge scope.jobData.plays[event.parent].tasks[event.id] = { id: event.id, play_id: event.parent, - name: event.task, + name: (event.task) ? event.task : event.event_display, status: status, status_text: status_text, status_tip: "Event ID: " + event.id + "
Status: " + status_text, @@ -378,7 +379,6 @@ function($rootScope, $log, UpdatePlayStatus, UpdateHostStatus, AddHostResult, Ge play.status_text = (changed) ? 'Changed' : (failed) ? 'Failed' : 'OK'; } } - play.taskCount++; play.status_tip = "Event ID: " + play.id + "
Status: " + play.status_text; play.finished = modified; play.elapsed = GetElapsed({ @@ -404,10 +404,16 @@ function($rootScope, $log, UpdatePlayStatus, UpdateHostStatus, AddHostResult, Ge id = params.task_id, modified = params.modified, no_hosts = params.no_hosts, - task; + play, task; - if (scope.jobData.plays[scope.activePlay].tasks[id] !== undefined) { - task = scope.jobData.plays[scope.activePlay].tasks[scope.activeTask]; + // find the task in our hierarchy + for (play in scope.jobData.plays) { + if (scope.jobData.plays[play].tasks[id]) { + task = scope.jobData.plays[play].tasks[id]; + } + } + + if (task) { if (no_hosts){ task.status = 'no-matching-hosts'; task.status_text = 'No matching hosts'; @@ -545,8 +551,6 @@ function($rootScope, $log, UpdatePlayStatus, UpdateHostStatus, AddHostResult, Ge msg: msg }; - SetActiveTask({ scope: scope }); - // increment the unreachable count on the play if (status === 'unreachable' && scope.jobData.plays[scope.activePlay]) { scope.jobData.plays[scope.activePlay].unreachableCount++; @@ -571,6 +575,8 @@ function($rootScope, $log, UpdatePlayStatus, UpdateHostStatus, AddHostResult, Ge SetTaskStyles({ task: task }); + + SetActiveTask({ scope: scope }); } }; }])