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 });
}
};
}])