diff --git a/awx/ui/static/js/controllers/Inventories.js b/awx/ui/static/js/controllers/Inventories.js
index 10fc2968b5..f983a87a85 100644
--- a/awx/ui/static/js/controllers/Inventories.js
+++ b/awx/ui/static/js/controllers/Inventories.js
@@ -495,6 +495,8 @@ function InventoriesEdit($scope, $location, $routeParams, $compile, $log, $rootS
}
$rootScope.removeJobStatusChange = $rootScope.$on('JobStatusChange', function(e, data) {
var group, stat;
+ Wait('stop');
+ $log.debug(data);
if ($scope.groups) {
// Assuming we have a list of groups available
group = Find({ list: $scope.groups, key: 'group_id', val: data.group_id });
diff --git a/awx/ui/static/js/controllers/Projects.js b/awx/ui/static/js/controllers/Projects.js
index 404e3fed3b..bfa2fd455e 100644
--- a/awx/ui/static/js/controllers/Projects.js
+++ b/awx/ui/static/js/controllers/Projects.js
@@ -76,6 +76,36 @@ function ProjectsList ($scope, $rootScope, $location, $log, $routeParams, Rest,
}
});
+ // Handle project update status changes
+ if ($rootScope.rmoveJobStatusChange) {
+ $rootScope.removeJobStatusChange();
+ }
+ $rootScope.removeJobStatusChange = $rootScope.$on('JobStatusChange', function(e, data) {
+ var project;
+ Wait('stop');
+ $log.debug(data);
+ if ($scope.projects) {
+ // Assuming we have a list of projects available
+ project = Find({ list: $scope.projects, key: 'id', val: data.project_id });
+ if (project) {
+ // And we found the affected project
+ $log.debug('Received event for project: ' + project.name);
+ $log.debug('Status changed to: ' + data.status);
+ if (data.status === 'successful' || data.status === 'failed') {
+ project.scm_update_tooltip = "Start an SCM update";
+ project.scm_type_class = "";
+ }
+ else {
+ project.scm_update_tooltip = "SCM update currently running";
+ project.scm_type_class = "btn-disabled";
+ }
+ project.status = data.status;
+ project.statusIcon = GetProjectIcon(data.status);
+ project.statusTip = GetProjectToolTip(data.status);
+ }
+ }
+ });
+
if ($scope.removeChoicesHere) {
$scope.removeChoicesHere();
}
@@ -312,8 +342,8 @@ function ProjectsList ($scope, $rootScope, $location, $log, $routeParams, Rest,
// Do not respond. Button appears greyed out as if it is disabled. Not disabled though, because we need mouse over event
// to work. So user can click, but we just won't do anything.
//Alert('Missing SCM Setup', 'Before running an SCM update, edit the project and provide the SCM access information.', 'alert-info');
- } else if (project.status === 'updating' || project.status === 'running') {
- Alert('Update in Progress', 'The SCM update process is running. Use the Refresh button to monitor the status.', 'alert-info');
+ } else if (project.status === 'updating' || project.status === 'running' || project.status === 'pending') {
+ // Alert('Update in Progress', 'The SCM update process is running. Use the Refresh button to monitor the status.', 'alert-info');
} else {
ProjectUpdate({ scope: $scope, project_id: project.id });
}
diff --git a/awx/ui/static/js/helpers/JobSubmission.js b/awx/ui/static/js/helpers/JobSubmission.js
index 38dfb169e9..c72a17975b 100644
--- a/awx/ui/static/js/helpers/JobSubmission.js
+++ b/awx/ui/static/js/helpers/JobSubmission.js
@@ -382,15 +382,15 @@ function($location, Wait, GetBasePath, LookUpInit, JobTemplateForm, CredentialLi
}
scope.removeUpdateSubmitted = scope.$on('UpdateSubmitted', function() {
// Refresh the project list after update request submitted
- Wait('stop');
- Alert('Update Started', 'The request to start the SCM update process was submitted. ' +
- 'To monitor the update status, refresh the page by clicking the button.', 'alert-info');
if (scope.refreshJobs) {
+ Wait('stop');
+ Alert('Update Started', 'The request to start the SCM update process was submitted. ' +
+ 'To monitor the update status, refresh the page by clicking the button.', 'alert-info');
scope.refreshJobs();
}
- else if (scope.refresh) {
- scope.refresh();
- }
+ //else if (scope.refresh) {
+ // scope.refresh();
+ //}
});
if (scope.removePromptForPasswords) {
@@ -413,9 +413,9 @@ function($location, Wait, GetBasePath, LookUpInit, JobTemplateForm, CredentialLi
Rest.get()
.success(function (data) {
project = data;
- Wait('stop');
if (project.can_update) {
if (project.passwords_needed_to_updated) {
+ Wait('stop');
scope.$emit('PromptForPasswords');
}
else {
@@ -443,8 +443,8 @@ function($location, Wait, GetBasePath, LookUpInit, JobTemplateForm, CredentialLi
var scope = params.scope,
url = params.url,
- group_id = params.group_id,
- tree_id = params.tree_id,
+ //group_id = params.group_id,
+ //tree_id = params.tree_id,
//base = $location.path().replace(/^\//, '').split('/')[0],
inventory_source;
@@ -460,7 +460,7 @@ function($location, Wait, GetBasePath, LookUpInit, JobTemplateForm, CredentialLi
}
});*/
- function getJobID(url) {
+ /*function getJobID(url) {
var result='';
url.split(/\//).every(function(path) {
if (/^\d+$/.test(path)) {
@@ -470,14 +470,14 @@ function($location, Wait, GetBasePath, LookUpInit, JobTemplateForm, CredentialLi
return true;
});
return result;
- }
+ }*/
if (scope.removeUpdateSubmitted) {
scope.removeUpdateSubmitted();
}
scope.removeUpdateSubmitted = scope.$on('UpdateSubmitted', function () {
// Get the current job
- var path = url.replace(/update\/$/,'');
+ /*var path = url.replace(/update\/$/,'');
Rest.setUrl(path);
Rest.get()
.success(function(data) {
@@ -492,7 +492,7 @@ function($location, Wait, GetBasePath, LookUpInit, JobTemplateForm, CredentialLi
ProcessErrors(scope, data, status, null, { hdr: 'Error!',
msg: 'Failed to get inventory source ' + url + ' GET returned: ' + status });
});
-
+ */
//console.log('job submitted. callback returned: ');
//console.log(data);
/*setTimeout(function() {
@@ -532,6 +532,7 @@ function($location, Wait, GetBasePath, LookUpInit, JobTemplateForm, CredentialLi
inventory_source = data;
if (data.can_update) {
if (data.passwords_needed_to_update) {
+ Wait('stop');
scope.$emit('PromptForPasswords');
}
else {
diff --git a/awx/ui/static/js/lists/Projects.js b/awx/ui/static/js/lists/Projects.js
index a3d94a410d..b4ce808403 100644
--- a/awx/ui/static/js/lists/Projects.js
+++ b/awx/ui/static/js/lists/Projects.js
@@ -27,6 +27,7 @@ angular.module('ProjectsListDefinition', [])
iconOnly: true,
ngClick: 'showSCMStatus(project.id)',
awToolTip: '{{ project.statusTip }}',
+ dataTipWatch: 'project.statusTip',
dataPlacement: 'top',
icon: "icon-job-{{ project.statusIcon }}",
columnClass: "col-md-1 col-sm-2 col-xs-3",
@@ -75,10 +76,17 @@ angular.module('ProjectsListDefinition', [])
awToolTip: 'Click for help',
awTipPlacement: 'top'
},*/
- refresh: {
+ /*refresh: {
mode: 'all',
awToolTip: "Refresh the page",
ngClick: "refresh()"
+ },*/
+ socket: {
+ mode: 'all',
+ iconClass: "{{ 'fa fa-power-off fa-lg socket-' + socketStatus }}",
+ awToolTip: "{{ socketTip }}",
+ dataTipWatch: "socketTip",
+ ngClick: "socketToggle()",
},
stream: {
ngClick: "showActivity()",
@@ -91,6 +99,7 @@ angular.module('ProjectsListDefinition', [])
scm_update: {
ngClick: 'SCMUpdate(project.id, $event)',
awToolTip: "{{ project.scm_update_tooltip }}",
+ dataTipWatch: "project.scm_update_tooltip",
ngClass: "project.scm_type_class",
dataPlacement: 'top'
},
@@ -109,13 +118,13 @@ angular.module('ProjectsListDefinition', [])
"delete": {
ngClick: "deleteProject(project.id, project.name)",
awToolTip: 'Delete the project',
- ngShow: "project.status !== 'updating' && project.status !== 'running'",
+ ngShow: "project.status !== 'updating' && project.status !== 'running' && project.status !== 'pending'",
dataPlacement: 'top'
},
cancel: {
ngClick: "cancelUpdate(project.id, project.name)",
awToolTip: 'Cancel the SCM update',
- ngShow: "project.status == 'updating' || project.status == 'running'",
+ ngShow: "project.status == 'updating' || project.status == 'running' || project.status == 'pending'",
dataPlacement: 'top'
}
}