diff options
6 files changed, 700 insertions, 581 deletions
diff --git a/vid-app-common/src/main/webapp/app/vid/scripts/services/msoService.js b/vid-app-common/src/main/webapp/app/vid/scripts/services/msoService.js index ac6eeeac6..04a20f286 100755 --- a/vid-app-common/src/main/webapp/app/vid/scripts/services/msoService.js +++ b/vid-app-common/src/main/webapp/app/vid/scripts/services/msoService.js @@ -1,578 +1,584 @@ -/*-
- * ============LICENSE_START=======================================================
- * VID
- * ================================================================================
- * Copyright (C) 2017 - 2019 AT&T Intellectual Property. All rights reserved.
- * ================================================================================
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ============LICENSE_END=========================================================
- */
-
-"use strict";
-
-var MsoService = function($http, $log, $q, PropertyService, AaiService, UtilityService, COMPONENT, FIELD, moment) {
-
- var _this = this;
-
- /*
- * Common function to handle both create and delete instance requests
- */
- var requestInstanceUpdate = function(request, successCallbackFunction) {
- $log.debug("MsoService:requestInstanceUpdate: request:");
- $log.debug(request);
- $http.post( "mso/" + request.url, {
- requestDetails : request.requestDetails
- }, {
- timeout : PropertyService.getServerResponseTimeoutMsec()
- }).then(successCallbackFunction)["catch"]
- (UtilityService.runHttpErrorHandler);
- };
-
- var checkValidStatus = function(response) {
- if (response.data.status < 200 || response.data.status > 202) {
- throw {
- type : FIELD.ID.MSO_FAILURE
- };
- }
- };
-
- var addListEntry = function(name, value) {
- var entry = '"' + name + '": ';
- if (value === undefined) {
- return entry + "undefined";
- } else {
- return entry + '"' + value + '"';
- }
- };
-
- var buildPayloadForServiceActivateDeactivate = function (model, userId) {
- var requestDetails = {
- "modelInfo": {
- "modelType": "service",
- "modelInvariantId": model.service.invariantUuid,
- "modelVersionId": model.service.uuid,
- "modelName": model.service.name,
- "modelVersion": model.service.version
- },
- "requestInfo": {
- "source": "VID",
- "requestorId": userId
- },
- "requestParameters": {
- // aicZone was sent from here
- "userParams": []
- }
- };
-
- $log.debug("Service Activate/Deactivate payload", requestDetails);
-
- return requestDetails;
-
- };
-
- var buildPayloadForActivateFabricConfiguration = function (model, userId) {
- var requestDetails = {
- "modelInfo": {
- "modelType": "service",
- "modelInvariantId": model.service.invariantUuid,
- "modelVersionId": model.service.uuid,
- "modelName": model.service.name,
- "modelVersion": model.service.version
- },
- "requestInfo": {
- "source": "VID",
- "requestorId": userId
- },
- "requestParameters": {
- "aLaCarte": false
- }
- };
-
- $log.debug("Service Activate Fabric Configuration payload", requestDetails);
-
- return requestDetails;
-
- };
-
- var activateInstance = function(requestParams) {
- var requestDetails = buildPayloadForServiceActivateDeactivate(requestParams.model, requestParams.userId);
-
- return sendPostRequest(COMPONENT.MSO_ACTIVATE_INSTANCE.replace('@serviceInstanceId', requestParams.instance.serviceInstanceId),
- requestDetails);
- };
-
- var deactivateInstance = function(requestParams) {
- var requestDetails = buildPayloadForServiceActivateDeactivate(requestParams.model, requestParams.userId);
-
- return sendPostRequest(COMPONENT.MSO_DEACTIVATE_INSTANCE.replace('@serviceInstanceId', requestParams.instance.serviceInstanceId),
- requestDetails);
- };
-
- var sendPostRequestWithBody = function(url, requestBody) {
- var deferred = $q.defer();
- if (url) {
- $http.post(url, requestBody, {
- timeout: PropertyService.getServerResponseTimeoutMsec()
- }).success(function (response) {
- deferred.resolve({data: response});
- }).error(function (data, status) {
- deferred.reject({message: data, status: status});
- });
- }
-
- return deferred.promise;
- };
-
- var sendPostRequest = function(url, requestDetails) {
- return sendPostRequestWithBody(url, {requestDetails: requestDetails});
- };
-
- return {
- createInstance : requestInstanceUpdate,
- deleteInstance : requestInstanceUpdate,
- createAndDeleteInstance: function(requestParams) {
- return sendPostRequest("mso/" + requestParams.url, requestParams.requestDetails);
- },
- getOrchestrationRequest : function(requestId, successCallbackFunction) {
- $log.debug("MsoService:getOrchestrationRequest: requestId: "
- + requestId);
- $http.get(
- "mso/mso_get_orch_req/"
- + requestId + "?r=" + Math.random(),
- {
- timeout : PropertyService
- .getServerResponseTimeoutMsec()
- }).then(successCallbackFunction)["catch"]
- (UtilityService.runHttpErrorHandler);
- },
- getOrchestrationRequests : function(filterString,
- successCallbackFunction) {
- $log.debug("MsoService:getOrchestrationRequests: filterString: "
- + filterString);
- $http.get(
- "mso/mso_get_orch_reqs/"
- + encodeURIComponent(filterString) + "?r="
- + Math.random(),
- {
- timeout : PropertyService
- .getServerResponseTimeoutMsec()
- }).then(successCallbackFunction)["catch"]
- (UtilityService.runHttpErrorHandler);
- },
- getFormattedCommonResponse : function(response) {
- return UtilityService.getCurrentTime() + " HTTP Status: "
- + UtilityService.getHttpStatusText(response.data.status)
- + "\n" + angular.toJson(response.data.entity, true);
-
- },
- checkValidStatus : checkValidStatus,
- getFormattedGetOrchestrationRequestsResponse : function(response) {
- UtilityService.checkUndefined(COMPONENT.ENTITY, response.data.entity);
- UtilityService.checkUndefined(COMPONENT.STATUS, response.data.status);
- checkValidStatus(response);
-
- var list = response.data.entity.requestList;
- UtilityService.checkUndefined(FIELD.ID.REQUEST_LIST, list);
-
- var message = "";
-
- for (var i = 0; i < list.length; i++) {
- var request = list[i].request;
- message += addListEntry(FIELD.ID.REQUEST_ID, request.requestId) + ",\n";
- message += addListEntry(FIELD.ID.REQUEST_TYPE, request.requestType)
- + ",\n";
- var status = request.requestStatus;
- if (status === undefined) {
- message += addListEntry(FIELD.ID.REQUEST_STATUS, undefined) + "\n";
- } else {
- if(status.finishTime) {
- message += addListEntry(FIELD.ID.TIMESTAMP, moment(new Date(status.finishTime)).format("ddd, DD MMM YYYY HH:mm:ss"))
- + ",\n";
- }
- message += addListEntry(FIELD.ID.REQUEST_STATE, status.requestState)
- + ",\n";
- message += addListEntry(FIELD.ID.REQUEST_STATUS,
- status.statusMessage)
- + ",\n";
- message += addListEntry(FIELD.ID.PERCENT_PROGRESS,
- status.percentProgress)
- + "\n";
- }
- if (i < (list.length - 1)) {
- message += "\n";
- }
- }
- return message;
- },
- getFormattedSingleGetOrchestrationRequestResponse : function (response) {
- UtilityService.checkUndefined(COMPONENT.ENTITY, response.data.entity);
- UtilityService.checkUndefined(COMPONENT.STATUS, response.data.status);
- //checkValidStatus(response);
-
- var message = "";
- if (! (response && response.data && response.data.entity)) {
- return message;
- }
- if ( UtilityService.hasContents (response.data.entity.request) ) {
- var request = response.data.entity.request;
- message += addListEntry(FIELD.ID.REQUEST_ID, request.requestId) + ",\n";
- message += addListEntry(FIELD.ID.REQUEST_TYPE, request.requestType)
- + ",\n";
- var status = request.requestStatus;
- if (status === undefined) {
- message += addListEntry(FIELD.ID.REQUEST_STATUS, undefined) + "\n";
- } else {
- message += addListEntry(FIELD.ID.TIMESTAMP, moment(new Date()).format("ddd, DD MMM YYYY HH:mm:ss"))
- + ",\n";
- message += addListEntry(FIELD.ID.REQUEST_STATE, status.requestState)
- + ",\n";
- message += addListEntry(FIELD.ID.REQUEST_STATUS,
- status.statusMessage)
- + ",\n";
- message += addListEntry(FIELD.ID.PERCENT_PROGRESS,
- status.percentProgress)
- + "\n\n";
- }
- }
- else {
- if (UtilityService.hasContents(response.data.status) && UtilityService.hasContents(response.data.entity)) {
- message = this.getFormattedCommonResponse(response) + "\n";
- }
- }
- return message;
- },
- getManualTasks : function(requestId) {
- $log.debug("MsoService:getManualTasks: requestId: "
- + requestId);
- return $http.get(
- "mso/mso_get_man_task/" + requestId,
- {
- timeout: PropertyService
- .getServerResponseTimeoutMsec()
- })
- .catch(UtilityService.runHttpErrorHandler);
- },
- completeTask: function(taskId, taskToComplete) {
- var promise = new Promise(function (resolve, reject) {
- $log.debug("MsoService:completeTask: taskId: "
- + taskId);
- AaiService.getLoggedInUserID(function (response) {
- var attuid = response.data;
- var source = "VID";
- var data = {
- requestDetails: {
- requestInfo: {
- source: source,
- responseValue: taskToComplete,
- requestorId: attuid
- }
- }
- };
-
- return $http.post(
- "mso/mso_post_man_task/" + taskId, data,
- {
- timeout: PropertyService
- .getServerResponseTimeoutMsec()
- }).then(function (response) {
- resolve(response);
- })
- .catch(UtilityService.runHttpErrorHandler);
- }, function () {
- reject();
- });
- });
-
- return promise;
- },
- showResponseContentError : function(error, showFunction) {
- switch (error.type) {
- case "undefinedObject":
- showFunction(FIELD.ERROR.SYSTEM_FAILURE, error.message);
- break;
- case "msoFailure":
- showFunction(FIELD.ERROR.MSO, "");
- break;
- default:
- showFunction(FIELD.ERROR.SYSTEM_FAILURE);
- }
- },
- activateInstance: activateInstance,
- deactivateInstance: deactivateInstance,
-
-
- createConfigurationInstance: function(requestParams) {
-
- const modelInfoOf = function (instance) {
- const modelInfo = {
- "modelType": "vnf",
- "modelInvariantId": instance.properties['model-invariant-id'],
- "modelVersionId": instance.properties['model-version-id'],
- "modelName": instance.properties['model-name'],
- "modelVersion": instance.properties['model-version'],
- "modelCustomizationId": instance.properties['model-customization-id']
- };
-
- $log.debug("model info from instance", instance);
- $log.debug("model info to model", modelInfo);
-
- return modelInfo;
- };
-
- var payload = {
- "requestDetails": {
- "modelInfo": {
- "modelType": "configuration",
- "modelInvariantId": requestParams.configurationModelInfo.modelInvariantId,
- "modelVersionId": requestParams.configurationModelInfo.modelNameVersionId,
- "modelName": requestParams.configurationModelInfo.modelName, // "Port Mirroring Configuration"
- "modelVersion": requestParams.configurationModelInfo.modelVersion,
- "modelCustomizationId": requestParams.configurationModelInfo.customizationUuid,
- "modelCustomizationName": requestParams.configurationModelInfo.modelCustomizationName
- },
- "cloudConfiguration": {
- "lcpCloudRegionId": requestParams.portMirroringConfigFields.cloudRegionId,
- "cloudOwner" : requestParams.portMirroringConfigFields.cloudOwner
- },
- "requestInfo": {
- "instanceName": requestParams.portMirroringConfigFields.instanceName.value,
- "source": "VID",
- "requestorId": requestParams.attuuid
- },
- "relatedInstanceList": [
- {
- "relatedInstance": {
- "instanceId": requestParams.topServiceInstanceId,
- "modelInfo": {
- "modelType": "service", // relatedTopModelsInfo.modelType
- "modelInvariantId": requestParams.relatedTopModelsInfo.modelInvariantId,
- "modelVersionId": requestParams.relatedTopModelsInfo.modelNameVersionId,
- "modelName": requestParams.relatedTopModelsInfo.modelName,
- "modelVersion": requestParams.relatedTopModelsInfo.modelVersion
- }
- }
- },
- {
- "relatedInstance": {
- "instanceId": requestParams.portMirroringConfigFields.sourceInstance.properties['vnf-id'],
- "instanceDirection": "source",
- "modelInfo": modelInfoOf(requestParams.portMirroringConfigFields.sourceInstance)
- }
- },
- {
- "relatedInstance": requestParams.configurationByPolicy ? {
- "instanceName": requestParams.portMirroringConfigFields.destinationInstance.properties['pnfName'],
- "instanceDirection": "destination",
- "modelInfo": {
- "modelType": "pnf"
- }
- } : {
- "instanceId": requestParams.portMirroringConfigFields.destinationInstance.properties['vnf-id'],
- "instanceDirection": "destination",
- "modelInfo": modelInfoOf(requestParams.portMirroringConfigFields.destinationInstance)
- }
- }
- ],
- "requestParameters": {
- "userParams": []
- }
- }
- };
-
- $log.debug("payload", payload);
-
- var deferred = $q.defer();
- $http.post([
- 'mso','mso_create_configuration_instance',
- requestParams.topServiceInstanceId,
- 'configurations',''
- ].join(COMPONENT.FORWARD_SLASH),
- payload)
- .success(function (response) {
- deferred.resolve({data : response});
- }).error(function (data, status) {
- deferred.reject({message: data, status: status});
- });
- return deferred.promise;
- },
- deleteConfiguration: function(requestParams, configuration) {
-
- var requestDetails = {
- "modelInfo": requestParams.configurationModel,
- "cloudConfiguration": {
- "lcpCloudRegionId": configuration.configData.cloudRegionId
- },
- "requestInfo": {
- "source": "VID",
- "requestorId": requestParams.userId
- },
- "requestParameters": {
- "userParams": []
- }
- };
-
- var url = "mso/mso_delete_configuration/" + requestParams.serviceInstanceId + "/configurations/" + requestParams.configurationId;
- return sendPostRequest(url, requestDetails);
- },
- toggleConfigurationStatus: function(requestParams, configuration) {
-
- var requestDetails = {
- "modelInfo": requestParams.configurationModel,
- "cloudConfiguration": {
- "lcpCloudRegionId": configuration && configuration.configData ? configuration.configData.cloudRegionId : null
- },
- "requestInfo": {
- "source": "VID",
- "requestorId": requestParams.userId
- },
- "relatedInstanceList": [{
- "relatedInstance": {
- "instanceId": requestParams.serviceInstanceId,
- "modelInfo": requestParams.serviceModel
- }
- }],
- "requestParameters": {
- "userParams": []
- }
- };
-
- var url;
- switch (requestParams.configStatus) {
- case FIELD.STATUS.AAI_CREATED:
- case FIELD.STATUS.AAI_INACTIVE:
- url = "mso/mso_activate_configuration/"+requestParams.serviceInstanceId+"/configurations/"+requestParams.configurationId;
- break;
- case FIELD.STATUS.AAI_ACTIVE:
- url = "mso/mso_deactivate_configuration/"+requestParams.serviceInstanceId+"/configurations/"+requestParams.configurationId;
- break;
- }
-
- return sendPostRequest(url, requestDetails);
- },
-
- togglePortStatus: function(requestParams, configuration, defaultParams) {
-
- var requestDetails = {
- "modelInfo": requestParams.configurationModel,
- "cloudConfiguration": {
- "lcpCloudRegionId": configuration && configuration.configData ? configuration.configData.cloudRegionId : null
- },
- "requestInfo": {
- "source": "VID",
- "requestorId": requestParams.userId
- },
- "relatedInstanceList": [
- {
- "relatedInstance": {
- "instanceId": requestParams.serviceInstanceId,
- "modelInfo": requestParams.serviceModel
- }
- },
- {
- "relatedInstance": {
- "instanceId": requestParams.portId,
- "instanceDirection": "source",
- "modelInfo": {
- "modelType": "connectionPoint"
- }
- }
- }
- ]
- };
-
- var url;
- switch (requestParams.portStatus) {
- case FIELD.STATUS.AAI_ENABLED:
- url = "mso/mso_disable_port_configuration/"+requestParams.serviceInstanceId+"/configurations/"+requestParams.configurationId;
- break;
- case FIELD.STATUS.AAI_DISABLED:
- url = "mso/mso_enable_port_configuration/"+requestParams.serviceInstanceId+"/configurations/"+requestParams.configurationId;
- break;
- }
-
- return sendPostRequest(url, requestDetails);
- },
-
- buildPayloadForAssociateDissociate: function(serviceModelInfo, attuuid, instanceId, pnf) {
- var payload = {
- "modelInfo": {
- "modelType": "service",
- "modelInvariantId": serviceModelInfo.invariantUuid,
- "modelVersionId": serviceModelInfo.uuid,
- "modelName": serviceModelInfo.name,
- "modelVersion": serviceModelInfo.version
- },
- "requestInfo": {
- "source": "VID",
- "requestorId": attuuid
- },
- "relatedInstanceList": [
- {
- "relatedInstance": {
- "instanceName": pnf,
- "modelInfo": {
- "modelType": "pnf"
- }
- }
- }],
- "requestParameters": {
- "aLaCarte": true
- }
- };
-
- $log.debug("payload", payload);
-
- return payload;
- },
- associatePnf: function(requestParams) {
-
- var payload = this.buildPayloadForAssociateDissociate(requestParams.serviceModelInfo, requestParams.attuuid, requestParams.instanceId, requestParams.pnf);
- return sendPostRequest([
- COMPONENT.MSO, COMPONENT.MSO_CREATE_REALATIONSHIP,
- requestParams.instanceId,
- ''
- ].join(COMPONENT.FORWARD_SLASH), payload);
- },
- dissociatePnf: function(requestParams) {
-
- var payload = this.buildPayloadForAssociateDissociate(requestParams.serviceModelInfo, requestParams.attuuid, requestParams.serviceInstanceId, requestParams.pnf);
-
- return sendPostRequest([
- COMPONENT.MSO, COMPONENT.MSO_REMOVE_RELATIONSHIP,
- requestParams.serviceInstanceId,
- ''
- ].join(COMPONENT.FORWARD_SLASH), payload);
- },
- activateFabricConfiguration: function(requestParams) {
- var payload = buildPayloadForActivateFabricConfiguration(requestParams.model, requestParams.userId);
-
- var url = COMPONENT.MSO_ACTIVATE_FABRIC_CONFIGURATION_INSTANCE.replace('@serviceInstanceId', requestParams.serviceInstanceId);
- return sendPostRequest(url, payload);
- },
- deactivateAndCloudDelete : function (requestParams) {
- var payload = {
- tenantId: requestParams.tenantId,
- lcpCloudRegionId: requestParams.lcpCloudRegionId,
- userId: requestParams.userId
- };
-
- var url = COMPONENT.MSO_DEACTIVATE_AND_CLOUD_DELETE_INSTANCE.replace('@serviceInstanceId', requestParams.serviceInstanceId)
- .replace('@vnfInstanceId', requestParams.vnfInstanceId)
- .replace('@vfModuleInstanceId', requestParams.vfModuleInstanceId);
-
- return sendPostRequestWithBody(url, payload);
- }
- };
-};
-
-appDS2.factory("MsoService", MsoService );
+/*- + * ============LICENSE_START======================================================= + * VID + * ================================================================================ + * Copyright (C) 2017 - 2019 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END========================================================= + */ + +"use strict"; + +var MsoService = function($http, $log, $q, PropertyService, AaiService, UtilityService, COMPONENT, FIELD, moment) { + + var _this = this; + + /* + * Common function to handle both create and delete instance requests + */ + var requestInstanceUpdate = function(request, successCallbackFunction) { + $log.debug("MsoService:requestInstanceUpdate: request:"); + $log.debug(request); + $http.post( "mso/" + request.url, { + requestDetails : request.requestDetails + }, { + timeout : PropertyService.getServerResponseTimeoutMsec() + }).then(successCallbackFunction)["catch"] + (UtilityService.runHttpErrorHandler); + }; + + var checkValidStatus = function(response) { + if (response.data.status < 200 || response.data.status > 202) { + throw { + type : FIELD.ID.MSO_FAILURE + }; + } + }; + + var addListEntry = function(name, value) { + var entry = '"' + name + '": '; + if (value === undefined) { + return entry + "undefined"; + } else { + return entry + '"' + value + '"'; + } + }; + + var buildPayloadForServiceActivateDeactivate = function (model, userId) { + var requestDetails = { + "modelInfo": { + "modelType": "service", + "modelInvariantId": model.service.invariantUuid, + "modelVersionId": model.service.uuid, + "modelName": model.service.name, + "modelVersion": model.service.version + }, + "requestInfo": { + "source": "VID", + "requestorId": userId + }, + "requestParameters": { + // aicZone was sent from here + "userParams": [] + } + }; + + $log.debug("Service Activate/Deactivate payload", requestDetails); + + return requestDetails; + + }; + + var buildPayloadForActivateFabricConfiguration = function (model, userId) { + var requestDetails = { + "modelInfo": { + "modelType": "service", + "modelInvariantId": model.service.invariantUuid, + "modelVersionId": model.service.uuid, + "modelName": model.service.name, + "modelVersion": model.service.version + }, + "requestInfo": { + "source": "VID", + "requestorId": userId + }, + "requestParameters": { + "aLaCarte": false + } + }; + + $log.debug("Service Activate Fabric Configuration payload", requestDetails); + + return requestDetails; + + }; + + var activateInstance = function(requestParams) { + var requestDetails = buildPayloadForServiceActivateDeactivate(requestParams.model, requestParams.userId); + + return sendPostRequest(COMPONENT.MSO_ACTIVATE_INSTANCE.replace('@serviceInstanceId', requestParams.instance.serviceInstanceId), + requestDetails); + }; + + var deactivateInstance = function(requestParams) { + var requestDetails = buildPayloadForServiceActivateDeactivate(requestParams.model, requestParams.userId); + + return sendPostRequest(COMPONENT.MSO_DEACTIVATE_INSTANCE.replace('@serviceInstanceId', requestParams.instance.serviceInstanceId), + requestDetails); + }; + + var sendPostRequestWithBody = function(url, requestBody) { + var deferred = $q.defer(); + if (url) { + $http.post(url, requestBody, { + timeout: PropertyService.getServerResponseTimeoutMsec() + }).success(function (response) { + deferred.resolve({data: response}); + }).error(function (data, status) { + deferred.reject({message: data, status: status}); + }); + } + + return deferred.promise; + }; + + var sendPostRequest = function(url, requestDetails) { + return sendPostRequestWithBody(url, {requestDetails: requestDetails}); + }; + + return { + createInstance : requestInstanceUpdate, + deleteInstance : requestInstanceUpdate, + createAndDeleteInstance: function(requestParams) { + return sendPostRequest("mso/" + requestParams.url, requestParams.requestDetails); + }, + getOrchestrationRequest : function(requestId, successCallbackFunction) { + $log.debug("MsoService:getOrchestrationRequest: requestId: " + + requestId); + $http.get( + "mso/mso_get_orch_req/" + + requestId + "?r=" + Math.random(), + { + timeout : PropertyService + .getServerResponseTimeoutMsec() + }).then(successCallbackFunction)["catch"] + (UtilityService.runHttpErrorHandler); + }, + getOrchestrationRequests : function(filterString, + successCallbackFunction) { + $log.debug("MsoService:getOrchestrationRequests: filterString: " + + filterString); + $http.get( + "mso/mso_get_orch_reqs/" + + encodeURIComponent(filterString) + "?r=" + + Math.random(), + { + timeout : PropertyService + .getServerResponseTimeoutMsec() + }).then(successCallbackFunction)["catch"] + (UtilityService.runHttpErrorHandler); + }, + getFormattedCommonResponse : function(response) { + if (response && response.data && response.data.status) { + return UtilityService.getCurrentTime() + " HTTP Status: " + + UtilityService.getHttpStatusText(response.data.status) + + "\n" + angular.toJson(response.data.entity, true); + } + else { + return UtilityService.getCurrentTime() + " HTTP Status: " + + "N/A\nVID has timed out waiting for an MSO response.\nPlease close this popup or refresh page."; + } + + }, + checkValidStatus : checkValidStatus, + getFormattedGetOrchestrationRequestsResponse : function(response) { + UtilityService.checkUndefined(COMPONENT.ENTITY, response.data.entity); + UtilityService.checkUndefined(COMPONENT.STATUS, response.data.status); + checkValidStatus(response); + + var list = response.data.entity.requestList; + UtilityService.checkUndefined(FIELD.ID.REQUEST_LIST, list); + + var message = ""; + + for (var i = 0; i < list.length; i++) { + var request = list[i].request; + message += addListEntry(FIELD.ID.REQUEST_ID, request.requestId) + ",\n"; + message += addListEntry(FIELD.ID.REQUEST_TYPE, request.requestType) + + ",\n"; + var status = request.requestStatus; + if (status === undefined) { + message += addListEntry(FIELD.ID.REQUEST_STATUS, undefined) + "\n"; + } else { + if(status.finishTime) { + message += addListEntry(FIELD.ID.TIMESTAMP, moment(new Date(status.finishTime)).format("ddd, DD MMM YYYY HH:mm:ss")) + + ",\n"; + } + message += addListEntry(FIELD.ID.REQUEST_STATE, status.requestState) + + ",\n"; + message += addListEntry(FIELD.ID.REQUEST_STATUS, + status.statusMessage) + + ",\n"; + message += addListEntry(FIELD.ID.PERCENT_PROGRESS, + status.percentProgress) + + "\n"; + } + if (i < (list.length - 1)) { + message += "\n"; + } + } + return message; + }, + getFormattedSingleGetOrchestrationRequestResponse : function (response) { + UtilityService.checkUndefined(COMPONENT.ENTITY, response.data.entity); + UtilityService.checkUndefined(COMPONENT.STATUS, response.data.status); + //checkValidStatus(response); + + var message = ""; + if (! (response && response.data && response.data.entity)) { + return message; + } + if ( UtilityService.hasContents (response.data.entity.request) ) { + var request = response.data.entity.request; + message += addListEntry(FIELD.ID.REQUEST_ID, request.requestId) + ",\n"; + message += addListEntry(FIELD.ID.REQUEST_TYPE, request.requestType) + + ",\n"; + var status = request.requestStatus; + if (status === undefined) { + message += addListEntry(FIELD.ID.REQUEST_STATUS, undefined) + "\n"; + } else { + message += addListEntry(FIELD.ID.TIMESTAMP, moment(new Date()).format("ddd, DD MMM YYYY HH:mm:ss")) + + ",\n"; + message += addListEntry(FIELD.ID.REQUEST_STATE, status.requestState) + + ",\n"; + message += addListEntry(FIELD.ID.REQUEST_STATUS, + status.statusMessage) + + ",\n"; + message += addListEntry(FIELD.ID.PERCENT_PROGRESS, + status.percentProgress) + + "\n\n"; + } + } + else { + if (UtilityService.hasContents(response.data.status) && UtilityService.hasContents(response.data.entity)) { + message = this.getFormattedCommonResponse(response) + "\n"; + } + } + return message; + }, + getManualTasks : function(requestId) { + $log.debug("MsoService:getManualTasks: requestId: " + + requestId); + return $http.get( + "mso/mso_get_man_task/" + requestId, + { + timeout: PropertyService + .getServerResponseTimeoutMsec() + }) + .catch(UtilityService.runHttpErrorHandler); + }, + completeTask: function(taskId, taskToComplete) { + var promise = new Promise(function (resolve, reject) { + $log.debug("MsoService:completeTask: taskId: " + + taskId); + AaiService.getLoggedInUserID(function (response) { + var attuid = response.data; + var source = "VID"; + var data = { + requestDetails: { + requestInfo: { + source: source, + responseValue: taskToComplete, + requestorId: attuid + } + } + }; + + return $http.post( + "mso/mso_post_man_task/" + taskId, data, + { + timeout: PropertyService + .getServerResponseTimeoutMsec() + }).then(function (response) { + resolve(response); + }) + .catch(UtilityService.runHttpErrorHandler); + }, function () { + reject(); + }); + }); + + return promise; + }, + showResponseContentError : function(error, showFunction) { + switch (error.type) { + case "undefinedObject": + showFunction(FIELD.ERROR.SYSTEM_FAILURE, error.message); + break; + case "msoFailure": + showFunction(FIELD.ERROR.MSO, ""); + break; + default: + showFunction(FIELD.ERROR.SYSTEM_FAILURE); + } + }, + activateInstance: activateInstance, + deactivateInstance: deactivateInstance, + + + createConfigurationInstance: function(requestParams) { + + const modelInfoOf = function (instance) { + const modelInfo = { + "modelType": "vnf", + "modelInvariantId": instance.properties['model-invariant-id'], + "modelVersionId": instance.properties['model-version-id'], + "modelName": instance.properties['model-name'], + "modelVersion": instance.properties['model-version'], + "modelCustomizationId": instance.properties['model-customization-id'] + }; + + $log.debug("model info from instance", instance); + $log.debug("model info to model", modelInfo); + + return modelInfo; + }; + + var payload = { + "requestDetails": { + "modelInfo": { + "modelType": "configuration", + "modelInvariantId": requestParams.configurationModelInfo.modelInvariantId, + "modelVersionId": requestParams.configurationModelInfo.modelNameVersionId, + "modelName": requestParams.configurationModelInfo.modelName, // "Port Mirroring Configuration" + "modelVersion": requestParams.configurationModelInfo.modelVersion, + "modelCustomizationId": requestParams.configurationModelInfo.customizationUuid, + "modelCustomizationName": requestParams.configurationModelInfo.modelCustomizationName + }, + "cloudConfiguration": { + "lcpCloudRegionId": requestParams.portMirroringConfigFields.cloudRegionId, + "cloudOwner" : requestParams.portMirroringConfigFields.cloudOwner + }, + "requestInfo": { + "instanceName": requestParams.portMirroringConfigFields.instanceName.value, + "source": "VID", + "requestorId": requestParams.attuuid + }, + "relatedInstanceList": [ + { + "relatedInstance": { + "instanceId": requestParams.topServiceInstanceId, + "modelInfo": { + "modelType": "service", // relatedTopModelsInfo.modelType + "modelInvariantId": requestParams.relatedTopModelsInfo.modelInvariantId, + "modelVersionId": requestParams.relatedTopModelsInfo.modelNameVersionId, + "modelName": requestParams.relatedTopModelsInfo.modelName, + "modelVersion": requestParams.relatedTopModelsInfo.modelVersion + } + } + }, + { + "relatedInstance": { + "instanceId": requestParams.portMirroringConfigFields.sourceInstance.properties['vnf-id'], + "instanceDirection": "source", + "modelInfo": modelInfoOf(requestParams.portMirroringConfigFields.sourceInstance) + } + }, + { + "relatedInstance": requestParams.configurationByPolicy ? { + "instanceName": requestParams.portMirroringConfigFields.destinationInstance.properties['pnfName'], + "instanceDirection": "destination", + "modelInfo": { + "modelType": "pnf" + } + } : { + "instanceId": requestParams.portMirroringConfigFields.destinationInstance.properties['vnf-id'], + "instanceDirection": "destination", + "modelInfo": modelInfoOf(requestParams.portMirroringConfigFields.destinationInstance) + } + } + ], + "requestParameters": { + "userParams": [] + } + } + }; + + $log.debug("payload", payload); + + var deferred = $q.defer(); + $http.post([ + 'mso','mso_create_configuration_instance', + requestParams.topServiceInstanceId, + 'configurations','' + ].join(COMPONENT.FORWARD_SLASH), + payload) + .success(function (response) { + deferred.resolve({data : response}); + }).error(function (data, status) { + deferred.reject({message: data, status: status}); + }); + return deferred.promise; + }, + deleteConfiguration: function(requestParams, configuration) { + + var requestDetails = { + "modelInfo": requestParams.configurationModel, + "cloudConfiguration": { + "lcpCloudRegionId": configuration.configData.cloudRegionId + }, + "requestInfo": { + "source": "VID", + "requestorId": requestParams.userId + }, + "requestParameters": { + "userParams": [] + } + }; + + var url = "mso/mso_delete_configuration/" + requestParams.serviceInstanceId + "/configurations/" + requestParams.configurationId; + return sendPostRequest(url, requestDetails); + }, + toggleConfigurationStatus: function(requestParams, configuration) { + + var requestDetails = { + "modelInfo": requestParams.configurationModel, + "cloudConfiguration": { + "lcpCloudRegionId": configuration && configuration.configData ? configuration.configData.cloudRegionId : null + }, + "requestInfo": { + "source": "VID", + "requestorId": requestParams.userId + }, + "relatedInstanceList": [{ + "relatedInstance": { + "instanceId": requestParams.serviceInstanceId, + "modelInfo": requestParams.serviceModel + } + }], + "requestParameters": { + "userParams": [] + } + }; + + var url; + switch (requestParams.configStatus) { + case FIELD.STATUS.AAI_CREATED: + case FIELD.STATUS.AAI_INACTIVE: + url = "mso/mso_activate_configuration/"+requestParams.serviceInstanceId+"/configurations/"+requestParams.configurationId; + break; + case FIELD.STATUS.AAI_ACTIVE: + url = "mso/mso_deactivate_configuration/"+requestParams.serviceInstanceId+"/configurations/"+requestParams.configurationId; + break; + } + + return sendPostRequest(url, requestDetails); + }, + + togglePortStatus: function(requestParams, configuration, defaultParams) { + + var requestDetails = { + "modelInfo": requestParams.configurationModel, + "cloudConfiguration": { + "lcpCloudRegionId": configuration && configuration.configData ? configuration.configData.cloudRegionId : null + }, + "requestInfo": { + "source": "VID", + "requestorId": requestParams.userId + }, + "relatedInstanceList": [ + { + "relatedInstance": { + "instanceId": requestParams.serviceInstanceId, + "modelInfo": requestParams.serviceModel + } + }, + { + "relatedInstance": { + "instanceId": requestParams.portId, + "instanceDirection": "source", + "modelInfo": { + "modelType": "connectionPoint" + } + } + } + ] + }; + + var url; + switch (requestParams.portStatus) { + case FIELD.STATUS.AAI_ENABLED: + url = "mso/mso_disable_port_configuration/"+requestParams.serviceInstanceId+"/configurations/"+requestParams.configurationId; + break; + case FIELD.STATUS.AAI_DISABLED: + url = "mso/mso_enable_port_configuration/"+requestParams.serviceInstanceId+"/configurations/"+requestParams.configurationId; + break; + } + + return sendPostRequest(url, requestDetails); + }, + + buildPayloadForAssociateDissociate: function(serviceModelInfo, attuuid, instanceId, pnf) { + var payload = { + "modelInfo": { + "modelType": "service", + "modelInvariantId": serviceModelInfo.invariantUuid, + "modelVersionId": serviceModelInfo.uuid, + "modelName": serviceModelInfo.name, + "modelVersion": serviceModelInfo.version + }, + "requestInfo": { + "source": "VID", + "requestorId": attuuid + }, + "relatedInstanceList": [ + { + "relatedInstance": { + "instanceName": pnf, + "modelInfo": { + "modelType": "pnf" + } + } + }], + "requestParameters": { + "aLaCarte": true + } + }; + + $log.debug("payload", payload); + + return payload; + }, + associatePnf: function(requestParams) { + + var payload = this.buildPayloadForAssociateDissociate(requestParams.serviceModelInfo, requestParams.attuuid, requestParams.instanceId, requestParams.pnf); + return sendPostRequest([ + COMPONENT.MSO, COMPONENT.MSO_CREATE_REALATIONSHIP, + requestParams.instanceId, + '' + ].join(COMPONENT.FORWARD_SLASH), payload); + }, + dissociatePnf: function(requestParams) { + + var payload = this.buildPayloadForAssociateDissociate(requestParams.serviceModelInfo, requestParams.attuuid, requestParams.serviceInstanceId, requestParams.pnf); + + return sendPostRequest([ + COMPONENT.MSO, COMPONENT.MSO_REMOVE_RELATIONSHIP, + requestParams.serviceInstanceId, + '' + ].join(COMPONENT.FORWARD_SLASH), payload); + }, + activateFabricConfiguration: function(requestParams) { + var payload = buildPayloadForActivateFabricConfiguration(requestParams.model, requestParams.userId); + + var url = COMPONENT.MSO_ACTIVATE_FABRIC_CONFIGURATION_INSTANCE.replace('@serviceInstanceId', requestParams.serviceInstanceId); + return sendPostRequest(url, payload); + }, + deactivateAndCloudDelete : function (requestParams) { + var payload = { + tenantId: requestParams.tenantId, + lcpCloudRegionId: requestParams.lcpCloudRegionId, + userId: requestParams.userId + }; + + var url = COMPONENT.MSO_DEACTIVATE_AND_CLOUD_DELETE_INSTANCE.replace('@serviceInstanceId', requestParams.serviceInstanceId) + .replace('@vnfInstanceId', requestParams.vnfInstanceId) + .replace('@vfModuleInstanceId', requestParams.vfModuleInstanceId); + + return sendPostRequestWithBody(url, payload); + } + }; +}; + +appDS2.factory("MsoService", MsoService ); diff --git a/vid-webpack-master/cypress/integration/iFrames/commitDialog.e2e.ts b/vid-webpack-master/cypress/integration/iFrames/commitDialog.e2e.ts new file mode 100644 index 000000000..22f201aab --- /dev/null +++ b/vid-webpack-master/cypress/integration/iFrames/commitDialog.e2e.ts @@ -0,0 +1,89 @@ +///<reference path="../../../node_modules/cypress/types/index.d.ts"/> +import {JsonBuilder} from '../../support/jsonBuilders/jsonBuilder'; +import {ServiceModel} from '../../support/jsonBuilders/models/service.model'; +import {AaiServiceInstancesModel} from '../../support/jsonBuilders/models/serviceInstances.model'; +import {AAISubDetailsModel} from '../../support/jsonBuilders/models/aaiSubDetails.model'; +import {AAISubViewEditModel} from '../../support/jsonBuilders/models/aaiSubViewEdit.model'; + +describe('MSO Commit dialog', function () { + + + let jsonBuilderAAIService: JsonBuilder<ServiceModel> = new JsonBuilder<ServiceModel>(); + let jsonBuilderAAISubViewEditModel: JsonBuilder<AAISubViewEditModel> = new JsonBuilder<AAISubViewEditModel>(); + let jsonBuilderAAISubDetailsModel: JsonBuilder<AAISubDetailsModel> = new JsonBuilder<AAISubDetailsModel>(); + let jsonBuilderAaiServiceInstances: JsonBuilder<AaiServiceInstancesModel> = new JsonBuilder<AaiServiceInstancesModel>(); + beforeEach(() => { + cy.readFile('cypress/support/jsonBuilders/mocks/jsons/defect710619/serviceE2E.json').then((res) => { + jsonBuilderAAIService.basicJson( + res, + Cypress.config('baseUrl') + "/rest/models/services/**", + 200, 0, + "service-complexService") + }); + + + cy.readFile('cypress/support/jsonBuilders/mocks/jsons/defect710619/aaiSubViewEditForServiceWithSomeVFModuleE2E.json').then((res) => { + jsonBuilderAAISubViewEditModel.basicJson( + res, + Cypress.config('baseUrl') + "/aai_sub_viewedit/**", + 200, + 0, + "aai-sub-view-edit") + }); + + cy.readFile('cypress/support/jsonBuilders/mocks/jsons/defect710619/aaiSubDetailsE2E.json').then((res) => { + jsonBuilderAAISubDetailsModel.basicJson( + res, + Cypress.config('baseUrl') + "/aai_sub_details/**", + 200, + 0, + "aai-sub-details") + }); + + cy.readFile('cypress/support/jsonBuilders/mocks/jsons/defect710619/aaiServiceInstancesE2E.json').then((res) => { + jsonBuilderAaiServiceInstances.basicJson( + res, + Cypress.config('baseUrl') + "/search_service_instances**", + 200, + 0, + "aai-get-service-instances") + }); + + cy.server().route({ + url: Cypress.config('baseUrl') + '/mso/mso_create_vfmodule_instance/dedd680f-f3bd-46d8-97c7-b6fc28db9317/vnfs/1d45e992-e282-4ba5-b17a-9ca6562169e3', + method: 'POST', + status: 200, + response: [], + }).as("actualResumeCall"); + + cy.initVidMock(); + + cy.initTenants(); + + cy.login(); + }); + + afterEach(() => { + cy.screenshot(); + }); + + it(`When showing the commit dialog and unexpected response - we don't have an http status therefor we display a proper message`, function () { + cy.visit('/serviceModels.htm#/instantiate?subscriberId=e433710f-9217-458d-a79d-1c7aff376d89&subscriberName=SILVIA ROBBINS&serviceType=TYLER%20SILVIA&serviceInstanceId=dedd680f-f3bd-46d8-97c7-b6fc28db9317&aaiModelVersionId=4b60252a-bf6c-40df-9db5-98b4c363fdf4&isPermitted=true').then(()=>{ + cy.wait('@service-complexService'); + checkResumeAndPopup("dpa2bccfx5992v_base_module","vfModuleTreeNode-assigned"); + }); + }); + + function checkResumeAndPopup(vfModuleName:string, vfModuleClassName:string) { + cy.get('div').find('.' + vfModuleClassName) + .getElementByDataTestsId('resumeVFModuleButton-' + vfModuleName).click().then(()=> { + cy.getElementByDataTestsId('lcpRegion').should('be.visible').select("option-irma-aic-hvf6") + .getElementByDataTestsId('tenant').should('be.visible').select("bae71557c5bb4d5aac6743a4e5f1d054"); + cy.getElementByDataTestsId('confirmResumeDeleteButton').not('.button--inactive').click().then(()=> { + cy.getElementByDataTestsId('msoCommitLog').contains('VID has timed out waiting for an MSO response'); + }); + }); + } + +}); + diff --git a/vid-webpack-master/cypress/integration/iFrames/instantiation.templates.modal.e2e.ts b/vid-webpack-master/cypress/integration/iFrames/instantiation.templates.modal.e2e.ts index e55b1dcd1..3786bc5e8 100644 --- a/vid-webpack-master/cypress/integration/iFrames/instantiation.templates.modal.e2e.ts +++ b/vid-webpack-master/cypress/integration/iFrames/instantiation.templates.modal.e2e.ts @@ -38,7 +38,12 @@ describe('Template', () => { "serviceModelName": "action-data", "serviceModelVersion": "1.0", "createdBulkDate": 1525075968000, - "isRetryEnabled": true + "isRetryEnabled": true, + "requestSummary": { + "vnf": 2, + "vfModule": 3, + "network": 1 + } }, { "id": 7, @@ -139,6 +144,7 @@ describe('Template', () => { cy.getElementByDataTestsId(`createDate-${instantiationTemplates[0].jobId}`).contains('2018-04-30 11:12:48'); cy.getElementByDataTestsId(`instanceName-${instantiationTemplates[0].jobId}`).contains('nWUfl instance name_002'); cy.getElementByDataTestsId(`instantiationStatus-${instantiationTemplates[0].jobId}`).contains('FAILED'); + cy.getElementByDataTestsId(`summary-${instantiationTemplates[0].jobId}`).contains('{"vnf":2,"vfModule":3,"network":1}'); cy.getElementByDataTestsId(`region-${instantiationTemplates[0].jobId}`).contains('hvf6 (WAYNEHOLLAND)'); cy.getElementByDataTestsId(`tenant-${instantiationTemplates[0].jobId}`).contains('AIN Web Tool-15-D-testalexandria'); cy.getElementByDataTestsId(`aicZone-${instantiationTemplates[0].jobId}`).contains('NFTJSSSS-NFT1'); diff --git a/vid-webpack-master/src/app/shared/components/genericFormPopup/instantiationTemplatesModal/instantiation.templates.modal.service.spec.ts b/vid-webpack-master/src/app/shared/components/genericFormPopup/instantiationTemplatesModal/instantiation.templates.modal.service.spec.ts index 2f044112b..6540a6551 100644 --- a/vid-webpack-master/src/app/shared/components/genericFormPopup/instantiationTemplatesModal/instantiation.templates.modal.service.spec.ts +++ b/vid-webpack-master/src/app/shared/components/genericFormPopup/instantiationTemplatesModal/instantiation.templates.modal.service.spec.ts @@ -54,6 +54,17 @@ describe('instantiation templates modal service', () => { expect(service).toBeDefined(); }); + test('convert map to json', () => { + let result:InstantiationTemplatesRowModel = new InstantiationTemplatesRowModel({ + "requestSummary": { + "vnf": 2, + "vfModule": 3, + "network": 1 + } + }); + expect(result.summary).toEqual( "{\"vnf\":2,\"vfModule\":3,\"network\":1}"); + }); + test('convertResponseToUI - should return table data', () => { const jobs = [{ @@ -92,7 +103,6 @@ describe('instantiation templates modal service', () => { "serviceModelName": "ComplexService", "serviceModelVersion": "1.0", "createdBulkDate": 1524995555000, - "isRetryEnabled": false }]; const tableRows: InstantiationTemplatesRowModel[] = service.convertResponseToUI(jobs); expect(tableRows).toHaveLength(1); diff --git a/vid-webpack-master/src/app/shared/components/genericFormPopup/instantiationTemplatesModal/instantiation.templates.row.model.ts b/vid-webpack-master/src/app/shared/components/genericFormPopup/instantiationTemplatesModal/instantiation.templates.row.model.ts index 673709462..df40da74d 100644 --- a/vid-webpack-master/src/app/shared/components/genericFormPopup/instantiationTemplatesModal/instantiation.templates.row.model.ts +++ b/vid-webpack-master/src/app/shared/components/genericFormPopup/instantiationTemplatesModal/instantiation.templates.row.model.ts @@ -18,7 +18,7 @@ export class InstantiationTemplatesRowModel extends InstantiationBase{ this.createDate = !_.isNil(data.created) ? moment(data.created).format("YYYY-MM-DD HH:mm:ss") : null; this.instanceName = this.getInstanceName(data.serviceInstanceName); this.instantiationStatus = !_.isNil(data.jobStatus) ? data.jobStatus : null; - this.summary = null; + this.summary = this.convertRequestSummaryFromMapToString(data.requestSummary); this.region = this.getRegion(data.regionId, data.owningEntityName); this.tenant = !_.isNil(data.tenantName) ? data.tenantName : null; this.aicZone = !_.isNil(data.aicZoneName) ? data.aicZoneName : null; @@ -46,5 +46,12 @@ export class InstantiationTemplatesRowModel extends InstantiationBase{ } return instanceName; } + + convertRequestSummaryFromMapToString = (requestSummary): string => { + let myvnf: string = JSON.stringify(requestSummary); + return myvnf; + } + + } diff --git a/vid-webpack-master/src/app/shared/server/serviceInfo/serviceInfo.model.ts b/vid-webpack-master/src/app/shared/server/serviceInfo/serviceInfo.model.ts index 5a2b37a7d..8e47f0c78 100644 --- a/vid-webpack-master/src/app/shared/server/serviceInfo/serviceInfo.model.ts +++ b/vid-webpack-master/src/app/shared/server/serviceInfo/serviceInfo.model.ts @@ -35,6 +35,7 @@ export class ServiceInfoModel extends InstantiationBase{ auditUserId: string; action: ServiceAction; isRetryEnabled: boolean; + requestSummary:string; } export class ServiceInfoUiModel extends ServiceInfoModel{ |