handling cloud owner and lcp region in create port mirroring configuration
[vid.git] / vid-app-common / src / main / webapp / app / vid / scripts / services / msoService.js
1 /*-\r
2  * ============LICENSE_START=======================================================\r
3  * VID\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
10  * \r
11  *      http://www.apache.org/licenses/LICENSE-2.0\r
12  * \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
19  */\r
20 \r
21 "use strict";\r
22 \r
23 var MsoService = function($http, $log, $q, PropertyService, AaiService, UtilityService, COMPONENT, FIELD, moment) {\r
24 \r
25     var _this = this;\r
26 \r
27         /*\r
28          * Common function to handle both create and delete instance requests\r
29          */\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
35         }, {\r
36             timeout : PropertyService.getServerResponseTimeoutMsec()\r
37         }).then(successCallbackFunction)["catch"]\r
38         (UtilityService.runHttpErrorHandler);\r
39     };\r
40 \r
41     var checkValidStatus = function(response) {\r
42         if (response.data.status < 200 || response.data.status > 202) {\r
43             throw {\r
44                 type : FIELD.ID.MSO_FAILURE\r
45             }\r
46         }\r
47     };\r
48 \r
49     var addListEntry = function(name, value) {\r
50         var entry = '"' + name + '": ';\r
51         if (value === undefined) {\r
52             return entry + "undefined";\r
53         } else {\r
54             return entry + '"' + value + '"';\r
55         }\r
56     };\r
57 \r
58     var buildPayloadForServiceActivateDeactivate = function (model, userId) {\r
59         var requestDetails = {\r
60                 "modelInfo": {\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
66                 },\r
67                 "requestInfo": {\r
68                     "source": "VID",\r
69                     "requestorId": userId\r
70                 },\r
71                 "requestParameters": {\r
72                     // aicZone was sent from here\r
73                     "userParams": []\r
74                 }\r
75         };\r
76 \r
77         $log.debug("Service Activate/Deactivate payload", requestDetails);\r
78 \r
79         return requestDetails;\r
80 \r
81     };\r
82 \r
83     var buildPayloadForActivateFabricConfiguration = function (model, userId) {\r
84         var requestDetails = {\r
85             "modelInfo": {\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
91             },\r
92             "requestInfo": {\r
93                 "source": "VID",\r
94                 "requestorId": userId\r
95             },\r
96             "requestParameters": {\r
97                 "aLaCarte": false\r
98             }\r
99         };\r
100 \r
101         $log.debug("Service Activate Fabric Configuration payload", requestDetails);\r
102 \r
103         return requestDetails;\r
104 \r
105     };\r
106 \r
107     var activateInstance = function(requestParams) {\r
108         var requestDetails = buildPayloadForServiceActivateDeactivate(requestParams.model, requestParams.userId);\r
109 \r
110         return sendPostRequest(COMPONENT.MSO_ACTIVATE_INSTANCE.replace('@serviceInstanceId', requestParams.instance.serviceInstanceId),\r
111             requestDetails);\r
112     };\r
113 \r
114     var deactivateInstance = function(requestParams) {\r
115         var requestDetails = buildPayloadForServiceActivateDeactivate(requestParams.model, requestParams.userId);\r
116 \r
117         return sendPostRequest(COMPONENT.MSO_DEACTIVATE_INSTANCE.replace('@serviceInstanceId', requestParams.instance.serviceInstanceId),\r
118             requestDetails);\r
119     };\r
120 \r
121     var sendPostRequestWithBody = function(url, requestBody) {\r
122         var deferred = $q.defer();\r
123         if (url) {\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
130             });\r
131         }\r
132 \r
133         return deferred.promise;\r
134     };\r
135 \r
136     var sendPostRequest = function(url, requestDetails) {\r
137         return sendPostRequestWithBody(url, {requestDetails: requestDetails});\r
138     };\r
139 \r
140     return {\r
141         createInstance : requestInstanceUpdate,\r
142         deleteInstance : requestInstanceUpdate,\r
143         createAndDeleteInstance: function(requestParams)  {\r
144             return sendPostRequest("mso/" + requestParams.url, requestParams.requestDetails);\r
145         },\r
146         getOrchestrationRequest : function(requestId, successCallbackFunction) {\r
147             $log.debug("MsoService:getOrchestrationRequest: requestId: "\r
148                 + requestId);\r
149             $http.get(\r
150                 "mso/mso_get_orch_req/"\r
151                 + requestId + "?r=" + Math.random(),\r
152                 {\r
153                     timeout : PropertyService\r
154                         .getServerResponseTimeoutMsec()\r
155                 }).then(successCallbackFunction)["catch"]\r
156             (UtilityService.runHttpErrorHandler);\r
157         },\r
158         getOrchestrationRequests : function(filterString,\r
159                                             successCallbackFunction) {\r
160             $log.debug("MsoService:getOrchestrationRequests: filterString: "\r
161                 + filterString);\r
162             $http.get(\r
163                 "mso/mso_get_orch_reqs/"\r
164                 + encodeURIComponent(filterString) + "?r="\r
165                 + Math.random(),\r
166                 {\r
167                     timeout : PropertyService\r
168                         .getServerResponseTimeoutMsec()\r
169                 }).then(successCallbackFunction)["catch"]\r
170             (UtilityService.runHttpErrorHandler);\r
171         },\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
176 \r
177         },\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
183 \r
184             var list = response.data.entity.requestList;\r
185             UtilityService.checkUndefined(FIELD.ID.REQUEST_LIST, list);\r
186 \r
187             var message = "";\r
188 \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
193                     + ",\n";\r
194                 var status = request.requestStatus;\r
195                 if (status === undefined) {\r
196                     message += addListEntry(FIELD.ID.REQUEST_STATUS, undefined) + "\n";\r
197                 } else {\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
200                             + ",\n";\r
201                     }\r
202                     message += addListEntry(FIELD.ID.REQUEST_STATE, status.requestState)\r
203                         + ",\n";\r
204                     message += addListEntry(FIELD.ID.REQUEST_STATUS,\r
205                             status.statusMessage)\r
206                         + ",\n";\r
207                     message += addListEntry(FIELD.ID.PERCENT_PROGRESS,\r
208                             status.percentProgress)\r
209                         + "\n";\r
210                 }\r
211                 if (i < (list.length - 1)) {\r
212                     message += "\n";\r
213                 }\r
214             }\r
215             return message;\r
216         },\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
221 \r
222             var message = "";\r
223             if (! (response && response.data && response.data.entity)) {\r
224                 return message;\r
225             }\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
230                     + ",\n";\r
231                 var status = request.requestStatus;\r
232                 if (status === undefined) {\r
233                     message += addListEntry(FIELD.ID.REQUEST_STATUS, undefined) + "\n";\r
234                 } else {\r
235                     message += addListEntry(FIELD.ID.TIMESTAMP, moment(new Date()).format("ddd, DD MMM YYYY HH:mm:ss"))\r
236                         + ",\n";\r
237                     message += addListEntry(FIELD.ID.REQUEST_STATE, status.requestState)\r
238                         + ",\n";\r
239                     message += addListEntry(FIELD.ID.REQUEST_STATUS,\r
240                             status.statusMessage)\r
241                         + ",\n";\r
242                     message += addListEntry(FIELD.ID.PERCENT_PROGRESS,\r
243                             status.percentProgress)\r
244                         + "\n\n";\r
245                 }\r
246             }\r
247             else {\r
248                 if (UtilityService.hasContents(response.data.status) && UtilityService.hasContents(response.data.entity)) {\r
249                     message = this.getFormattedCommonResponse(response) + "\n";\r
250                 }\r
251             }\r
252             return message;\r
253         },\r
254         getManualTasks : function(requestId) {\r
255             $log.debug("MsoService:getManualTasks: requestId: "\r
256                 + requestId);\r
257             return $http.get(\r
258                 "mso/mso_get_man_task/" + requestId,\r
259                 {\r
260                     timeout: PropertyService\r
261                         .getServerResponseTimeoutMsec()\r
262                 })\r
263                 .catch(UtilityService.runHttpErrorHandler);\r
264         },\r
265         completeTask: function(taskId, taskToComplete) {\r
266             var promise = new Promise(function (resolve, reject) {\r
267                 $log.debug("MsoService:completeTask: taskId: "\r
268                     + taskId);\r
269                 AaiService.getLoggedInUserID(function (response) {\r
270                     var attuid = response.data;\r
271                     var source = "VID";\r
272                     var data = {\r
273                         requestDetails: {\r
274                             requestInfo: {\r
275                                 source: source,\r
276                                 responseValue: taskToComplete,\r
277                                 requestorId: attuid\r
278                             }\r
279                         }\r
280                     };\r
281 \r
282                     return $http.post(\r
283                         "mso/mso_post_man_task/" + taskId, data,\r
284                         {\r
285                             timeout: PropertyService\r
286                                 .getServerResponseTimeoutMsec()\r
287                         }).then(function (response) {\r
288                             resolve(response);\r
289                     })\r
290                         .catch(UtilityService.runHttpErrorHandler);\r
291                 }, function () {\r
292                     reject();\r
293                 });\r
294             });\r
295 \r
296             return promise;\r
297         },\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
302                     break;\r
303                 case "msoFailure":\r
304                     showFunction(FIELD.ERROR.MSO, "");\r
305                     break;\r
306                 default:\r
307                     showFunction(FIELD.ERROR.SYSTEM_FAILURE);\r
308             }\r
309         },\r
310         activateInstance: activateInstance,\r
311         deactivateInstance: deactivateInstance,\r
312 \r
313 \r
314         createConfigurationInstance: function(requestParams) {\r
315 \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
324                 };\r
325 \r
326                 $log.debug("model info from instance", instance);\r
327                 $log.debug("model info to model", modelInfo);\r
328 \r
329                 return modelInfo\r
330             };\r
331 \r
332             var payload = {\r
333                 "requestDetails": {\r
334                     "modelInfo": {\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
342                     },\r
343                     "cloudConfiguration": {\r
344                         "lcpCloudRegionId": requestParams.portMirroringConfigFields.cloudRegionId,\r
345                         "cloudOwner" : requestParams.portMirroringConfigFields.cloudOwner\r
346                     },\r
347                     "requestInfo": {\r
348                         "instanceName": requestParams.portMirroringConfigFields.instanceName.value,\r
349                         "source": "VID",\r
350                         "requestorId": requestParams.attuuid\r
351                     },\r
352                     "relatedInstanceList": [\r
353                         {\r
354                             "relatedInstance": {\r
355                                 "instanceId": requestParams.topServiceInstanceId,\r
356                                 "modelInfo": {\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
362                                 }\r
363                             }\r
364                         },\r
365                         {\r
366                             "relatedInstance": {\r
367                                 "instanceId": requestParams.portMirroringConfigFields.sourceInstance.properties['vnf-id'],\r
368                                 "instanceDirection": "source",\r
369                                 "modelInfo": modelInfoOf(requestParams.portMirroringConfigFields.sourceInstance)\r
370                             }\r
371                         },\r
372                         {\r
373                             "relatedInstance": requestParams.configurationByPolicy ? {\r
374                                 "instanceName": requestParams.portMirroringConfigFields.destinationInstance.properties['pnfName'],\r
375                                 "instanceDirection": "destination",\r
376                                 "modelInfo": {\r
377                                     "modelType": "pnf"\r
378                                 }\r
379                             } : {\r
380                                 "instanceId": requestParams.portMirroringConfigFields.destinationInstance.properties['vnf-id'],\r
381                                 "instanceDirection": "destination",\r
382                                 "modelInfo": modelInfoOf(requestParams.portMirroringConfigFields.destinationInstance)\r
383                             }\r
384                         }\r
385                     ],\r
386                     "requestParameters": {\r
387                         "userParams": []\r
388                     }\r
389                 }\r
390             };\r
391 \r
392             $log.debug("payload", payload);\r
393 \r
394             var deferred = $q.defer();\r
395             $http.post([\r
396                 'mso','mso_create_configuration_instance',\r
397                 requestParams.topServiceInstanceId,\r
398                 'configurations',''\r
399             ].join(COMPONENT.FORWARD_SLASH),\r
400                 payload)\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
405             });\r
406             return deferred.promise;\r
407         },\r
408         deleteConfiguration: function(requestParams, configuration) {\r
409 \r
410             var requestDetails = {\r
411                 "modelInfo": requestParams.configurationModel,\r
412                 "cloudConfiguration": {\r
413                     "lcpCloudRegionId": configuration.configData.cloudRegionId\r
414                 },\r
415                 "requestInfo": {\r
416                     "source": "VID",\r
417                     "requestorId": requestParams.userId\r
418                 },\r
419                 "requestParameters": {\r
420                     "userParams": []\r
421                 }\r
422             };\r
423 \r
424             var url = "mso/mso_delete_configuration/" + requestParams.serviceInstanceId + "/configurations/" + requestParams.configurationId;\r
425             return sendPostRequest(url, requestDetails);\r
426         },\r
427         toggleConfigurationStatus: function(requestParams, configuration) {\r
428 \r
429             var requestDetails = {\r
430                 "modelInfo": requestParams.configurationModel,\r
431                 "cloudConfiguration": {\r
432                     "lcpCloudRegionId": configuration && configuration.configData ? configuration.configData.cloudRegionId : null\r
433                 },\r
434                 "requestInfo": {\r
435                     "source": "VID",\r
436                     "requestorId": requestParams.userId\r
437                 },\r
438                 "relatedInstanceList": [{\r
439                     "relatedInstance": {\r
440                         "instanceId": requestParams.serviceInstanceId,\r
441                         "modelInfo": requestParams.serviceModel\r
442                     }\r
443                 }],\r
444                 "requestParameters": {\r
445                     "userParams": []\r
446                 }\r
447             };\r
448 \r
449             var url;\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
454                     break;\r
455                 case FIELD.STATUS.AAI_ACTIVE:\r
456                     url = "mso/mso_deactivate_configuration/"+requestParams.serviceInstanceId+"/configurations/"+requestParams.configurationId;\r
457                     break;\r
458             }\r
459 \r
460             return sendPostRequest(url, requestDetails);\r
461         },\r
462 \r
463         togglePortStatus: function(requestParams, configuration, defaultParams) {\r
464 \r
465             var requestDetails = {\r
466                 "modelInfo": requestParams.configurationModel,\r
467                 "cloudConfiguration": {\r
468                     "lcpCloudRegionId": configuration && configuration.configData ? configuration.configData.cloudRegionId : null\r
469                 },\r
470                 "requestInfo": {\r
471                     "source": "VID",\r
472                     "requestorId": requestParams.userId\r
473                 },\r
474                 "relatedInstanceList": [\r
475                     {\r
476                         "relatedInstance": {\r
477                             "instanceId": requestParams.serviceInstanceId,\r
478                             "modelInfo": requestParams.serviceModel\r
479                         }\r
480                     },\r
481                     {\r
482                         "relatedInstance": {\r
483                             "instanceId": requestParams.portId,\r
484                             "instanceDirection": "source",\r
485                             "modelInfo": {\r
486                                 "modelType": "connectionPoint"\r
487                             }\r
488                         }\r
489                     }\r
490                 ]\r
491             };\r
492 \r
493             var url;\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
497                     break;\r
498                 case FIELD.STATUS.AAI_DISABLED:\r
499                     url = "mso/mso_enable_port_configuration/"+requestParams.serviceInstanceId+"/configurations/"+requestParams.configurationId;\r
500                     break;\r
501             }\r
502 \r
503             return sendPostRequest(url, requestDetails);\r
504         },\r
505 \r
506         buildPayloadForAssociateDissociate: function(serviceModelInfo, attuuid, instanceId, pnf) {\r
507             var payload = {\r
508                     "modelInfo": {\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
514                     },\r
515                     "requestInfo": {\r
516                         "source": "VID",\r
517                         "requestorId": attuuid\r
518                     },\r
519                     "relatedInstanceList": [\r
520                         {\r
521                             "relatedInstance": {\r
522                                 "instanceName": pnf,\r
523                                 "modelInfo": {\r
524                                     "modelType": "pnf"\r
525                                 }\r
526                             }\r
527                         }],\r
528                     "requestParameters": {\r
529                         "aLaCarte": true\r
530                     }\r
531             };\r
532 \r
533             $log.debug("payload", payload);\r
534 \r
535             return payload;\r
536         },\r
537         associatePnf: function(requestParams) {\r
538 \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
543                     ''\r
544                 ].join(COMPONENT.FORWARD_SLASH), payload);\r
545         },\r
546         dissociatePnf: function(requestParams) {\r
547 \r
548             var payload = this.buildPayloadForAssociateDissociate(requestParams.serviceModelInfo, requestParams.attuuid, requestParams.serviceInstanceId, requestParams.pnf);\r
549 \r
550             return sendPostRequest([\r
551                 COMPONENT.MSO, COMPONENT.MSO_REMOVE_RELATIONSHIP,\r
552                 requestParams.serviceInstanceId,\r
553                 ''\r
554             ].join(COMPONENT.FORWARD_SLASH), payload);\r
555         },\r
556         activateFabricConfiguration: function(requestParams) {\r
557             var payload = buildPayloadForActivateFabricConfiguration(requestParams.model, requestParams.userId);\r
558 \r
559             var url = COMPONENT.MSO_ACTIVATE_FABRIC_CONFIGURATION_INSTANCE.replace('@serviceInstanceId', requestParams.serviceInstanceId);\r
560             return sendPostRequest(url, payload);\r
561         },\r
562         deactivateAndCloudDelete : function (requestParams)  {\r
563             var payload = {\r
564                 tenantId: requestParams.tenantId,\r
565                 lcpCloudRegionId: requestParams.lcpCloudRegionId,\r
566                 userId: requestParams.userId\r
567             };\r
568 \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
572 \r
573             return sendPostRequestWithBody(url, payload);\r
574         }\r
575     }\r
576 };\r
577 \r
578 appDS2.factory("MsoService", MsoService );\r