Merge from ECOMP's repository
[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 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.lcpRegion.value\r
345                     },\r
346                     "requestInfo": {\r
347                         "instanceName": requestParams.portMirroringConfigFields.instanceName.value,\r
348                         "source": "VID",\r
349                         "requestorId": requestParams.attuuid\r
350                     },\r
351                     "relatedInstanceList": [\r
352                         {\r
353                             "relatedInstance": {\r
354                                 "instanceId": requestParams.topServiceInstanceId,\r
355                                 "modelInfo": {\r
356                                     "modelType": "service", // relatedTopModelsInfo.modelType\r
357                                     "modelInvariantId": requestParams.relatedTopModelsInfo.modelInvariantId,\r
358                                     "modelVersionId": requestParams.relatedTopModelsInfo.modelNameVersionId,\r
359                                     "modelName": requestParams.relatedTopModelsInfo.modelName,\r
360                                     "modelVersion": requestParams.relatedTopModelsInfo.modelVersion\r
361                                 }\r
362                             }\r
363                         },\r
364                         {\r
365                             "relatedInstance": {\r
366                                 "instanceId": requestParams.portMirroringConfigFields.sourceInstance.properties['vnf-id'],\r
367                                 "instanceDirection": "source",\r
368                                 "modelInfo": modelInfoOf(requestParams.portMirroringConfigFields.sourceInstance)\r
369                             }\r
370                         },\r
371                         {\r
372                             "relatedInstance": requestParams.configurationByPolicy ? {\r
373                                 "instanceName": requestParams.portMirroringConfigFields.destinationInstance.properties['pnfName'],\r
374                                 "instanceDirection": "destination",\r
375                                 "modelInfo": {\r
376                                     "modelType": "pnf"\r
377                                 }\r
378                             } : {\r
379                                 "instanceId": requestParams.portMirroringConfigFields.destinationInstance.properties['vnf-id'],\r
380                                 "instanceDirection": "destination",\r
381                                 "modelInfo": modelInfoOf(requestParams.portMirroringConfigFields.destinationInstance)\r
382                             }\r
383                         }\r
384                     ],\r
385                     "requestParameters": {\r
386                         "userParams": []\r
387                     }\r
388                 }\r
389             };\r
390 \r
391             $log.debug("payload", payload);\r
392 \r
393             var deferred = $q.defer();\r
394             $http.post([\r
395                 'mso','mso_create_configuration_instance',\r
396                 requestParams.topServiceInstanceId,\r
397                 'configurations',''\r
398             ].join(COMPONENT.FORWARD_SLASH),\r
399                 payload)\r
400                 .success(function (response) {\r
401                     deferred.resolve({data : response});\r
402                 }).error(function (data, status) {\r
403                 deferred.reject({message: data, status: status});\r
404             });\r
405             return deferred.promise;\r
406         },\r
407         deleteConfiguration: function(requestParams, configuration) {\r
408 \r
409             var requestDetails = {\r
410                 "modelInfo": requestParams.configurationModel,\r
411                 "cloudConfiguration": {\r
412                     "lcpCloudRegionId": configuration.configData.cloudRegionId\r
413                 },\r
414                 "requestInfo": {\r
415                     "source": "VID",\r
416                     "requestorId": requestParams.userId\r
417                 },\r
418                 "requestParameters": {\r
419                     "userParams": []\r
420                 }\r
421             };\r
422 \r
423             var url = "mso/mso_delete_configuration/" + requestParams.serviceInstanceId + "/configurations/" + requestParams.configurationId;\r
424             return sendPostRequest(url, requestDetails);\r
425         },\r
426         toggleConfigurationStatus: function(requestParams, configuration) {\r
427 \r
428             var requestDetails = {\r
429                 "modelInfo": requestParams.configurationModel,\r
430                 "cloudConfiguration": {\r
431                     "lcpCloudRegionId": configuration && configuration.configData ? configuration.configData.cloudRegionId : null\r
432                 },\r
433                 "requestInfo": {\r
434                     "source": "VID",\r
435                     "requestorId": requestParams.userId\r
436                 },\r
437                 "relatedInstanceList": [{\r
438                     "relatedInstance": {\r
439                         "instanceId": requestParams.serviceInstanceId,\r
440                         "modelInfo": requestParams.serviceModel\r
441                     }\r
442                 }],\r
443                 "requestParameters": {\r
444                     "userParams": []\r
445                 }\r
446             };\r
447 \r
448             var url;\r
449             switch (requestParams.configStatus) {\r
450                 case FIELD.STATUS.AAI_CREATED:\r
451                 case FIELD.STATUS.AAI_INACTIVE:\r
452                     url = "mso/mso_activate_configuration/"+requestParams.serviceInstanceId+"/configurations/"+requestParams.configurationId;\r
453                     break;\r
454                 case FIELD.STATUS.AAI_ACTIVE:\r
455                     url = "mso/mso_deactivate_configuration/"+requestParams.serviceInstanceId+"/configurations/"+requestParams.configurationId;\r
456                     break;\r
457             }\r
458 \r
459             return sendPostRequest(url, requestDetails);\r
460         },\r
461 \r
462         togglePortStatus: function(requestParams, configuration, defaultParams) {\r
463 \r
464             var requestDetails = {\r
465                 "modelInfo": requestParams.configurationModel,\r
466                 "cloudConfiguration": {\r
467                     "lcpCloudRegionId": configuration && configuration.configData ? configuration.configData.cloudRegionId : null\r
468                 },\r
469                 "requestInfo": {\r
470                     "source": "VID",\r
471                     "requestorId": requestParams.userId\r
472                 },\r
473                 "relatedInstanceList": [\r
474                     {\r
475                         "relatedInstance": {\r
476                             "instanceId": requestParams.serviceInstanceId,\r
477                             "modelInfo": requestParams.serviceModel\r
478                         }\r
479                     },\r
480                     {\r
481                         "relatedInstance": {\r
482                             "instanceId": requestParams.portId,\r
483                             "instanceDirection": "source",\r
484                             "modelInfo": {\r
485                                 "modelType": "connectionPoint"\r
486                             }\r
487                         }\r
488                     }\r
489                 ]\r
490             };\r
491 \r
492             var url;\r
493             switch (requestParams.portStatus) {\r
494                 case FIELD.STATUS.AAI_ENABLED:\r
495                     url = "mso/mso_disable_port_configuration/"+requestParams.serviceInstanceId+"/configurations/"+requestParams.configurationId;\r
496                     break;\r
497                 case FIELD.STATUS.AAI_DISABLED:\r
498                     url = "mso/mso_enable_port_configuration/"+requestParams.serviceInstanceId+"/configurations/"+requestParams.configurationId;\r
499                     break;\r
500             }\r
501 \r
502             return sendPostRequest(url, requestDetails);\r
503         },\r
504 \r
505         buildPayloadForAssociateDissociate: function(serviceModelInfo, attuuid, instanceId, pnf) {\r
506             var payload = {\r
507                     "modelInfo": {\r
508                         "modelType": "service",\r
509                         "modelInvariantId": serviceModelInfo.invariantUuid,\r
510                         "modelVersionId": serviceModelInfo.uuid,\r
511                         "modelName": serviceModelInfo.name,\r
512                         "modelVersion": serviceModelInfo.version\r
513                     },\r
514                     "requestInfo": {\r
515                         "source": "VID",\r
516                         "requestorId": attuuid\r
517                     },\r
518                     "relatedInstanceList": [\r
519                         {\r
520                             "relatedInstance": {\r
521                                 "instanceName": pnf,\r
522                                 "modelInfo": {\r
523                                     "modelType": "pnf"\r
524                                 }\r
525                             }\r
526                         }],\r
527                     "requestParameters": {\r
528                         "aLaCarte": true\r
529                     }\r
530             };\r
531 \r
532             $log.debug("payload", payload);\r
533 \r
534             return payload;\r
535         },\r
536         associatePnf: function(requestParams) {\r
537 \r
538             var payload = this.buildPayloadForAssociateDissociate(requestParams.serviceModelInfo, requestParams.attuuid, requestParams.instanceId, requestParams.pnf);\r
539             return sendPostRequest([\r
540                     COMPONENT.MSO, COMPONENT.MSO_CREATE_REALATIONSHIP,\r
541                     requestParams.instanceId,\r
542                     ''\r
543                 ].join(COMPONENT.FORWARD_SLASH), payload);\r
544         },\r
545         dissociatePnf: function(requestParams) {\r
546 \r
547             var payload = this.buildPayloadForAssociateDissociate(requestParams.serviceModelInfo, requestParams.attuuid, requestParams.serviceInstanceId, requestParams.pnf);\r
548 \r
549             return sendPostRequest([\r
550                 COMPONENT.MSO, COMPONENT.MSO_REMOVE_RELATIONSHIP,\r
551                 requestParams.serviceInstanceId,\r
552                 ''\r
553             ].join(COMPONENT.FORWARD_SLASH), payload);\r
554         }\r
555     }\r
556 };\r
557 \r
558 appDS2.factory("MsoService", MsoService );\r