4 appDS2.controller("newSchedulerController", ["$scope", "$uibModal", "$uibModalInstance", "AaiService", "SchedulerService", "_",
5 "$log", "changeManagement", "$timeout", "$interval", "$filter", "VIDCONFIGURATION", "changeManagementService", newSchedulerController]);
7 function newSchedulerController($scope, $uibModal, $uibModalInstance, AaiService, SchedulerService, _, $log, changeManagement, $timeout, $interval, $filter, VIDCONFIGURATION, changeManagementService) {
11 var init = function () {
13 vm.schedulingInfo = {};
14 var callbackData = extractChangeManagementCallbackDataStr(changeManagement);
15 vm.vnfObject = changeManagement;
17 domain: 'ChangeManagement',
19 scheduleName: 'VnfUpgrade/DWF',
22 'WorkflowName': vm.scheduler.policy,
23 'CallbackUrl': 'http://127.0.0.1:8989/scheduler/v1/loopbacktest/vid',
24 'CallbackData': callbackData
28 normalDurationInSeconds: '',
29 additionalDurationInSeconds: '',
47 "domain": "ChangeManagement",
48 "scheduleName": "VnfUpgrade/DWF",
52 "WorkflowName": "HEAT Stack Software Update for vNFs",
53 "CallbackUrl": "http://127.0.0.1:8989/scheduler/v1/loopbacktest/vid",
54 "CallbackData": "testing"
58 "normalDurationInSeconds": 60,
59 "additionalDurationInSeconds": 60,
60 "concurrencyLimit": 60,
61 "policyId": "SNIRO_CM_1707.Config_MS_Demo_TimeLimitAndVerticalTopology_zone_localTime.1.xml",
65 "node": ["satmo415vbc", "satmo455vbc"],
68 "startTime": "2017-08-08T16:37:30.521Z",
69 "endTime": "2017-08-08T16:37:30.521Z"
78 vm.format = 'yyyy/MM/dd';
79 vm.todate = new Date();
80 vm.checkboxSelection = 'false';
85 vm.changeManagement = {};
89 AaiService.getSubscribers(function (response) {
90 vm.subscribers = response;
94 AaiService.getServices(function (response) {
95 vm.serviceTypes = response.data.service;
98 changeManagementService.getWorkflows()
99 .then(function (response) {
100 vm.workflows = response.data;
102 .catch(function (error) {
106 //TODO: Get the VNF names from backend dynamically
109 //TODO: Get the VNF types from backend dynamically
112 AaiService.getLoggedInUserID(function (response) {
113 vm.userID = response.data;
117 var policyName = JSON.stringify({
118 policyName: "SNIRO_1710.*",
120 service: "PlacementOptimizationPolicy"
123 SchedulerService.getPolicyInfo(policyName, function (response) {
124 vm.policys = response.data.entity;
128 vm.radioSelections = function (test) {
129 if (vm.checkboxSelection == "true") {
134 vm.close = function () {
135 $uibModalInstance.close();
139 function convertToSecs(number) {
141 if (vm.selectedOption === 'hours') {
142 totalSecs = number * 3600;
145 else if (vm.selectedOption === 'minutes') {
146 totalSecs = number * 60;
153 vm.submit = function () {
154 vm.schedulingInfo = {
155 scheduleId: vm.schedulerID,
156 approvalDateTime: '2017-08-08T16:37:30.521Z',
157 approvalUserId: "sy6266",
158 approvalStatus: 'Accepted',
159 approvalType: 'Tier 2'
162 var approvalObj = JSON.stringify(vm.schedulingInfo);
163 SchedulerService.getSubmitForapprovedTimeslots(approvalObj, function (response) {
164 if (response.status == 200) {
165 openConfirmationModal("Successfully Sent for Approval");
171 vm.reject = function () {
172 vm.schedulingInfo = {
173 scheduleId: vm.schedulerID,
174 approvalDateTime: '2017-08-08T16:37:30.521Z',
175 approvalUserId: "sy6266",
176 approvalStatus: 'Rejected',
177 approvalType: 'Tier 2'
180 var approvalObj = JSON.stringify(vm.schedulingInfo)
181 SchedulerService.getSubmitForapprovedTimeslots(approvalObj, function (response) {
182 if (response.status == 200) {
183 openConfirmationModal("Successfully sent for Rejection");
189 vm.schedule = function (myForm) {
190 $scope.$watch('fromDate', validateDates(myForm));
191 $scope.$watch('toDate', validateDates(myForm));
198 function sendSchedulerReq() {
199 var changeWindow = [{
204 var fromDate = $filter('date')(new Date(vm.fromDate), "yyyy-MM-ddTHH:mmZ", "UTC");
205 var toDate = $filter('date')(new Date(vm.toDate), "yyyy-MM-ddTHH:mmZ", "UTC");
207 changeWindow[0].startTime = fromDate;
208 changeWindow[0].endTime = toDate;
209 vm.schedulerObj.userId = vm.userID;
210 vm.schedulerObj.domainData[0].WorkflowName = changeManagement.workflow;
211 vm.schedulerObj.schedulingInfo.normalDurationInSeconds = convertToSecs(vm.scheduler.duration);
212 vm.schedulerObj.schedulingInfo.additionalDurationInSeconds = convertToSecs(vm.scheduler.fallbackDuration);
213 vm.schedulerObj.schedulingInfo.concurrencyLimit = vm.scheduler.concurrency;
214 vm.schedulerObj.schedulingInfo.policyId = vm.scheduler.policy.policyName;
215 vm.schedulerObj.schedulingInfo['vnfDetails'][0].groupId = 'groupId';
216 vm.schedulerObj.schedulingInfo['vnfDetails'][0].node = getVnfData(changeManagement.vnfNames);
218 vm.schedulerObj.schedulingInfo['vnfDetails'][0].changeWindow = changeWindow;
219 if (vm.checkboxSelection == "true") { //When Scheduled now we remove the changeWindow
220 delete vm.schedulerObj.schedulingInfo['vnfDetails'][0].changeWindow;
222 vm.schedulerObj.schedulingInfo['vnfDetails'][0].changeWindow = changeWindow;
223 delete vm.schedulerObj.schedulingInfo['vnfDetails'][0].changeWindow;
225 var requestScheduler = JSON.stringify(vm.schedulerObj);
226 console.log(requestScheduler);
227 SchedulerService.getStatusSchedulerId(requestScheduler, function (response) {
228 vm.schedulerID = response.data.uuid;
229 vm.isSpinnerVisible = true;
230 if (vm.schedulerID) {
231 var scheduledID = JSON.stringify({scheduleId: vm.schedulerID});
232 seviceCallToGetTimeSlots();
237 function seviceCallToGetTimeSlots() {
239 SchedulerService.getTimeSotsForSchedulerId(vm.schedulerID, function (response) {
240 if (vm.checkboxSelection == "false") {
241 if (response.data.entity.schedule) {
242 var scheduleColl = JSON.parse(response.data.entity.schedule);
243 if (scheduleColl.length > 0) {
244 vm.timeSlots = scheduleColl;
245 vm.isSpinnerVisible = false;
246 hasvaluereturnd = false;
248 openConfirmationModal(response.data.entity.scheduleId + " Successfully Returned TimeSlots.");
253 if (vm.timeSlots.length == 0 && hasthresholdreached == false) {
254 var polltime = VIDCONFIGURATION.SCHEDULER_POLLING_INTERVAL_MSECS;
255 pollpromise = poll(polltime, function () {
256 if (vm.timeSlots.length == 0) {
257 hasvaluereturnd = true;
258 seviceCallToGetTimeSlots()
261 hasvaluereturnd = false;
267 openConfirmationModal("Timeout error.")
273 if (response.data.entity) {
274 vm.isSpinnerVisible = false;
275 openConfirmationModal(response.data.entity.scheduleId + " Successfully Ready for Schedule.")
283 function openConfirmationModal(jobInfo) {
284 var modalInstance = $uibModal.open({
285 templateUrl: 'app/vid/scripts/modals/alert-new-scheduler/alert-new-scheduler.html',
286 controller: 'alertNewSchedulerController',
289 jobInfo: function () {
296 var hasvaluereturnd = true; // Flag to check
297 var hasthresholdreached = false;
298 var thresholdvalue = VIDCONFIGURATION.SCHEDULER_MAX_POLLS; // interval threshold value
300 function poll(interval, callback) {
301 return $interval(function () {
302 if (hasvaluereturnd) { //check flag before start new call
303 callback(hasvaluereturnd);
306 thresholdvalue = thresholdvalue - 1; //Decrease threshold value
307 if (thresholdvalue == 0) {
308 $scope.stopPoll(); // Stop $interval if it reaches to threshold
315 $scope.stopPoll = function () {
316 $interval.cancel(pollpromise);
317 thresholdvalue = 0; //reset all flags.
318 hasvaluereturnd = false;
319 hasthresholdreached = true;
320 vm.isSpinnerVisible = false;
323 function getVnfData(arrColl) {
324 var vnfcolletion = [];
326 for (var i = 0; i < arrColl.length; i++) {
327 vnfcolletion.push(arrColl[i].name);
333 function validateDates(form) {
334 if (vm.checkboxSelection == "false") {
336 if (form.startDate.$error.invalidDate || form.endDate.$error.invalidDate) {
337 form.startDate.$setValidity("endBeforeStart", true); //already invalid (per validDate directive)
339 //depending on whether the user used the date picker or typed it, this will be different (text or date type).
340 //creating a new date object takes care of that.
341 var endDate = new Date(vm.toDate);
342 var startDate = new Date(vm.fromDate);
343 form.startDate.$setValidity("endBeforeStart", endDate >= startDate);
349 function extractChangeManagementCallbackDataStr(changeManagement) {
352 result.requestType = changeManagement.workflow;
353 result.requestDetails = [];
355 _.forEach(changeManagement.vnfNames, function (vnf) {
359 vnfInstanceId: vnf.id,
362 modelInvariantId: vnf.properties['model-invariant-id'],
363 modelVersionId: vnf.modelVersionId,
364 modelName: vnf.properties['vnf-name'],
365 modelVersion: vnf.version,
366 modelCustomizationName: vnf.properties['model-customization-name'],
367 modelCustomizationId: vnf.properties['model-customization-id']
369 cloudConfiguration: {
370 lcpCloudRegionId: vnf.availableVersions[0].cloudConfiguration.lcpCloudRegionId,
371 tenantId: vnf.availableVersions[0].cloudConfiguration.tenantId
374 source: vnf.availableVersions[0].requestInfo.source,
375 suppressRollback: vnf.availableVersions[0].requestInfo.suppressRollback,
376 requestorId: vnf.availableVersions[0].requestInfo.requestorId
378 relatedInstanceList: [],
380 usePreload: vnf.availableVersions[0].requestParameters.usePreload
384 var serviceInstanceId = '';
385 _.forEach(vnf['service-instance-node'], function (instanceNode) {
386 if(instanceNode['node-type'] === 'service-instance'){
387 serviceInstanceId = instanceNode.properties['service-instance-id'];
392 _.forEach(vnf.availableVersions[0].relatedInstanceList, function (related) {
394 var rel = related.relatedInstance;
396 var relatedInstance = {
397 instanceId: serviceInstanceId,
399 modelType: rel.modelInfo.modelType,
400 modelInvariantId: rel.modelInfo.modelInvariantId,
401 modelVersionId: rel.modelInfo.modelVersionId,
402 modelName: rel.modelInfo.modelName,
403 modelVersion: rel.modelInfo.modelVersion,
404 modelCustomizationName: rel.modelInfo.modelCustomizationName,
405 modelCustomizationId: rel.modelInfo.modelCustomizationId
409 if (rel.vnfInstanceId)
410 relatedInstance.instanceId = rel.vnfInstanceId;
412 data.relatedInstanceList.push({relatedInstance: relatedInstance});
416 result.requestDetails.push(data);
421 // _.forEach(changeManagement.vnfNames, function (vnfName) {
422 // if (vnfName && vnfName.version) {
423 // if (vnfName.selectedFile) {
424 // vnfName.version.requestParameters.userParams = vnfName.selectedFile;
426 // result.requestDetails.push(vnfName.version)
430 return JSON.stringify(result);
436 appDS2.directive('validDate', function () {
440 link: function (scope, element, attrs, control) {
441 control.$parsers.push(function (viewValue) {
442 var newDate = model.$viewValue;
443 control.$setValidity("invalidDate", true);
444 if (typeof newDate === "object" || newDate == "") return newDate; // pass through if we clicked date from popup
445 if (!newDate.match(/^\d{1,2}\/\d{1,2}\/((\d{2})|(\d{4}))$/))
446 control.$setValidity("invalidDate", false);