2 * ============LICENSE_START=======================================================
\r
4 * ================================================================================
\r
5 * Copyright (C) 2017 - 2019 AT&T Intellectual Property. All rights reserved.
\r
6 * ================================================================================
\r
7 * Licensed under the Apache License, Version 2.0 (the "License");
\r
8 * you may not use this file except in compliance with the License.
\r
9 * You may obtain a copy of the License at
\r
11 * http://www.apache.org/licenses/LICENSE-2.0
\r
13 * Unless required by applicable law or agreed to in writing, software
\r
14 * distributed under the License is distributed on an "AS IS" BASIS,
\r
15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
\r
16 * See the License for the specific language governing permissions and
\r
17 * limitations under the License.
\r
18 * ============LICENSE_END=========================================================
\r
23 var MsoService = function($http, $log, $q, PropertyService, AaiService, UtilityService, COMPONENT, FIELD, moment) {
\r
28 * Common function to handle both create and delete instance requests
\r
30 var requestInstanceUpdate = function(request, successCallbackFunction) {
\r
31 $log.debug("MsoService:requestInstanceUpdate: request:");
\r
32 $log.debug(request);
\r
33 $http.post( "mso/" + request.url, {
\r
34 requestDetails : request.requestDetails
\r
36 timeout : PropertyService.getServerResponseTimeoutMsec()
\r
37 }).then(successCallbackFunction)["catch"]
\r
38 (UtilityService.runHttpErrorHandler);
\r
41 var checkValidStatus = function(response) {
\r
42 if (response.data.status < 200 || response.data.status > 202) {
\r
44 type : FIELD.ID.MSO_FAILURE
\r
49 var addListEntry = function(name, value) {
\r
50 var entry = '"' + name + '": ';
\r
51 if (value === undefined) {
\r
52 return entry + "undefined";
\r
54 return entry + '"' + value + '"';
\r
58 var buildPayloadForServiceActivateDeactivate = function (model, userId) {
\r
59 var requestDetails = {
\r
61 "modelType": "service",
\r
62 "modelInvariantId": model.service.invariantUuid,
\r
63 "modelVersionId": model.service.uuid,
\r
64 "modelName": model.service.name,
\r
65 "modelVersion": model.service.version
\r
69 "requestorId": userId
\r
71 "requestParameters": {
\r
72 // aicZone was sent from here
\r
77 $log.debug("Service Activate/Deactivate payload", requestDetails);
\r
79 return requestDetails;
\r
83 var buildPayloadForActivateFabricConfiguration = function (model, userId) {
\r
84 var requestDetails = {
\r
86 "modelType": "service",
\r
87 "modelInvariantId": model.service.invariantUuid,
\r
88 "modelVersionId": model.service.uuid,
\r
89 "modelName": model.service.name,
\r
90 "modelVersion": model.service.version
\r
94 "requestorId": userId
\r
96 "requestParameters": {
\r
101 $log.debug("Service Activate Fabric Configuration payload", requestDetails);
\r
103 return requestDetails;
\r
107 var activateInstance = function(requestParams) {
\r
108 var requestDetails = buildPayloadForServiceActivateDeactivate(requestParams.model, requestParams.userId);
\r
110 return sendPostRequest(COMPONENT.MSO_ACTIVATE_INSTANCE.replace('@serviceInstanceId', requestParams.instance.serviceInstanceId),
\r
114 var deactivateInstance = function(requestParams) {
\r
115 var requestDetails = buildPayloadForServiceActivateDeactivate(requestParams.model, requestParams.userId);
\r
117 return sendPostRequest(COMPONENT.MSO_DEACTIVATE_INSTANCE.replace('@serviceInstanceId', requestParams.instance.serviceInstanceId),
\r
121 var sendPostRequestWithBody = function(url, requestBody) {
\r
122 var deferred = $q.defer();
\r
124 $http.post(url, requestBody, {
\r
125 timeout: PropertyService.getServerResponseTimeoutMsec()
\r
126 }).success(function (response) {
\r
127 deferred.resolve({data: response});
\r
128 }).error(function (data, status) {
\r
129 deferred.reject({message: data, status: status});
\r
133 return deferred.promise;
\r
136 var sendPostRequest = function(url, requestDetails) {
\r
137 return sendPostRequestWithBody(url, {requestDetails: requestDetails});
\r
141 createInstance : requestInstanceUpdate,
\r
142 deleteInstance : requestInstanceUpdate,
\r
143 createAndDeleteInstance: function(requestParams) {
\r
144 return sendPostRequest("mso/" + requestParams.url, requestParams.requestDetails);
\r
146 getOrchestrationRequest : function(requestId, successCallbackFunction) {
\r
147 $log.debug("MsoService:getOrchestrationRequest: requestId: "
\r
150 "mso/mso_get_orch_req/"
\r
151 + requestId + "?r=" + Math.random(),
\r
153 timeout : PropertyService
\r
154 .getServerResponseTimeoutMsec()
\r
155 }).then(successCallbackFunction)["catch"]
\r
156 (UtilityService.runHttpErrorHandler);
\r
158 getOrchestrationRequests : function(filterString,
\r
159 successCallbackFunction) {
\r
160 $log.debug("MsoService:getOrchestrationRequests: filterString: "
\r
163 "mso/mso_get_orch_reqs/"
\r
164 + encodeURIComponent(filterString) + "?r="
\r
167 timeout : PropertyService
\r
168 .getServerResponseTimeoutMsec()
\r
169 }).then(successCallbackFunction)["catch"]
\r
170 (UtilityService.runHttpErrorHandler);
\r
172 getFormattedCommonResponse : function(response) {
\r
173 return UtilityService.getCurrentTime() + " HTTP Status: "
\r
174 + UtilityService.getHttpStatusText(response.data.status)
\r
175 + "\n" + angular.toJson(response.data.entity, true)
\r
178 checkValidStatus : checkValidStatus,
\r
179 getFormattedGetOrchestrationRequestsResponse : function(response) {
\r
180 UtilityService.checkUndefined(COMPONENT.ENTITY, response.data.entity);
\r
181 UtilityService.checkUndefined(COMPONENT.STATUS, response.data.status);
\r
182 checkValidStatus(response);
\r
184 var list = response.data.entity.requestList;
\r
185 UtilityService.checkUndefined(FIELD.ID.REQUEST_LIST, list);
\r
189 for (var i = 0; i < list.length; i++) {
\r
190 var request = list[i].request;
\r
191 message += addListEntry(FIELD.ID.REQUEST_ID, request.requestId) + ",\n";
\r
192 message += addListEntry(FIELD.ID.REQUEST_TYPE, request.requestType)
\r
194 var status = request.requestStatus;
\r
195 if (status === undefined) {
\r
196 message += addListEntry(FIELD.ID.REQUEST_STATUS, undefined) + "\n";
\r
198 if(status.finishTime) {
\r
199 message += addListEntry(FIELD.ID.TIMESTAMP, moment(new Date(status.finishTime)).format("ddd, DD MMM YYYY HH:mm:ss"))
\r
202 message += addListEntry(FIELD.ID.REQUEST_STATE, status.requestState)
\r
204 message += addListEntry(FIELD.ID.REQUEST_STATUS,
\r
205 status.statusMessage)
\r
207 message += addListEntry(FIELD.ID.PERCENT_PROGRESS,
\r
208 status.percentProgress)
\r
211 if (i < (list.length - 1)) {
\r
217 getFormattedSingleGetOrchestrationRequestResponse : function (response) {
\r
218 UtilityService.checkUndefined(COMPONENT.ENTITY, response.data.entity);
\r
219 UtilityService.checkUndefined(COMPONENT.STATUS, response.data.status);
\r
220 //checkValidStatus(response);
\r
223 if (! (response && response.data && response.data.entity)) {
\r
226 if ( UtilityService.hasContents (response.data.entity.request) ) {
\r
227 var request = response.data.entity.request;
\r
228 message += addListEntry(FIELD.ID.REQUEST_ID, request.requestId) + ",\n";
\r
229 message += addListEntry(FIELD.ID.REQUEST_TYPE, request.requestType)
\r
231 var status = request.requestStatus;
\r
232 if (status === undefined) {
\r
233 message += addListEntry(FIELD.ID.REQUEST_STATUS, undefined) + "\n";
\r
235 message += addListEntry(FIELD.ID.TIMESTAMP, moment(new Date()).format("ddd, DD MMM YYYY HH:mm:ss"))
\r
237 message += addListEntry(FIELD.ID.REQUEST_STATE, status.requestState)
\r
239 message += addListEntry(FIELD.ID.REQUEST_STATUS,
\r
240 status.statusMessage)
\r
242 message += addListEntry(FIELD.ID.PERCENT_PROGRESS,
\r
243 status.percentProgress)
\r
248 if (UtilityService.hasContents(response.data.status) && UtilityService.hasContents(response.data.entity)) {
\r
249 message = this.getFormattedCommonResponse(response) + "\n";
\r
254 getManualTasks : function(requestId) {
\r
255 $log.debug("MsoService:getManualTasks: requestId: "
\r
258 "mso/mso_get_man_task/" + requestId,
\r
260 timeout: PropertyService
\r
261 .getServerResponseTimeoutMsec()
\r
263 .catch(UtilityService.runHttpErrorHandler);
\r
265 completeTask: function(taskId, taskToComplete) {
\r
266 var promise = new Promise(function (resolve, reject) {
\r
267 $log.debug("MsoService:completeTask: taskId: "
\r
269 AaiService.getLoggedInUserID(function (response) {
\r
270 var attuid = response.data;
\r
271 var source = "VID";
\r
276 responseValue: taskToComplete,
\r
277 requestorId: attuid
\r
283 "mso/mso_post_man_task/" + taskId, data,
\r
285 timeout: PropertyService
\r
286 .getServerResponseTimeoutMsec()
\r
287 }).then(function (response) {
\r
290 .catch(UtilityService.runHttpErrorHandler);
\r
298 showResponseContentError : function(error, showFunction) {
\r
299 switch (error.type) {
\r
300 case "undefinedObject":
\r
301 showFunction(FIELD.ERROR.SYSTEM_FAILURE, error.message);
\r
304 showFunction(FIELD.ERROR.MSO, "");
\r
307 showFunction(FIELD.ERROR.SYSTEM_FAILURE);
\r
310 activateInstance: activateInstance,
\r
311 deactivateInstance: deactivateInstance,
\r
314 createConfigurationInstance: function(requestParams) {
\r
316 const modelInfoOf = function (instance) {
\r
317 const modelInfo = {
\r
318 "modelType": "vnf",
\r
319 "modelInvariantId": instance.properties['model-invariant-id'],
\r
320 "modelVersionId": instance.properties['model-version-id'],
\r
321 "modelName": instance.properties['model-name'],
\r
322 "modelVersion": instance.properties['model-version'],
\r
323 "modelCustomizationId": instance.properties['model-customization-id']
\r
326 $log.debug("model info from instance", instance);
\r
327 $log.debug("model info to model", modelInfo);
\r
333 "requestDetails": {
\r
335 "modelType": "configuration",
\r
336 "modelInvariantId": requestParams.configurationModelInfo.modelInvariantId,
\r
337 "modelVersionId": requestParams.configurationModelInfo.modelNameVersionId,
\r
338 "modelName": requestParams.configurationModelInfo.modelName, // "Port Mirroring Configuration"
\r
339 "modelVersion": requestParams.configurationModelInfo.modelVersion,
\r
340 "modelCustomizationId": requestParams.configurationModelInfo.customizationUuid,
\r
341 "modelCustomizationName": requestParams.configurationModelInfo.modelCustomizationName
\r
343 "cloudConfiguration": {
\r
344 "lcpCloudRegionId": requestParams.portMirroringConfigFields.cloudRegionId,
\r
345 "cloudOwner" : requestParams.portMirroringConfigFields.cloudOwner
\r
348 "instanceName": requestParams.portMirroringConfigFields.instanceName.value,
\r
350 "requestorId": requestParams.attuuid
\r
352 "relatedInstanceList": [
\r
354 "relatedInstance": {
\r
355 "instanceId": requestParams.topServiceInstanceId,
\r
357 "modelType": "service", // relatedTopModelsInfo.modelType
\r
358 "modelInvariantId": requestParams.relatedTopModelsInfo.modelInvariantId,
\r
359 "modelVersionId": requestParams.relatedTopModelsInfo.modelNameVersionId,
\r
360 "modelName": requestParams.relatedTopModelsInfo.modelName,
\r
361 "modelVersion": requestParams.relatedTopModelsInfo.modelVersion
\r
366 "relatedInstance": {
\r
367 "instanceId": requestParams.portMirroringConfigFields.sourceInstance.properties['vnf-id'],
\r
368 "instanceDirection": "source",
\r
369 "modelInfo": modelInfoOf(requestParams.portMirroringConfigFields.sourceInstance)
\r
373 "relatedInstance": requestParams.configurationByPolicy ? {
\r
374 "instanceName": requestParams.portMirroringConfigFields.destinationInstance.properties['pnfName'],
\r
375 "instanceDirection": "destination",
\r
380 "instanceId": requestParams.portMirroringConfigFields.destinationInstance.properties['vnf-id'],
\r
381 "instanceDirection": "destination",
\r
382 "modelInfo": modelInfoOf(requestParams.portMirroringConfigFields.destinationInstance)
\r
386 "requestParameters": {
\r
392 $log.debug("payload", payload);
\r
394 var deferred = $q.defer();
\r
396 'mso','mso_create_configuration_instance',
\r
397 requestParams.topServiceInstanceId,
\r
398 'configurations',''
\r
399 ].join(COMPONENT.FORWARD_SLASH),
\r
401 .success(function (response) {
\r
402 deferred.resolve({data : response});
\r
403 }).error(function (data, status) {
\r
404 deferred.reject({message: data, status: status});
\r
406 return deferred.promise;
\r
408 deleteConfiguration: function(requestParams, configuration) {
\r
410 var requestDetails = {
\r
411 "modelInfo": requestParams.configurationModel,
\r
412 "cloudConfiguration": {
\r
413 "lcpCloudRegionId": configuration.configData.cloudRegionId
\r
417 "requestorId": requestParams.userId
\r
419 "requestParameters": {
\r
424 var url = "mso/mso_delete_configuration/" + requestParams.serviceInstanceId + "/configurations/" + requestParams.configurationId;
\r
425 return sendPostRequest(url, requestDetails);
\r
427 toggleConfigurationStatus: function(requestParams, configuration) {
\r
429 var requestDetails = {
\r
430 "modelInfo": requestParams.configurationModel,
\r
431 "cloudConfiguration": {
\r
432 "lcpCloudRegionId": configuration && configuration.configData ? configuration.configData.cloudRegionId : null
\r
436 "requestorId": requestParams.userId
\r
438 "relatedInstanceList": [{
\r
439 "relatedInstance": {
\r
440 "instanceId": requestParams.serviceInstanceId,
\r
441 "modelInfo": requestParams.serviceModel
\r
444 "requestParameters": {
\r
450 switch (requestParams.configStatus) {
\r
451 case FIELD.STATUS.AAI_CREATED:
\r
452 case FIELD.STATUS.AAI_INACTIVE:
\r
453 url = "mso/mso_activate_configuration/"+requestParams.serviceInstanceId+"/configurations/"+requestParams.configurationId;
\r
455 case FIELD.STATUS.AAI_ACTIVE:
\r
456 url = "mso/mso_deactivate_configuration/"+requestParams.serviceInstanceId+"/configurations/"+requestParams.configurationId;
\r
460 return sendPostRequest(url, requestDetails);
\r
463 togglePortStatus: function(requestParams, configuration, defaultParams) {
\r
465 var requestDetails = {
\r
466 "modelInfo": requestParams.configurationModel,
\r
467 "cloudConfiguration": {
\r
468 "lcpCloudRegionId": configuration && configuration.configData ? configuration.configData.cloudRegionId : null
\r
472 "requestorId": requestParams.userId
\r
474 "relatedInstanceList": [
\r
476 "relatedInstance": {
\r
477 "instanceId": requestParams.serviceInstanceId,
\r
478 "modelInfo": requestParams.serviceModel
\r
482 "relatedInstance": {
\r
483 "instanceId": requestParams.portId,
\r
484 "instanceDirection": "source",
\r
486 "modelType": "connectionPoint"
\r
494 switch (requestParams.portStatus) {
\r
495 case FIELD.STATUS.AAI_ENABLED:
\r
496 url = "mso/mso_disable_port_configuration/"+requestParams.serviceInstanceId+"/configurations/"+requestParams.configurationId;
\r
498 case FIELD.STATUS.AAI_DISABLED:
\r
499 url = "mso/mso_enable_port_configuration/"+requestParams.serviceInstanceId+"/configurations/"+requestParams.configurationId;
\r
503 return sendPostRequest(url, requestDetails);
\r
506 buildPayloadForAssociateDissociate: function(serviceModelInfo, attuuid, instanceId, pnf) {
\r
509 "modelType": "service",
\r
510 "modelInvariantId": serviceModelInfo.invariantUuid,
\r
511 "modelVersionId": serviceModelInfo.uuid,
\r
512 "modelName": serviceModelInfo.name,
\r
513 "modelVersion": serviceModelInfo.version
\r
517 "requestorId": attuuid
\r
519 "relatedInstanceList": [
\r
521 "relatedInstance": {
\r
522 "instanceName": pnf,
\r
528 "requestParameters": {
\r
533 $log.debug("payload", payload);
\r
537 associatePnf: function(requestParams) {
\r
539 var payload = this.buildPayloadForAssociateDissociate(requestParams.serviceModelInfo, requestParams.attuuid, requestParams.instanceId, requestParams.pnf);
\r
540 return sendPostRequest([
\r
541 COMPONENT.MSO, COMPONENT.MSO_CREATE_REALATIONSHIP,
\r
542 requestParams.instanceId,
\r
544 ].join(COMPONENT.FORWARD_SLASH), payload);
\r
546 dissociatePnf: function(requestParams) {
\r
548 var payload = this.buildPayloadForAssociateDissociate(requestParams.serviceModelInfo, requestParams.attuuid, requestParams.serviceInstanceId, requestParams.pnf);
\r
550 return sendPostRequest([
\r
551 COMPONENT.MSO, COMPONENT.MSO_REMOVE_RELATIONSHIP,
\r
552 requestParams.serviceInstanceId,
\r
554 ].join(COMPONENT.FORWARD_SLASH), payload);
\r
556 activateFabricConfiguration: function(requestParams) {
\r
557 var payload = buildPayloadForActivateFabricConfiguration(requestParams.model, requestParams.userId);
\r
559 var url = COMPONENT.MSO_ACTIVATE_FABRIC_CONFIGURATION_INSTANCE.replace('@serviceInstanceId', requestParams.serviceInstanceId);
\r
560 return sendPostRequest(url, payload);
\r
562 deactivateAndCloudDelete : function (requestParams) {
\r
564 tenantId: requestParams.tenantId,
\r
565 lcpCloudRegionId: requestParams.lcpCloudRegionId,
\r
566 userId: requestParams.userId
\r
569 var url = COMPONENT.MSO_DEACTIVATE_AND_CLOUD_DELETE_INSTANCE.replace('@serviceInstanceId', requestParams.serviceInstanceId)
\r
570 .replace('@vnfInstanceId', requestParams.vnfInstanceId)
\r
571 .replace('@vfModuleInstanceId', requestParams.vfModuleInstanceId);
\r
573 return sendPostRequestWithBody(url, payload);
\r
578 appDS2.factory("MsoService", MsoService );
\r