adding socket coverage to child states

so that child states won't unsubscribe the parent from any groups
This commit is contained in:
Jared Tabor
2016-09-14 14:49:18 -07:00
parent 37b2b01e02
commit e0a566cdea
26 changed files with 153 additions and 25 deletions

View File

@@ -624,6 +624,11 @@ var tower = angular.module('Tower', [
ncyBreadcrumb: { ncyBreadcrumb: {
parent: "projects", parent: "projects",
label: "CREATE PROJECT" label: "CREATE PROJECT"
},
socket: {
"groups":{
"jobs": ["status_changed"]
}
} }
}); });
@@ -638,6 +643,11 @@ var tower = angular.module('Tower', [
ncyBreadcrumb: { ncyBreadcrumb: {
parent: 'projects', parent: 'projects',
label: '{{name}}' label: '{{name}}'
},
socket: {
"groups":{
"jobs": ["status_changed"]
}
} }
}); });
@@ -654,6 +664,7 @@ var tower = angular.module('Tower', [
templateUrl: urlPrefix + 'partials/projects.html', templateUrl: urlPrefix + 'partials/projects.html',
controller: OrganizationsAdd controller: OrganizationsAdd
}); });
$rootScope.addPermission = function(scope) { $rootScope.addPermission = function(scope) {
$compile("<add-permissions class='AddPermissions'></add-permissions>")(scope); $compile("<add-permissions class='AddPermissions'></add-permissions>")(scope);
}; };

View File

@@ -28,7 +28,7 @@ export function Home($scope, $compile, $stateParams, $rootScope, $location, $log
var dataCount = 0; var dataCount = 0;
$rootScope.$on('dashboard-jobs', function () { $rootScope.$on('ws-dashboard-jobs', function () {
Rest.setUrl(GetBasePath('dashboard')); Rest.setUrl(GetBasePath('dashboard'));
Rest.get() Rest.get()
.success(function (data) { .success(function (data) {

View File

@@ -113,14 +113,14 @@ export function JobsListController ($rootScope, $log, $scope, $compile, $statePa
if ($rootScope.removeJobStatusChange) { if ($rootScope.removeJobStatusChange) {
$rootScope.removeJobStatusChange(); $rootScope.removeJobStatusChange();
} }
$rootScope.removeJobStatusChange = $rootScope.$on('jobs-jobs', function() { $rootScope.removeJobStatusChange = $rootScope.$on('ws-jobs-jobs', function() {
$scope.refreshJobs(); $scope.refreshJobs();
}); });
if ($rootScope.removeScheduleStatusChange) { if ($rootScope.removeScheduleStatusChange) {
$rootScope.removeScheduleStatusChange(); $rootScope.removeScheduleStatusChange();
} }
$rootScope.removeScheduleStatusChange = $rootScope.$on('jobs-schedules', function() { $rootScope.removeScheduleStatusChange = $rootScope.$on('ws-jobs-schedules', function() {
if (api_complete) { if (api_complete) {
scheduled_scope.search('schedule'); scheduled_scope.search('schedule');
} }

View File

@@ -90,7 +90,7 @@ export function ProjectsList ($scope, $rootScope, $location, $log, $stateParams,
if ($rootScope.removeJobStatusChange) { if ($rootScope.removeJobStatusChange) {
$rootScope.removeJobStatusChange(); $rootScope.removeJobStatusChange();
} }
$rootScope.removeJobStatusChange = $rootScope.$on(`${$state.current.name}-jobs`, function(e, data) { $rootScope.removeJobStatusChange = $rootScope.$on(`ws-${$state.current.name}-jobs`, function(e, data) {
var project; var project;
$log.debug(data); $log.debug(data);
if ($scope.projects) { if ($scope.projects) {

View File

@@ -58,7 +58,7 @@ function JobStatusGraphData(Rest, getBasePath, processErrors, $rootScope, $q) {
destroyWatcher: angular.noop, destroyWatcher: angular.noop,
setupWatcher: function(period, jobType) { setupWatcher: function(period, jobType) {
this.destroyWatcher = this.destroyWatcher =
$rootScope.$on('dashboard-jobs', function() { $rootScope.$on('ws-dashboard-jobs', function() {
getData(period, jobType).then(function(result) { getData(period, jobType).then(function(result) {
$rootScope. $rootScope.
$broadcast('DataReceived:JobStatusGraph', $broadcast('DataReceived:JobStatusGraph',

View File

@@ -23,5 +23,10 @@ export default {
}, },
ncyBreadcrumb: { ncyBreadcrumb: {
label: "RUN COMMAND" label: "RUN COMMAND"
},
socket: {
"groups":{
"jobs": ["status_changed"]
}
} }
}; };

View File

@@ -22,6 +22,11 @@ var copyMoveGroup = {
return GroupManageService.get({id: $stateParams.group_id}).then(res => res.data.results[0]); return GroupManageService.get({id: $stateParams.group_id}).then(res => res.data.results[0]);
}] }]
}, },
socket: {
"groups":{
"jobs": ["status_changed"]
}
},
views: { views: {
'form@inventoryManage' : { 'form@inventoryManage' : {
controller: CopyMoveGroupsController, controller: CopyMoveGroupsController,
@@ -40,6 +45,11 @@ var copyMoveHost = {
return HostManageService.get({id: $stateParams.host_id}).then(res => res.data.results[0]); return HostManageService.get({id: $stateParams.host_id}).then(res => res.data.results[0]);
}] }]
}, },
socket: {
"groups":{
"jobs": ["status_changed"]
}
},
views: { views: {
'form@inventoryManage': { 'form@inventoryManage': {
templateUrl: templateUrl('inventories/manage/copy-move/copy-move'), templateUrl: templateUrl('inventories/manage/copy-move/copy-move'),

View File

@@ -104,7 +104,7 @@
if ($rootScope.inventoryManageStatus) { if ($rootScope.inventoryManageStatus) {
$rootScope.inventoryManageStatus(); $rootScope.inventoryManageStatus();
} }
$rootScope.inventoryManageStatus = $rootScope.$on(`${$state.current.name}-jobs`, function(e, data){ $rootScope.inventoryManageStatus = $rootScope.$on(`ws-${$state.current.name}-jobs`, function(e, data){
var group = Find({ list: $scope.groups, key: 'id', val: data.group_id }); var group = Find({ list: $scope.groups, key: 'id', val: data.group_id });
if(data.status === 'failed' || data.status === 'successful'){ if(data.status === 'failed' || data.status === 'successful'){
$state.reload(); $state.reload();

View File

@@ -16,6 +16,11 @@ var ManageGroupsEdit = {
data: { data: {
mode: 'edit' mode: 'edit'
}, },
socket: {
"groups":{
"jobs": ["status_changed"]
}
},
resolve: { resolve: {
groupData: ['$stateParams', 'GroupManageService', function($stateParams, GroupManageService){ groupData: ['$stateParams', 'GroupManageService', function($stateParams, GroupManageService){
return GroupManageService.get({id: $stateParams.group_id}).then(res => res.data.results[0]); return GroupManageService.get({id: $stateParams.group_id}).then(res => res.data.results[0]);
@@ -41,6 +46,11 @@ var ManageGroupsAdd = {
data: { data: {
mode: 'add' mode: 'add'
}, },
socket: {
"groups":{
"jobs": ["status_changed"]
}
},
views: { views: {
'form@inventoryManage': { 'form@inventoryManage': {
controller: addController, controller: addController,

View File

@@ -23,6 +23,11 @@ var ManageHostsEdit = {
}); });
}] }]
}, },
socket: {
"groups":{
"jobs": ["status_changed"]
}
},
views: { views: {
'form@inventoryManage': { 'form@inventoryManage': {
controller: editController, controller: editController,
@@ -40,6 +45,11 @@ var ManageHostsAdd = {
data: { data: {
mode: 'add' mode: 'add'
}, },
socket: {
"groups":{
"jobs": ["status_changed"]
}
},
views: { views: {
'form@inventoryManage': { 'form@inventoryManage': {
controller: addController, controller: addController,

View File

@@ -22,6 +22,12 @@ var hostEventModal = {
return JobDetailService.getJobEventChildren($stateParams.taskId).then(res => res.data.results); return JobDetailService.getJobEventChildren($stateParams.taskId).then(res => res.data.results);
}] }]
}, },
socket: {
"groups":{
"jobs": ["status_changed", "summary"],
"job_events": []
}
},
onExit: function() { onExit: function() {
// close the modal // close the modal
// using an onExit event to handle cases where the user navs away using the url bar / back and not modal "X" // using an onExit event to handle cases where the user navs away using the url bar / back and not modal "X"
@@ -36,28 +42,52 @@ var hostEventModal = {
name: 'jobDetail.host-event.details', name: 'jobDetail.host-event.details',
url: '/details', url: '/details',
controller: 'HostEventController', controller: 'HostEventController',
templateUrl: templateUrl('job-detail/host-event/host-event-details') templateUrl: templateUrl('job-detail/host-event/host-event-details'),
socket: {
"groups":{
"jobs": ["status_changed", "summary"],
"job_events": []
}
}
}; };
var hostEventJson = { var hostEventJson = {
name: 'jobDetail.host-event.json', name: 'jobDetail.host-event.json',
url: '/json', url: '/json',
controller: 'HostEventController', controller: 'HostEventController',
templateUrl: templateUrl('job-detail/host-event/host-event-codemirror') templateUrl: templateUrl('job-detail/host-event/host-event-codemirror'),
socket: {
"groups":{
"jobs": ["status_changed", "summary"],
"job_events": []
}
}
}; };
var hostEventStdout = { var hostEventStdout = {
name: 'jobDetail.host-event.stdout', name: 'jobDetail.host-event.stdout',
url: '/stdout', url: '/stdout',
controller: 'HostEventController', controller: 'HostEventController',
templateUrl: templateUrl('job-detail/host-event/host-event-codemirror') templateUrl: templateUrl('job-detail/host-event/host-event-codemirror'),
socket: {
"groups":{
"jobs": ["status_changed", "summary"],
"job_events": []
}
}
}; };
var hostEventStderr = { var hostEventStderr = {
name: 'jobDetail.host-event.stderr', name: 'jobDetail.host-event.stderr',
url: '/stderr', url: '/stderr',
controller: 'HostEventController', controller: 'HostEventController',
templateUrl: templateUrl('job-detail/host-event/host-event-codemirror') templateUrl: templateUrl('job-detail/host-event/host-event-codemirror'),
socket: {
"groups":{
"jobs": ["status_changed", "summary"],
"job_events": []
}
}
}; };

View File

@@ -22,6 +22,12 @@ export default {
$('.modal-backdrop').remove(); $('.modal-backdrop').remove();
$('body').removeClass('modal-open'); $('body').removeClass('modal-open');
}, },
socket: {
"groups":{
"jobs": ["status_changed", "summary"],
"job_events": []
}
},
resolve: { resolve: {
hosts: ['JobDetailService','$stateParams', function(JobDetailService, $stateParams) { hosts: ['JobDetailService','$stateParams', function(JobDetailService, $stateParams) {
return JobDetailService.getRelatedJobEvents($stateParams.id, { return JobDetailService.getRelatedJobEvents($stateParams.id, {

View File

@@ -53,7 +53,7 @@
} }
// emitted by the API in the same function used to persist host summary data // emitted by the API in the same function used to persist host summary data
// JobEvent.update_host_summary_from_stats() from /awx/main.models.jobs.py // JobEvent.update_host_summary_from_stats() from /awx/main.models.jobs.py
$rootScope.removeJobStatusChange = $rootScope.$on('JobSummaryComplete', function(e, data) { $rootScope.removeJobStatusChange = $rootScope.$on('ws-JobSummaryComplete', function(e, data) {
// discard socket msgs we don't care about in this context // discard socket msgs we don't care about in this context
if (parseInt($stateParams.id) === data.unified_job_id){ if (parseInt($stateParams.id) === data.unified_job_id){
init(); init();
@@ -63,7 +63,7 @@
if ($rootScope.removeJobSummaryComplete) { if ($rootScope.removeJobSummaryComplete) {
$rootScope.removeJobSummaryComplete(); $rootScope.removeJobSummaryComplete();
} }
$rootScope.removeJobSummaryComplete = $rootScope.$on('jobDetail-jobs', function(e, data) { $rootScope.removeJobSummaryComplete = $rootScope.$on('ws-jobDetail-jobs', function(e, data) {
if (parseInt($stateParams.id) === data.unified_job_id){ if (parseInt($stateParams.id) === data.unified_job_id){
$scope.status = data.status; $scope.status = data.status;
} }

View File

@@ -14,6 +14,12 @@ export default {
"jobs": ["status_changed"] "jobs": ["status_changed"]
} }
}, },
socket: {
"groups":{
"jobs": ["status_changed", "summary"],
"job_events": []
}
},
views:{ views:{
'host-summary': { 'host-summary': {
controller: 'HostSummaryController', controller: 'HostSummaryController',

View File

@@ -201,7 +201,7 @@ export default
if ($rootScope.removeJobEventChange) { if ($rootScope.removeJobEventChange) {
$rootScope.removeJobEventChange(); $rootScope.removeJobEventChange();
} }
$rootScope.removeJobEventChange = $rootScope.$on(`${$state.current.name}-job_events-${job_id}`, function(e, data) { $rootScope.removeJobEventChange = $rootScope.$on(`ws-${$state.current.name}-job_events-${job_id}`, function(e, data) {
// update elapsed time on each event received // update elapsed time on each event received
scope.job_status.elapsed = GetElapsed({ scope.job_status.elapsed = GetElapsed({
start: scope.job.created, start: scope.job.created,
@@ -225,7 +225,7 @@ export default
if ($rootScope.removeJobStatusChange) { if ($rootScope.removeJobStatusChange) {
$rootScope.removeJobStatusChange(); $rootScope.removeJobStatusChange();
} }
$rootScope.removeJobStatusChange = $rootScope.$on(`${$state.current.name}-jobs`, function(e, data) { $rootScope.removeJobStatusChange = $rootScope.$on(`ws-${$state.current.name}-jobs`, function(e, data) {
// if we receive a status change event for the current job indicating the job // if we receive a status change event for the current job indicating the job
// is finished, stop event queue processing and reload // is finished, stop event queue processing and reload
if (parseInt(data.unified_job_id, 10) === parseInt(job_id,10)) { if (parseInt(data.unified_job_id, 10) === parseInt(job_id,10)) {
@@ -242,7 +242,7 @@ export default
if ($rootScope.removeJobSummaryComplete) { if ($rootScope.removeJobSummaryComplete) {
$rootScope.removeJobSummaryComplete(); $rootScope.removeJobSummaryComplete();
} }
$rootScope.removeJobSummaryComplete = $rootScope.$on('JobSummaryComplete', function() { $rootScope.removeJobSummaryComplete = $rootScope.$on('ws-JobSummaryComplete', function() {
// the job host summary should now be available from the API // the job host summary should now be available from the API
$log.debug('Trigging reload of job_host_summaries'); $log.debug('Trigging reload of job_host_summaries');
scope.$emit('InitialLoadComplete'); scope.$emit('InitialLoadComplete');

View File

@@ -15,6 +15,11 @@ export default {
parent: "jobTemplates", parent: "jobTemplates",
label: "CREATE JOB TEMPLATE" label: "CREATE JOB TEMPLATE"
}, },
socket:{
"groups":{
"jobs": ["status_changed"]
}
},
onExit: function(){ onExit: function(){
// close the survey maker modal // close the survey maker modal
// using an onExit event to handle cases where the user navs away using the url bar / back and not modal "X" // using an onExit event to handle cases where the user navs away using the url bar / back and not modal "X"

View File

@@ -14,6 +14,11 @@ export default {
data: { data: {
activityStreamId: 'id' activityStreamId: 'id'
}, },
socket:{
"groups":{
"jobs": ["status_changed"]
}
},
ncyBreadcrumb: { ncyBreadcrumb: {
parent: 'jobTemplates', parent: 'jobTemplates',
label: "{{name}}" label: "{{name}}"

View File

@@ -37,6 +37,14 @@ export default
view.inject(list, { mode: mode, scope: $scope }); view.inject(list, { mode: mode, scope: $scope });
$rootScope.flashMessage = null; $rootScope.flashMessage = null;
if ($rootScope.JobStatusChange) {
$rootScope.JobStatusChange();
}
$rootScope.JobStatusChange = $rootScope.$on(`ws-${$state.current.name}-jobs`, function (e, data) {
$scope.search(list.iterator);
});
if ($scope.removePostRefresh) { if ($scope.removePostRefresh) {
$scope.removePostRefresh(); $scope.removePostRefresh();
} }

View File

@@ -17,5 +17,10 @@ export default {
}, },
ncyBreadcrumb: { ncyBreadcrumb: {
label: "JOB TEMPLATES" label: "JOB TEMPLATES"
},
socket:{
"groups":{
"jobs": ["status_changed"]
}
} }
}; };

View File

@@ -21,6 +21,13 @@ export default ['$scope', '$rootScope', '$location', '$log',
generator = GenerateList, generator = GenerateList,
orgBase = GetBasePath('organizations'); orgBase = GetBasePath('organizations');
if ($rootScope.JobStatusChange) {
$rootScope.JobStatusChange();
}
$rootScope.JobStatusChange = $rootScope.$on(`ws-${$state.current.name}-jobs`, function (e, data) {
$scope.search(list.iterator);
});
Rest.setUrl(orgBase + $stateParams.organization_id); Rest.setUrl(orgBase + $stateParams.organization_id);
Rest.get() Rest.get()
.success(function (data) { .success(function (data) {

View File

@@ -90,7 +90,7 @@ export default ['$scope', '$rootScope', '$location', '$log',
if ($rootScope.removeJobStatusChange) { if ($rootScope.removeJobStatusChange) {
$rootScope.removeJobStatusChange(); $rootScope.removeJobStatusChange();
} }
$rootScope.removeJobStatusChange = $rootScope.$on(`${$state.current.name}-jobs`, function(e, data) { $rootScope.removeJobStatusChange = $rootScope.$on(`ws-${$state.current.name}-jobs`, function(e, data) {
var project; var project;
$log.debug(data); $log.debug(data);
if ($scope.projects) { if ($scope.projects) {

View File

@@ -99,6 +99,11 @@ export default [
features: ['FeaturesService', function(FeaturesService) { features: ['FeaturesService', function(FeaturesService) {
return FeaturesService.get(); return FeaturesService.get();
}] }]
},
socket: {
"groups":{
"jobs": ["status_changed"]
}
} }
}, },
{ {
@@ -121,6 +126,11 @@ export default [
features: ['FeaturesService', function(FeaturesService) { features: ['FeaturesService', function(FeaturesService) {
return FeaturesService.get(); return FeaturesService.get();
}] }]
},
socket: {
"groups":{
"jobs": ["status_changed"]
}
} }
}, },
{ {

View File

@@ -16,7 +16,7 @@ export function PortalModeJobsController($scope, $rootScope, GetBasePath, Genera
if ($rootScope.removeJobStatusChange) { if ($rootScope.removeJobStatusChange) {
$rootScope.removeJobStatusChange(); $rootScope.removeJobStatusChange();
} }
$rootScope.removeJobStatusChange = $rootScope.$on('portalMode-jobs', function() { $rootScope.removeJobStatusChange = $rootScope.$on('ws-portalMode-jobs', function() {
$scope.search('job'); $scope.search('job');
}); });

View File

@@ -41,13 +41,13 @@ export default
// we know that this must have been a // we know that this must have been a
// summary complete message // summary complete message
$log.debug('Job summary_complete ' + data.unified_job_id); $log.debug('Job summary_complete ' + data.unified_job_id);
$rootScope.$emit('JobSummaryComplete', data); $rootScope.$emit('ws-JobSummaryComplete', data);
} }
else if(data.group_name==="job_events"){ else if(data.group_name==="job_events"){
str = `${$state.current.name}-${data.group_name}-${data.job}`; str = `ws-${$state.current.name}-${data.group_name}-${data.job}`;
} }
else if(data.group_name==="ad_hoc_command_events"){ else if(data.group_name==="ad_hoc_command_events"){
str = `${$state.current.name}-${data.group_name}-${data.ad_hoc_command}`; str = `ws-${$state.current.name}-${data.group_name}-${data.ad_hoc_command}`;
} }
else if(data.group_name==="control"){ else if(data.group_name==="control"){
$log.debug(data.reason); $log.debug(data.reason);
@@ -59,7 +59,7 @@ export default
// correct route is the route name followed by a // correct route is the route name followed by a
// dash (-) and the group_name. // dash (-) and the group_name.
// ex: 'jobDetail-job_events' // ex: 'jobDetail-job_events'
str = `${$state.current.name}-${data.group_name}`; str = `ws-${$state.current.name}-${data.group_name}`;
} }
$rootScope.$emit(str, data); $rootScope.$emit(str, data);
return self.socket; return self.socket;

View File

@@ -22,7 +22,7 @@ export default ['$log', '$rootScope', '$scope', '$state', '$stateParams', 'Proce
function openSockets() { function openSockets() {
if ($state.current.name === 'jobDetail') { if ($state.current.name === 'jobDetail') {
$log.debug("socket watching on job_events-" + job_id); $log.debug("socket watching on job_events-" + job_id);
$rootScope.$on(`${$state.current.name}-job_events-${job_id}`, function() { $rootScope.$on(`ws-${$state.current.name}-job_events-${job_id}`, function() {
$log.debug("socket fired on job_events-" + job_id); $log.debug("socket fired on job_events-" + job_id);
if (api_complete) { if (api_complete) {
event_queue++; event_queue++;
@@ -36,7 +36,7 @@ export default ['$log', '$rootScope', '$scope', '$state', '$stateParams', 'Proce
} }
if ($state.current.name === 'adHocJobStdout') { if ($state.current.name === 'adHocJobStdout') {
$log.debug("socket watching on ad_hoc_command_events-" + job_id); $log.debug("socket watching on ad_hoc_command_events-" + job_id);
$rootScope.$on(`${$state.current.name}-ad_hoc_command_events-${job_id}`, function() { $rootScope.$on(`ws-${$state.current.name}-ad_hoc_command_events-${job_id}`, function() {
$log.debug("socket fired on ad_hoc_command_events-" + job_id); $log.debug("socket fired on ad_hoc_command_events-" + job_id);
if (api_complete) { if (api_complete) {
event_queue++; event_queue++;
@@ -192,7 +192,7 @@ export default ['$log', '$rootScope', '$scope', '$state', '$stateParams', 'Proce
if ($scope.removeJobStatusChange) { if ($scope.removeJobStatusChange) {
$scope.removeJobStatusChange(); $scope.removeJobStatusChange();
} }
$scope.removeJobStatusChange = $rootScope.$on(`${$state.current.name}-jobs`, function(e, data) { $scope.removeJobStatusChange = $rootScope.$on(`ws-${$state.current.name}-jobs`, function(e, data) {
if (parseInt(data.unified_job_id, 10) === parseInt(job_id,10)) { if (parseInt(data.unified_job_id, 10) === parseInt(job_id,10)) {
if (data.status === 'failed' || data.status === 'canceled' || if (data.status === 'failed' || data.status === 'canceled' ||
data.status === 'error' || data.status === 'successful') { data.status === 'error' || data.status === 'successful') {

View File

@@ -28,7 +28,7 @@ export function JobStdoutController ($rootScope, $scope, $state, $stateParams,
if ($scope.removeJobStatusChange) { if ($scope.removeJobStatusChange) {
$scope.removeJobStatusChange(); $scope.removeJobStatusChange();
} }
$scope.removeJobStatusChange = $rootScope.$on(`${$state.current.name}-jobs`, function(e, data) { $scope.removeJobStatusChange = $rootScope.$on(`ws-${$state.current.name}-jobs`, function(e, data) {
if (parseInt(data.unified_job_id, 10) === parseInt(job_id,10) && $scope.job) { if (parseInt(data.unified_job_id, 10) === parseInt(job_id,10) && $scope.job) {
$scope.job.status = data.status; $scope.job.status = data.status;
} }