From eae92f8751b9c125841061cb0c51dc1d834ee1fd Mon Sep 17 00:00:00 2001 From: Leigh Johnson Date: Thu, 18 Feb 2016 13:02:02 -0500 Subject: [PATCH 1/4] delete management-jobs/schedule, create management-jobs/scheduler, add ui-router states, update references to state names #696 prep for isFactCleanup test in the view - change the way Schedule.js AddSchedule factory recognizes a management job #696 --- awx/ui/client/src/helpers/Schedules.js | 15 +- .../management-jobs/card/card.controller.js | 8 +- .../management-jobs/card/card.partial.html | 2 +- awx/ui/client/src/management-jobs/main.js | 4 +- .../src/management-jobs/schedule/main.js | 15 - .../schedule/schedule.controller.js | 89 --- .../schedule/schedule.partial.html | 6 - .../schedule/schedule.route.js | 51 -- .../src/management-jobs/scheduler/main.js | 52 ++ .../scheduler/schedulerForm.partial.html | 652 ++++++++++++++++++ .../src/scheduler/scheduler.controller.js | 10 +- .../src/scheduler/schedulerAdd.controller.js | 4 +- .../src/scheduler/schedulerEdit.controller.js | 4 +- 13 files changed, 733 insertions(+), 179 deletions(-) delete mode 100644 awx/ui/client/src/management-jobs/schedule/main.js delete mode 100644 awx/ui/client/src/management-jobs/schedule/schedule.controller.js delete mode 100644 awx/ui/client/src/management-jobs/schedule/schedule.partial.html delete mode 100644 awx/ui/client/src/management-jobs/schedule/schedule.route.js create mode 100644 awx/ui/client/src/management-jobs/scheduler/main.js create mode 100644 awx/ui/client/src/management-jobs/scheduler/schedulerForm.partial.html diff --git a/awx/ui/client/src/helpers/Schedules.js b/awx/ui/client/src/helpers/Schedules.js index 0924170311..14e62cdd4f 100644 --- a/awx/ui/client/src/helpers/Schedules.js +++ b/awx/ui/client/src/helpers/Schedules.js @@ -214,19 +214,20 @@ export default return function(params) { var scope = params.scope, callback= params.callback, - base = $location.path().replace(/^\//, '').split('/')[0], + base = params.base || $location.path().replace(/^\//, '').split('/')[0], url = GetBasePath(base), scheduler; - + console.log('AddSchedule $stateParams: ', $stateParams) if (!Empty($stateParams.template_id)) { url += $stateParams.template_id + '/schedules/'; } - else if (!Empty($stateParams.id)) { + else if (!Empty($stateParams.id) && base != 'system_job_templates') { url += $stateParams.id + '/schedules/'; } - else if (!Empty($stateParams.management_job)) { - url += $stateParams.management_job + '/schedules/'; - if(scope.management_job.id === 4){ + else if (base == 'system_job_templates') { + console.log('at least we know its a mgmt job!') + url += $stateParams.id + '/schedules/'; + if(scope.id === 4){ scope.isFactCleanup = true; scope.keep_unit_choices = [{ "label" : "Days", @@ -538,7 +539,7 @@ export default var scope = params.scope, parent_scope = params.parent_scope, iterator = (params.iterator) ? params.iterator : scope.iterator, - base = $location.path().replace(/^\//, '').split('/')[0]; + base = params.base || $location.path().replace(/^\//, '').split('/')[0]; scope.toggleSchedule = function(event, id) { try { diff --git a/awx/ui/client/src/management-jobs/card/card.controller.js b/awx/ui/client/src/management-jobs/card/card.controller.js index e9d5c4409c..5d32ae3e32 100644 --- a/awx/ui/client/src/management-jobs/card/card.controller.js +++ b/awx/ui/client/src/management-jobs/card/card.controller.js @@ -24,6 +24,7 @@ export default Rest.setUrl(defaultUrl); Rest.get() .success(function(data){ + console.log(data) $scope.mgmtCards = data.results; Wait('stop'); }) @@ -238,10 +239,9 @@ export default } }; - $scope.configureSchedule = function() { - $state.transitionTo('managementJobsSchedule', { - management_job: this.job_type, - management_job_id: this.card.id + $scope.configureSchedule = function(id) { + $state.transitionTo('managementJobSchedules', { + id: id }); }; diff --git a/awx/ui/client/src/management-jobs/card/card.partial.html b/awx/ui/client/src/management-jobs/card/card.partial.html index 3b4cfec9ba..17332be2bc 100644 --- a/awx/ui/client/src/management-jobs/card/card.partial.html +++ b/awx/ui/client/src/management-jobs/card/card.partial.html @@ -11,7 +11,7 @@ diff --git a/awx/ui/client/src/management-jobs/main.js b/awx/ui/client/src/management-jobs/main.js index b374b84857..35e6c10c76 100644 --- a/awx/ui/client/src/management-jobs/main.js +++ b/awx/ui/client/src/management-jobs/main.js @@ -5,12 +5,12 @@ *************************************************/ import managementJobsCard from './card/main'; -import managementJobsSchedule from './schedule/main'; +import managementJobsScheduler from './scheduler/main'; import list from './management-jobs.list'; export default angular.module('managementJobs', [ managementJobsCard.name, - managementJobsSchedule.name + managementJobsScheduler.name ]) .factory('managementJobsListObject', list); diff --git a/awx/ui/client/src/management-jobs/schedule/main.js b/awx/ui/client/src/management-jobs/schedule/main.js deleted file mode 100644 index e71036c9d6..0000000000 --- a/awx/ui/client/src/management-jobs/schedule/main.js +++ /dev/null @@ -1,15 +0,0 @@ -/************************************************* - * Copyright (c) 2015 Ansible, Inc. - * - * All Rights Reserved - *************************************************/ - -import route from './schedule.route'; -import controller from './schedule.controller'; - -export default - angular.module('managementJobsSchedule', []) - .controller('managementJobsScheduleController', controller) - .run(['$stateExtender', function($stateExtender) { - $stateExtender.addState(route); - }]); diff --git a/awx/ui/client/src/management-jobs/schedule/schedule.controller.js b/awx/ui/client/src/management-jobs/schedule/schedule.controller.js deleted file mode 100644 index c83b378674..0000000000 --- a/awx/ui/client/src/management-jobs/schedule/schedule.controller.js +++ /dev/null @@ -1,89 +0,0 @@ -/************************************************* - * Copyright (c) 2015 Ansible, Inc. - * - * All Rights Reserved - *************************************************/ - -/** - * @ngdoc function - * @name controllers.function:Schedules - * @description This controller's for schedules -*/ - -export default [ - '$scope', '$location', '$stateParams', 'SchedulesList', 'Rest', - 'ProcessErrors', 'GetBasePath', 'Wait','LoadSchedulesScope', 'GetChoices', - 'management_job', '$rootScope', - function($scope, $location, $stateParams, SchedulesList, Rest, - ProcessErrors, GetBasePath, Wait, LoadSchedulesScope, GetChoices, - management_job, $rootScope) { - var base, id, url, parentObject; - $scope.management_job = management_job; - base = $location.path().replace(/^\//, '').split('/')[0]; - - // GetBasePath('management_job') must map to 'system_job_templates' - // to match the api syntax - $rootScope.defaultUrls.management_jobs = 'api/v1/system_job_templates/'; - - if ($scope.removePostRefresh) { - $scope.removePostRefresh(); - } - $scope.removePostRefresh = $scope.$on('PostRefresh', function() { - var list = $scope.schedules; - list.forEach(function(element, idx) { - list[idx].play_tip = (element.enabled) ? 'Schedule is Active.'+ - ' Click to temporarily stop.' : 'Schedule is temporarily '+ - 'stopped. Click to activate.'; - }); - }); - - if ($scope.removeParentLoaded) { - $scope.removeParentLoaded(); - } - $scope.removeParentLoaded = $scope.$on('ParentLoaded', function() { - url += "schedules/"; - SchedulesList.well = true; - LoadSchedulesScope({ - parent_scope: $scope, - scope: $scope, - list: SchedulesList, - id: 'management_jobs_schedule', - url: url, - pageSize: 20 - }); - }); - - if ($scope.removeChoicesReady) { - $scope.removeChocesReady(); - } - $scope.removeChoicesReady = $scope.$on('choicesReady', function() { - // Load the parent object - id = $stateParams.management_job_id; - url = GetBasePath('system_job_templates') + id + '/'; - Rest.setUrl(url); - Rest.get() - .success(function(data) { - parentObject = data; - $scope.$emit('ParentLoaded'); - }) - .error(function(data, status) { - ProcessErrors($scope, data, status, null, { hdr: 'Error!', - msg: 'Call to ' + url + ' failed. GET returned: ' + status }); - }); - }); - - $scope.refreshJobs = function() { - $scope.search(SchedulesList.iterator); - }; - - Wait('start'); - - GetChoices({ - scope: $scope, - url: GetBasePath('system_jobs'), - field: 'type', - variable: 'type_choices', - callback: 'choicesReady' - }); - } -]; diff --git a/awx/ui/client/src/management-jobs/schedule/schedule.partial.html b/awx/ui/client/src/management-jobs/schedule/schedule.partial.html deleted file mode 100644 index 43b01efc55..0000000000 --- a/awx/ui/client/src/management-jobs/schedule/schedule.partial.html +++ /dev/null @@ -1,6 +0,0 @@ -
-
-
- -
-
diff --git a/awx/ui/client/src/management-jobs/schedule/schedule.route.js b/awx/ui/client/src/management-jobs/schedule/schedule.route.js deleted file mode 100644 index 837d6dfb86..0000000000 --- a/awx/ui/client/src/management-jobs/schedule/schedule.route.js +++ /dev/null @@ -1,51 +0,0 @@ -/************************************************* - * Copyright (c) 2015 Ansible, Inc. - * - * All Rights Reserved - *************************************************/ - -import {templateUrl} from '../../shared/template-url/template-url.factory'; - -export default { - name: 'managementJobsSchedule', - route: '/management_jobs/:management_job_id/schedules', - templateUrl: templateUrl('management-jobs/schedule/schedule'), - controller: 'managementJobsScheduleController', - data: { - activityStream: true, - activityStreamTarget: 'schedule' - }, - params: {management_job: null}, - resolve: { - features: ['FeaturesService', function(FeaturesService) { - return FeaturesService.get(); - }], - management_job: - [ '$stateParams', - '$q', - 'Rest', - 'GetBasePath', - 'ProcessErrors', - function($stateParams, $q, rest, getBasePath, ProcessErrors) { - if ($stateParams.management_job) { - return $q.when($stateParams.management_job); - } - - var managementJobId = $stateParams.management_job_id; - - var url = getBasePath('system_job_templates') + managementJobId + '/'; - rest.setUrl(url); - return rest.get() - .then(function(data) { - return data.data; - }).catch(function (response) { - ProcessErrors(null, response.data, response.status, null, { - hdr: 'Error!', - msg: 'Failed to get inventory script info. GET returned status: ' + - response.status - }); - }); - } - ] - } -}; diff --git a/awx/ui/client/src/management-jobs/scheduler/main.js b/awx/ui/client/src/management-jobs/scheduler/main.js new file mode 100644 index 0000000000..49498debbd --- /dev/null +++ b/awx/ui/client/src/management-jobs/scheduler/main.js @@ -0,0 +1,52 @@ +/************************************************* + * Copyright (c) 2016 Ansible, Inc. + * + * All Rights Reserved + *************************************************/ + + +import {templateUrl} from '../../shared/template-url/template-url.factory'; +import controller from '../../scheduler/scheduler.controller'; +import addController from '../../scheduler/schedulerAdd.controller'; +import editController from '../../scheduler/schedulerEdit.controller'; + +export default + angular.module('managementJobScheduler', []) + .controller('managementJobController', controller) + .controller('managementJobAddController', addController) + .controller('managementJobEditController', editController) + .run(['$stateExtender', function($stateExtender){ + $stateExtender.addState({ + name: 'managementJobSchedules', + route: '/management_jobs/:id/schedules', + templateUrl: templateUrl('scheduler/scheduler'), + controller: 'managementJobController', + resolve: { + features: ['FeaturesService', function(FeaturesService){ + return FeaturesService.get(); + }] + } + }); + $stateExtender.addState({ + name: 'managementJobSchedules.add', + route: '/add', + templateUrl: templateUrl('management-jobs/scheduler/schedulerForm'), + controller: 'managementJobAddController', + resolve: { + features: ['FeaturesService', function(FeaturesService){ + return FeaturesService.get(); + }] + } + }); + $stateExtender.addState({ + name: 'managementJobSchedules.edit', + route: '/add', + templateUrl: templateUrl('management-jobs/scheduler/schedulerForm'), + controller: 'managementJobEditController', + resolve: { + features: ['FeaturesService', function(FeaturesService){ + return FeaturesService.get(); + }] + } + }); + }]); \ No newline at end of file diff --git a/awx/ui/client/src/management-jobs/scheduler/schedulerForm.partial.html b/awx/ui/client/src/management-jobs/scheduler/schedulerForm.partial.html new file mode 100644 index 0000000000..a838db96a5 --- /dev/null +++ b/awx/ui/client/src/management-jobs/scheduler/schedulerForm.partial.html @@ -0,0 +1,652 @@ +
+
+
{{ schedulerName || "Add Schedule"}}
+
{{ schedulerName || "Edit Schedule"}}
+
+ +
+
+
+ +
+ +
+ + +
+ A schedule name is required. +
+
+
+ +
+ + + + +
+
+
+
+
+ +
+ + + : + + + + : + + + +
+
+ The time must be in HH24:MM:SS format. +
+
+
+ + +
+
+ + +
+
+
+
+ Frequency Details
+
+
+ + + +
+ Please provide a value between 1 and 999. +
+
+
+
+ +
+ +
+ The day must be between 1 and 31. +
+
+
+
+ +
+
+ + +
+
+
+
+ * + +
+
+ + +
+
+ The day must be between 1 and 31. +
+
+
+
+ +
+
+ + + +
+
+
+ +
+
+ + + + + + + +
+
+
+ Please select one or more days. +
+
+
+ +
+ +
+
+
+ + +
+ Please provide a value between 1 and 999. +
+
+
+ +
+ + + + +
+
+ Please provide a valid date. +
+
+
+
+
+ +
+ Note: For facts collected older than the time period specified, save one fact scan (snapshot) per time window (frequency). For example, facts older than 30 days are purged, while one weekly fact scan is kept. + Caution: Setting both numerical variables to "0" will delete all facts.
+ +
+ + +
A value is required.
+
This is not a valid number.
+
+ +
+
+ +
+
+ +
Please enter the number of days you would like to keep this data.
+
Please enter a valid number.
+
Please enter a non-negative number.
+
Please enter a number smaller than 9999.
+
+
+ +
+
+ +
+
+ +
+
+ +
Please enter the number of days you would like to keep this data.
+
Please enter a valid number.
+
Please enter a non-negative number.
+
Please enter a number smaller than 9999.
+
+
+ +
+
+ +
+
+

+ The scheduler options are invalid or incomplete. +

+
+
+ +
+ {{ rrule_nlp_description }} +
+
+ +
+ + + +
+
+
    +
  • + {{ occurrence.utc }} +
  • +
+
    +
  • + {{ occurrence.local }} +
  • +
+
+ +
+ + +
+
+
diff --git a/awx/ui/client/src/scheduler/scheduler.controller.js b/awx/ui/client/src/scheduler/scheduler.controller.js index d53ea19e28..af7a606168 100644 --- a/awx/ui/client/src/scheduler/scheduler.controller.js +++ b/awx/ui/client/src/scheduler/scheduler.controller.js @@ -19,11 +19,16 @@ export default [ GetBasePath, Wait, Find, LoadDialogPartial, LoadSchedulesScope, GetChoices) { ClearScope(); + console.log($stateParams) var base, e, id, url, parentObject; - base = $location.path().replace(/^\//, '').split('/')[0]; - + if (base == 'management_jobs') { + $scope.base = base = 'system_job_templates'; + } + if ($stateParams.job_type){ + $scope.job_type = $stateParams.job_type; + } if ($scope.removePostRefresh) { $scope.removePostRefresh(); } @@ -87,4 +92,5 @@ export default [ variable: 'type_choices', callback: 'choicesReady' }); + console.log($scope) }]; diff --git a/awx/ui/client/src/scheduler/schedulerAdd.controller.js b/awx/ui/client/src/scheduler/schedulerAdd.controller.js index 26be29c03a..6e3ec321e9 100644 --- a/awx/ui/client/src/scheduler/schedulerAdd.controller.js +++ b/awx/ui/client/src/scheduler/schedulerAdd.controller.js @@ -6,6 +6,7 @@ export default ['$compile', '$state', '$stateParams', 'AddSchedule', 'Wait', '$s $scope.$on("formUpdated", function() { $rootScope.$broadcast("loadSchedulerDetailPane"); }); + console.log('schedulerAdd.controller $scope: ', $scope) $scope.$watchGroup(["schedulerName", "schedulerStartDt", @@ -47,7 +48,8 @@ export default ['$compile', '$state', '$stateParams', 'AddSchedule', 'Wait', '$s AddSchedule({ scope: $scope, - callback: 'SchedulesRefresh' + callback: 'SchedulesRefresh', + base: $scope.base ? $scope.base : null }); var callSelect2 = function() { diff --git a/awx/ui/client/src/scheduler/schedulerEdit.controller.js b/awx/ui/client/src/scheduler/schedulerEdit.controller.js index fb8d8052b5..d5754c4acb 100644 --- a/awx/ui/client/src/scheduler/schedulerEdit.controller.js +++ b/awx/ui/client/src/scheduler/schedulerEdit.controller.js @@ -6,6 +6,7 @@ export default ['$compile', '$state', '$stateParams', 'EditSchedule', 'Wait', '$ $scope.$on("formUpdated", function() { $rootScope.$broadcast("loadSchedulerDetailPane"); }); + console.log($scope) $scope.$watchGroup(["schedulerName", "schedulerStartDt", @@ -51,7 +52,8 @@ export default ['$compile', '$state', '$stateParams', 'EditSchedule', 'Wait', '$ EditSchedule({ scope: $scope, id: parseInt($stateParams.schedule_id), - callback: 'SchedulesRefresh' + callback: 'SchedulesRefresh', + base: $scope.base ? $scope.base: null }); var callSelect2 = function() { From 247c78c44d217b9cc5877da96dc733f1acbe343e Mon Sep 17 00:00:00 2001 From: Leigh Johnson Date: Fri, 19 Feb 2016 10:59:58 -0500 Subject: [PATCH 2/4] #696 clean up logging --- awx/ui/client/src/helpers/Schedules.js | 4 +--- awx/ui/client/src/scheduler/scheduler.controller.js | 2 -- awx/ui/client/src/scheduler/schedulerAdd.controller.js | 1 - 3 files changed, 1 insertion(+), 6 deletions(-) diff --git a/awx/ui/client/src/helpers/Schedules.js b/awx/ui/client/src/helpers/Schedules.js index 14e62cdd4f..9b7566e678 100644 --- a/awx/ui/client/src/helpers/Schedules.js +++ b/awx/ui/client/src/helpers/Schedules.js @@ -217,7 +217,6 @@ export default base = params.base || $location.path().replace(/^\//, '').split('/')[0], url = GetBasePath(base), scheduler; - console.log('AddSchedule $stateParams: ', $stateParams) if (!Empty($stateParams.template_id)) { url += $stateParams.template_id + '/schedules/'; } @@ -225,9 +224,8 @@ export default url += $stateParams.id + '/schedules/'; } else if (base == 'system_job_templates') { - console.log('at least we know its a mgmt job!') url += $stateParams.id + '/schedules/'; - if(scope.id === 4){ + if($stateParams.id == 4){ scope.isFactCleanup = true; scope.keep_unit_choices = [{ "label" : "Days", diff --git a/awx/ui/client/src/scheduler/scheduler.controller.js b/awx/ui/client/src/scheduler/scheduler.controller.js index af7a606168..d1209b91da 100644 --- a/awx/ui/client/src/scheduler/scheduler.controller.js +++ b/awx/ui/client/src/scheduler/scheduler.controller.js @@ -19,7 +19,6 @@ export default [ GetBasePath, Wait, Find, LoadDialogPartial, LoadSchedulesScope, GetChoices) { ClearScope(); - console.log($stateParams) var base, e, id, url, parentObject; base = $location.path().replace(/^\//, '').split('/')[0]; @@ -92,5 +91,4 @@ export default [ variable: 'type_choices', callback: 'choicesReady' }); - console.log($scope) }]; diff --git a/awx/ui/client/src/scheduler/schedulerAdd.controller.js b/awx/ui/client/src/scheduler/schedulerAdd.controller.js index 6e3ec321e9..a278af8a28 100644 --- a/awx/ui/client/src/scheduler/schedulerAdd.controller.js +++ b/awx/ui/client/src/scheduler/schedulerAdd.controller.js @@ -6,7 +6,6 @@ export default ['$compile', '$state', '$stateParams', 'AddSchedule', 'Wait', '$s $scope.$on("formUpdated", function() { $rootScope.$broadcast("loadSchedulerDetailPane"); }); - console.log('schedulerAdd.controller $scope: ', $scope) $scope.$watchGroup(["schedulerName", "schedulerStartDt", From 5f75fa9b467575cb49186d3552aae6a8058f7a1d Mon Sep 17 00:00:00 2001 From: Leigh Johnson Date: Fri, 19 Feb 2016 12:04:09 -0500 Subject: [PATCH 3/4] #696 remove logging pt. 2 --- awx/ui/client/src/management-jobs/card/card.controller.js | 1 - awx/ui/client/src/scheduler/schedulerEdit.controller.js | 1 - 2 files changed, 2 deletions(-) diff --git a/awx/ui/client/src/management-jobs/card/card.controller.js b/awx/ui/client/src/management-jobs/card/card.controller.js index 5d32ae3e32..b74926f652 100644 --- a/awx/ui/client/src/management-jobs/card/card.controller.js +++ b/awx/ui/client/src/management-jobs/card/card.controller.js @@ -24,7 +24,6 @@ export default Rest.setUrl(defaultUrl); Rest.get() .success(function(data){ - console.log(data) $scope.mgmtCards = data.results; Wait('stop'); }) diff --git a/awx/ui/client/src/scheduler/schedulerEdit.controller.js b/awx/ui/client/src/scheduler/schedulerEdit.controller.js index d5754c4acb..05e9d7eef3 100644 --- a/awx/ui/client/src/scheduler/schedulerEdit.controller.js +++ b/awx/ui/client/src/scheduler/schedulerEdit.controller.js @@ -6,7 +6,6 @@ export default ['$compile', '$state', '$stateParams', 'EditSchedule', 'Wait', '$ $scope.$on("formUpdated", function() { $rootScope.$broadcast("loadSchedulerDetailPane"); }); - console.log($scope) $scope.$watchGroup(["schedulerName", "schedulerStartDt", From a99e21521b227892646116492a90f77e4965fbf9 Mon Sep 17 00:00:00 2001 From: Leigh Johnson Date: Thu, 25 Feb 2016 10:16:15 -0500 Subject: [PATCH 4/4] force jenkins rebuild --- awx/ui/client/src/management-jobs/main.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/awx/ui/client/src/management-jobs/main.js b/awx/ui/client/src/management-jobs/main.js index 35e6c10c76..e881baa0fb 100644 --- a/awx/ui/client/src/management-jobs/main.js +++ b/awx/ui/client/src/management-jobs/main.js @@ -1,5 +1,5 @@ /************************************************* - * Copyright (c) 2015 Ansible, Inc. + * Copyright (c) 2016 Ansible, Inc. * * All Rights Reserved *************************************************/