diff --git a/awx/ui/static/js/controllers/JobDetail.js b/awx/ui/static/js/controllers/JobDetail.js
index b8719b9beb..e121196218 100644
--- a/awx/ui/static/js/controllers/JobDetail.js
+++ b/awx/ui/static/js/controllers/JobDetail.js
@@ -322,9 +322,9 @@ function JobDetailController ($location, $rootScope, $scope, $compile, $routePar
task: play.tasks[event.id]
});
});
- if (scope.activeTask) {
- scope.jobData.plays[scope.activePlay].tasks[scope.activeTask].taskActiveClass = 'active';
- }
+ //if (scope.activeTask) {
+ // scope.jobData.plays[scope.activePlay].tasks[scope.activeTask].taskActiveClass = 'active';
+ //}
scope.$emit('LoadHosts');
})
.error(function(data) {
diff --git a/awx/ui/static/js/forms/EventsViewer.js b/awx/ui/static/js/forms/EventsViewer.js
index 78f5c3c066..6a99ef3f99 100644
--- a/awx/ui/static/js/forms/EventsViewer.js
+++ b/awx/ui/static/js/forms/EventsViewer.js
@@ -24,6 +24,10 @@ angular.module('EventsViewerFormDefinition', [])
label: 'Host',
section: 'Event'
},
+ role: {
+ label: 'Role',
+ section: 'Event'
+ },
play: {
label: 'Play',
type: 'text',
@@ -33,8 +37,12 @@ angular.module('EventsViewerFormDefinition', [])
label: 'Task',
section: 'Event'
},
- role: {
- label: 'Role',
+ module_name: {
+ label: 'Module',
+ section: 'Event'
+ },
+ module_args: {
+ label: 'Arguments',
section: 'Event'
},
rc: {
@@ -60,14 +68,6 @@ angular.module('EventsViewerFormDefinition', [])
delta: {
label: 'Elapsed',
section: 'Timing'
- },
- module_name: {
- label: 'Name',
- section: 'Module'
- },
- module_args: {
- label: 'Arguments',
- section: 'Module'
}
}
});
\ No newline at end of file
diff --git a/awx/ui/static/js/helpers/JobDetail.js b/awx/ui/static/js/helpers/JobDetail.js
index f79b5d2cdf..01b976f9df 100644
--- a/awx/ui/static/js/helpers/JobDetail.js
+++ b/awx/ui/static/js/helpers/JobDetail.js
@@ -40,9 +40,9 @@
angular.module('JobDetailHelper', ['Utilities', 'RestServices', 'ModalDialog'])
.factory('DigestEvent', ['$rootScope', '$log', 'UpdatePlayStatus', 'UpdateHostStatus', 'AddHostResult',
- 'GetElapsed', 'UpdateTaskStatus', 'DrawGraph', 'LoadHostSummary', 'JobIsFinished', 'AddNewTask',
+ 'GetElapsed', 'UpdateTaskStatus', 'DrawGraph', 'LoadHostSummary', 'JobIsFinished', 'AddNewTask', 'AddNewPlay',
function($rootScope, $log, UpdatePlayStatus, UpdateHostStatus, AddHostResult, GetElapsed,
- UpdateTaskStatus, DrawGraph, LoadHostSummary, JobIsFinished, AddNewTask) {
+ UpdateTaskStatus, DrawGraph, LoadHostSummary, JobIsFinished, AddNewTask, AddNewPlay) {
return function(params) {
var scope = params.scope,
@@ -60,27 +60,7 @@ function($rootScope, $log, UpdatePlayStatus, UpdateHostStatus, AddHostResult, Ge
break;
case 'playbook_on_play_start':
- status = (event.failed) ? 'failed' : (event.changed) ? 'changed' : 'successful';
- status_text = (event.failed) ? 'Failed' : (event.changed) ? 'Changed' : 'OK';
- scope.jobData.plays[event.id] = {
- id: event.id,
- name: event.play,
- created: event.created,
- status: status,
- status_text: status_text,
- elapsed: '00:00:00',
- hostCount: 0,
- fistTask: null,
- unreachableCount: 0,
- status_tip: "Event ID: " + event.id + "
Status: " + status_text,
- tasks: {}
- };
- if (scope.activePlay) {
- scope.jobData.plays[scope.activePlay].tasks = {};
- scope.jobData.plays[scope.activePlay].playActiveClass = '';
- }
- scope.activePlay = event.id;
- scope.jobData.plays[scope.activePlay].playActiveClass = 'active';
+ AddNewPlay({ scope: scope, event: event });
break;
case 'playbook_on_setup':
@@ -206,19 +186,65 @@ function($rootScope, $log, UpdatePlayStatus, UpdateHostStatus, AddHostResult, Ge
};
}])
-.factory('AddNewTask', ['DrawGraph', 'UpdatePlayStatus', function(DrawGraph, UpdatePlayStatus) {
+.factory('AddNewPlay', [ function() {
return function(params) {
var scope = params.scope,
event = params.event,
- status, status_text;
+ status, status_text, activeList, newActivePlay, key;
status = (event.failed) ? 'failed' : (event.changed) ? 'changed' : 'successful';
status_text = (event.failed) ? 'Failed' : (event.changed) ? 'Changed' : 'OK';
- scope.jobData.plays[scope.activePlay].tasks[event.id] = {
+ scope.jobData.plays[event.id] = {
+ id: event.id,
+ name: event.play,
+ created: event.created,
+ status: status,
+ status_text: status_text,
+ elapsed: '00:00:00',
+ hostCount: 0,
+ taskCount: 0,
+ fistTask: null,
+ unreachableCount: 0,
+ status_tip: "Event ID: " + event.id + "
Status: " + status_text,
+ tasks: {}
+ };
+
+ //find the most recent task in the list of 'active' tasks
+ activeList = [];
+ for (key in scope.jobData.play) {
+ if (scope.jobData.plays[key].taskCount > 0) {
+ activeList.push(key);
+ }
+ };
+
+ //find the most recent play in the list of 'active' plays
+ if (scope.activeList.length > 0) {
+ newActivePlay = scope.plays[scope.activeList[scope.activeList.length - 1]].id;
+ if (scope.activePlay && newActivePlay !== scope.activePlay) {
+ scope.jobData.plays[scope.activePlay].tasks = {};
+ scope.jobData.plays[scope.activePlay].playActiveClass = '';
+ }
+ scope.activePlay = newActivePlay;
+ scope.jobData.plays[scope.activePlay].playActiveClass = 'active';
+ }
+ };
+}])
+
+.factory('AddNewTask', ['DrawGraph', 'UpdatePlayStatus', function(DrawGraph, UpdatePlayStatus) {
+ return function(params) {
+ var scope = params.scope,
+ event = params.event,
+ status, status_text,
+ activeList, newActiveTask, key;
+
+ status = (event.failed) ? 'failed' : (event.changed) ? 'changed' : 'successful';
+ status_text = (event.failed) ? 'Failed' : (event.changed) ? 'Changed' : 'OK';
+
+ scope.jobData.plays[event.parent].tasks[event.id] = {
id: event.id,
play_id: event.parent,
- name: event.event_display,
+ name: event.task,
status: status,
status_text: status_text,
status_tip: "Event ID: " + event.id + "
Status: " + status_text,
@@ -243,12 +269,24 @@ function($rootScope, $log, UpdatePlayStatus, UpdateHostStatus, AddHostResult, Ge
scope.jobData.plays[scope.activePlay].firstTask = event.id;
}
- if (scope.activeTask && scope.jobData.plays[scope.activePlay].tasks[scope.activeTask] !== undefined) {
- scope.jobData.plays[scope.activePlay].tasks[scope.activeTask].taskActiveClass = '';
- scope.jobData.plays[scope.activePlay].tasks[scope.activeTask].hostResults = {};
+ //find the most recent task in the list of 'active' tasks
+ activeList = [];
+ for (key in scope.jobData.plays[scope.activePlay].tasks) {
+ if (scope.jobData.plays[scope.activePlay].tasks[key].reportedHosts > 0 || scope.jobData.plays[scope.activePlay].tasks[key].status === 'no-matching-hosts') {
+ activeList.push(key);
+ }
+ };
+ if (scope.activeList.length > 0) {
+ newActiveTask = scope.jobData.plays[scope.activePlay].tasks[scope.acitveList[scope.activeList.length - 1]].id
+ if (scope.activeTask && newActiveTask !== scope.activeTask) {
+ if (scope.activeTask && scope.jobData.plays[scope.activePlay].tasks[scope.activeTask] !== undefined) {
+ scope.jobData.plays[scope.activePlay].tasks[scope.activeTask].taskActiveClass = '';
+ scope.jobData.plays[scope.activePlay].tasks[scope.activeTask].hostResults = {};
+ }
+ }
+ scope.activeTask = newActiveTask;
+ scope.jobData.plays[scope.activePlay].tasks[scope.activeTask].taskActiveClass = 'active';
}
- scope.activeTask = event.id;
- scope.jobData.plays[scope.activePlay].tasks[scope.activeTask].taskActiveClass = 'active';
UpdatePlayStatus({
scope: scope,
@@ -257,10 +295,6 @@ function($rootScope, $log, UpdatePlayStatus, UpdateHostStatus, AddHostResult, Ge
changed: event.changed,
modified: event.modified
});
-
- /*if (scope.host_summary.total > 0) {
- DrawGraph({ scope: scope, resize: true });
- }*/
};
}])
@@ -318,6 +352,7 @@ 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({
@@ -612,6 +647,9 @@ function($rootScope, $log, UpdatePlayStatus, UpdateHostStatus, AddHostResult, Ge
});
});
+ if (scope.liveEventProcessing) {
+
+ }
// set the active task
SelectPlay({
scope: scope,
diff --git a/awx/ui/static/lib/ansible/Utilities.js b/awx/ui/static/lib/ansible/Utilities.js
index 2089a3d4cd..5afd01eaa3 100644
--- a/awx/ui/static/lib/ansible/Utilities.js
+++ b/awx/ui/static/lib/ansible/Utilities.js
@@ -154,7 +154,7 @@ angular.module('Utilities', ['RestServices', 'Utilities'])
msg += 'Please contact your system administrator.';
}
Alert(defaultMsg.hdr, msg);
- } else if ((status === 401 && data.detail && data.detail === 'Token is expired') ||
+ } else if ((status === 'Token is expired') || (status === 401 && data.detail && data.detail === 'Token is expired') ||
(status === 401 && data.detail && data.detail === 'Invalid token')) {
$rootScope.sessionTimer.expireSession();
$location.url('/login');