org.onap migration
[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) {\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, aicZone) {\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                     "userParams": [{\r
73                         "name": "aic_zone",\r
74                         "value": aicZone\r
75                     }]\r
76                 }\r
77         };\r
78 \r
79         $log.debug("Service Activate/Deactivate payload", requestDetails);\r
80 \r
81         return requestDetails;\r
82 \r
83     };\r
84 \r
85     var activateInstance = function(requestParams) {\r
86         var requestDetails = buildPayloadForServiceActivateDeactivate(requestParams.model, requestParams.userId, requestParams.aicZone);\r
87 \r
88         return sendPostRequest(COMPONENT.MSO_ACTIVATE_INSTANCE.replace('@serviceInstanceId', requestParams.instance.serviceInstanceId),\r
89             requestDetails);\r
90     };\r
91 \r
92     var deactivateInstance = function(requestParams) {\r
93         var requestDetails = buildPayloadForServiceActivateDeactivate(requestParams.model, requestParams.userId, requestParams.aicZone);\r
94 \r
95         return sendPostRequest(COMPONENT.MSO_DEACTIVATE_INSTANCE.replace('@serviceInstanceId', requestParams.instance.serviceInstanceId),\r
96             requestDetails);\r
97     };\r
98 \r
99     var sendPostRequest = function(url, requestDetails) {\r
100         var deferred = $q.defer();\r
101         if (url) {\r
102             $http.post(url, {\r
103                 requestDetails: requestDetails\r
104             }, {\r
105                 timeout: PropertyService.getServerResponseTimeoutMsec()\r
106             }).success(function (response) {\r
107                 deferred.resolve({data: response});\r
108             }).error(function (data, status) {\r
109                 deferred.reject({message: data, status: status});\r
110             });\r
111         }\r
112 \r
113         return deferred.promise;\r
114     };\r
115 \r
116     return {\r
117         createInstance : requestInstanceUpdate,\r
118         deleteInstance : requestInstanceUpdate,\r
119         getOrchestrationRequest : function(requestId, successCallbackFunction) {\r
120             $log.debug("MsoService:getOrchestrationRequest: requestId: "\r
121                 + requestId);\r
122             $http.get(\r
123                 "mso/mso_get_orch_req/"\r
124                 + requestId + "?r=" + Math.random(),\r
125                 {\r
126                     timeout : PropertyService\r
127                         .getServerResponseTimeoutMsec()\r
128                 }).then(successCallbackFunction)["catch"]\r
129             (UtilityService.runHttpErrorHandler);\r
130         },\r
131         getOrchestrationRequests : function(filterString,\r
132                                             successCallbackFunction) {\r
133             $log.debug("MsoService:getOrchestrationRequests: filterString: "\r
134                 + filterString);\r
135             $http.get(\r
136                 "mso/mso_get_orch_reqs/"\r
137                 + encodeURIComponent(filterString) + "?r="\r
138                 + Math.random(),\r
139                 {\r
140                     timeout : PropertyService\r
141                         .getServerResponseTimeoutMsec()\r
142                 }).then(successCallbackFunction)["catch"]\r
143             (UtilityService.runHttpErrorHandler);\r
144         },\r
145         getFormattedCommonResponse : function(response) {\r
146             return UtilityService.getCurrentTime() + " HTTP Status: "\r
147                 + UtilityService.getHttpStatusText(response.data.status)\r
148                 + "\n" + angular.toJson(response.data.entity, true)\r
149 \r
150         },\r
151         checkValidStatus : checkValidStatus,\r
152         getFormattedGetOrchestrationRequestsResponse : function(response) {\r
153             UtilityService.checkUndefined(COMPONENT.ENTITY, response.data.entity);\r
154             UtilityService.checkUndefined(COMPONENT.STATUS, response.data.status);\r
155             checkValidStatus(response);\r
156 \r
157             var list = response.data.entity.requestList\r
158             UtilityService.checkUndefined(FIELD.ID.REQUEST_LIST, list);\r
159 \r
160             var message = "";\r
161 \r
162             for (var i = 0; i < list.length; i++) {\r
163                 var request = list[i].request;\r
164                 message += addListEntry(FIELD.ID.REQUEST_ID, request.requestId) + ",\n";\r
165                 message += addListEntry(FIELD.ID.REQUEST_TYPE, request.requestType)\r
166                     + ",\n";\r
167                 var status = request.requestStatus;\r
168                 if (status === undefined) {\r
169                     message += addListEntry(FIELD.ID.REQUEST_STATUS, undefined) + "\n";\r
170                 } else {\r
171                     message += addListEntry(FIELD.ID.TIMESTAMP, status.timestamp)\r
172                         + ",\n";\r
173                     message += addListEntry(FIELD.ID.REQUEST_STATE, status.requestState)\r
174                         + ",\n";\r
175                     message += addListEntry(FIELD.ID.REQUEST_STATUS,\r
176                             status.statusMessage)\r
177                         + ",\n";\r
178                     message += addListEntry(FIELD.ID.PERCENT_PROGRESS,\r
179                             status.percentProgress)\r
180                         + "\n";\r
181                 }\r
182                 if (i < (list.length - 1)) {\r
183                     message += "\n";\r
184                 }\r
185             }\r
186             return message;\r
187         },\r
188         getFormattedSingleGetOrchestrationRequestResponse : function (response) {\r
189             UtilityService.checkUndefined(COMPONENT.ENTITY, response.data.entity);\r
190             UtilityService.checkUndefined(COMPONENT.STATUS, response.data.status);\r
191             //checkValidStatus(response);\r
192 \r
193             var message = "";\r
194             if (! (response && response.data && response.data.entity)) {\r
195                 return message;\r
196             }\r
197             if ( UtilityService.hasContents (response.data.entity.request) ) {\r
198                 var request = response.data.entity.request;\r
199                 message += addListEntry(FIELD.ID.REQUEST_ID, request.requestId) + ",\n";\r
200                 message += addListEntry(FIELD.ID.REQUEST_TYPE, request.requestType)\r
201                     + ",\n";\r
202                 var status = request.requestStatus;\r
203                 if (status === undefined) {\r
204                     message += addListEntry(FIELD.ID.REQUEST_STATUS, undefined) + "\n";\r
205                 } else {\r
206                     message += addListEntry(FIELD.ID.TIMESTAMP, status.timestamp)\r
207                         + ",\n";\r
208                     message += addListEntry(FIELD.ID.REQUEST_STATE, status.requestState)\r
209                         + ",\n";\r
210                     message += addListEntry(FIELD.ID.REQUEST_STATUS,\r
211                             status.statusMessage)\r
212                         + ",\n";\r
213                     message += addListEntry(FIELD.ID.PERCENT_PROGRESS,\r
214                             status.percentProgress)\r
215                         + "\n\n";\r
216                 }\r
217             }\r
218             else {\r
219                 if (UtilityService.hasContents(response.data.status) && UtilityService.hasContents(response.data.entity)) {\r
220                     message = this.getFormattedCommonResponse(response) + "\n";\r
221                 }\r
222             }\r
223             return message;\r
224         },\r
225         getManualTasks : function(requestId) {\r
226             $log.debug("MsoService:getManualTasks: requestId: "\r
227                 + requestId);\r
228             return $http.get(\r
229                 "mso/mso_get_man_task/" + requestId,\r
230                 {\r
231                     timeout: PropertyService\r
232                         .getServerResponseTimeoutMsec()\r
233                 })\r
234                 .catch(UtilityService.runHttpErrorHandler);\r
235         },\r
236         completeTask: function(taskId, taskToComplete) {\r
237             var promise = new Promise(function (resolve, reject) {\r
238                 $log.debug("MsoService:completeTask: taskId: "\r
239                     + taskId);\r
240                 AaiService.getLoggedInUserID(function (response) {\r
241                     var attuid = response.data;\r
242                     var source = "VID";\r
243                     var data = {\r
244                         requestDetails: {\r
245                             requestInfo: {\r
246                                 source: source,\r
247                                 responseValue: taskToComplete,\r
248                                 requestorId: attuid\r
249                             }\r
250                         }\r
251                     };\r
252 \r
253                     return $http.post(\r
254                         "mso/mso_post_man_task/" + taskId, data,\r
255                         {\r
256                             timeout: PropertyService\r
257                                 .getServerResponseTimeoutMsec()\r
258                         }).then(function (response) {\r
259                             resolve(response);\r
260                     })\r
261                         .catch(UtilityService.runHttpErrorHandler);\r
262                 }, function () {\r
263                     reject();\r
264                 });\r
265             });\r
266 \r
267             return promise;\r
268         },\r
269         showResponseContentError : function(error, showFunction) {\r
270             switch (error.type) {\r
271                 case "undefinedObject":\r
272                     showFunction(FIELD.ERROR.SYSTEM_FAILURE, error.message);\r
273                     break;\r
274                 case "msoFailure":\r
275                     showFunction(FIELD.ERROR.MSO, "")\r
276                     break;\r
277                 default:\r
278                     showFunction(FIELD.ERROR.SYSTEM_FAILURE);\r
279             }\r
280         },\r
281         activateInstance: activateInstance,\r
282         deactivateInstance: deactivateInstance,\r
283 \r
284 \r
285         createConfigurationInstance: function(requestParams) {\r
286 \r
287             const modelInfoOf = function (instance) {\r
288                 const modelInfo = {\r
289                     "modelType": "vnf",\r
290                     "modelInvariantId": instance.properties['model-invariant-id'],\r
291                     "modelVersionId": instance.properties['model-version-id'],\r
292                     "modelName": instance.properties['model-name'],\r
293                     "modelVersion": instance.properties['model-version'],\r
294                     "modelCustomizationId": instance.properties['model-customization-id']\r
295                 };\r
296 \r
297                 $log.debug("model info from instance", instance);\r
298                 $log.debug("model info to model", modelInfo);\r
299 \r
300                 return modelInfo\r
301             };\r
302 \r
303             var payload = {\r
304                 "requestDetails": {\r
305                     "modelInfo": {\r
306                         "modelType": "configuration",\r
307                         "modelInvariantId": requestParams.configurationModelInfo.modelInvariantId,\r
308                         "modelVersionId": requestParams.configurationModelInfo.modelNameVersionId,\r
309                         "modelName": requestParams.configurationModelInfo.modelName, // "Port Mirroring Configuration"\r
310                         "modelVersion": requestParams.configurationModelInfo.modelVersion,\r
311                         "modelCustomizationId": requestParams.configurationModelInfo.customizationUuid,\r
312                         "modelCustomizationName": requestParams.configurationModelInfo.modelCustomizationName\r
313                     },\r
314                     "cloudConfiguration": {\r
315                         // "tenantId": ????\r
316                         "lcpCloudRegionId": requestParams.portMirroringConfigFields.lcpRegion.value\r
317                     },\r
318                     "requestInfo": {\r
319                         "instanceName": requestParams.portMirroringConfigFields.instanceName.value,\r
320                         "source": "VID",\r
321                         "requestorId": requestParams.attuuid\r
322                     },\r
323                     "relatedInstanceList": [\r
324                         {\r
325                             "relatedInstance": {\r
326                                 "instanceId": requestParams.topServiceInstanceId,\r
327                                 "modelInfo": {\r
328                                     "modelType": "service", // relatedTopModelsInfo.modelType\r
329                                     "modelInvariantId": requestParams.relatedTopModelsInfo.modelInvariantId,\r
330                                     "modelVersionId": requestParams.relatedTopModelsInfo.modelNameVersionId,\r
331                                     "modelName": requestParams.relatedTopModelsInfo.modelName,\r
332                                     "modelVersion": requestParams.relatedTopModelsInfo.modelVersion\r
333                                 }\r
334                             }\r
335                         },\r
336                         {\r
337                             "relatedInstance": {\r
338                                 "instanceId": requestParams.portMirroringConfigFields.sourceInstance.properties['vnf-id'],\r
339                                 "instanceDirection": "source",\r
340                                 "modelInfo": modelInfoOf(requestParams.portMirroringConfigFields.sourceInstance)\r
341                             }\r
342                         },\r
343                         {\r
344                             "relatedInstance": {\r
345                                 "instanceId": requestParams.configurationByPolicy ?\r
346                                     requestParams.portMirroringConfigFields.destinationInstance.properties['pnfName']:\r
347                                     requestParams.portMirroringConfigFields.destinationInstance.properties['vnf-id'],\r
348                                 "instanceDirection": "destination",\r
349                                 "modelInfo":\r
350                                     requestParams.configurationByPolicy ?\r
351                                         {"modelType": "pnf"} :\r
352                                         modelInfoOf(requestParams.portMirroringConfigFields.destinationInstance)\r
353                             }\r
354                         }\r
355                     ],\r
356                     "requestParameters": {\r
357                         "userParams": []\r
358                     }\r
359                 }\r
360             };\r
361 \r
362             $log.debug("payload", payload);\r
363 \r
364             var deferred = $q.defer();\r
365             $http.post([\r
366                 'mso','mso_create_configuration_instance',\r
367                 requestParams.topServiceInstanceId,\r
368                 'configurations',''\r
369             ].join(COMPONENT.FORWARD_SLASH),\r
370                 payload)\r
371                 .success(function (response) {\r
372                     deferred.resolve({data : response});\r
373                 }).error(function (data, status) {\r
374                 deferred.reject({message: data, status: status});\r
375             });\r
376             return deferred.promise;\r
377         },\r
378 \r
379         toggleConfigurationStatus: function(requestParams) {\r
380 \r
381             var requestDetails = {\r
382                 "modelInfo": requestParams.configurationModel,\r
383                 "cloudConfiguration": {\r
384                     "lcpCloudRegionId": "mdt1"\r
385                 },\r
386                 "requestInfo": {\r
387                     "source": "VID",\r
388                     "requestorId": requestParams.userId\r
389                 },\r
390                 "relatedInstanceList": [{\r
391                     "relatedInstance": {\r
392                         "instanceId": requestParams.serviceInstanceId,\r
393                         "modelInfo": requestParams.serviceModel\r
394                     }\r
395                 }],\r
396                 "requestParameters": {\r
397                     "userParams": []\r
398                 }\r
399             };\r
400 \r
401             var url;\r
402             switch (requestParams.configStatus) {\r
403                 case FIELD.STATUS.AAI_CREATED:\r
404                 case FIELD.STATUS.AAI_INACTIVE:\r
405                     url = "mso/mso_activate_configuration/"+requestParams.serviceInstanceId+"/configurations/"+requestParams.configurationId;\r
406                     break;\r
407                 case FIELD.STATUS.AAI_ACTIVE:\r
408                     url = "mso/mso_deactivate_configuration/"+requestParams.serviceInstanceId+"/configurations/"+requestParams.configurationId;\r
409                     break;\r
410             }\r
411 \r
412             return sendPostRequest(url, requestDetails);\r
413         },\r
414 \r
415         togglePortStatus: function(requestParams) {\r
416             var requestDetails = {\r
417                 "modelInfo": requestParams.configurationModel,\r
418                 "cloudConfiguration": {\r
419                     "lcpCloudRegionId": "mdt1"\r
420                 },\r
421                 "requestInfo": {\r
422                     "source": "VID",\r
423                     "requestorId": requestParams.userId\r
424                 },\r
425                 "relatedInstanceList": [\r
426                     {\r
427                         "relatedInstance": {\r
428                             "instanceId": requestParams.serviceInstanceId,\r
429                             "modelInfo": requestParams.serviceModel\r
430                         }\r
431                     },\r
432                     {\r
433                         "relatedInstance": {\r
434                             "instanceId": requestParams.portId,\r
435                             "instanceDirection": "source",\r
436                             "modelInfo": {\r
437                                 "modelType": "connectionPoint"\r
438                             }\r
439                         }\r
440                     }\r
441                 ]\r
442             };\r
443 \r
444             var url;\r
445             switch (requestParams.portStatus) {\r
446                 case FIELD.STATUS.AAI_ENABLED:\r
447                     url = "mso/mso_disable_port_configuration/"+requestParams.serviceInstanceId+"/configurations/"+requestParams.configurationId;\r
448                     break;\r
449                 case FIELD.STATUS.AAI_DISABLED:\r
450                     url = "mso/mso_enable_port_configuration/"+requestParams.serviceInstanceId+"/configurations/"+requestParams.configurationId;\r
451                     break;\r
452             }\r
453 \r
454             return sendPostRequest(url, requestDetails);\r
455         },\r
456 \r
457         buildPayloadForAssociateDissociate: function(serviceModelInfo, attuuid, instanceId, pnf) {\r
458             var payload = {\r
459                     "modelInfo": {\r
460                         "modelType": "service",\r
461                         "modelInvariantId": serviceModelInfo.invariantUuid,\r
462                         "modelVersionId": serviceModelInfo.uuid,\r
463                         "modelName": serviceModelInfo.name,\r
464                         "modelVersion": serviceModelInfo.version\r
465                     },\r
466                     "requestInfo": {\r
467                         "source": "VID",\r
468                         "requestorId": attuuid\r
469                     },\r
470                     "relatedInstanceList": [\r
471                         {\r
472                             "relatedInstance": {\r
473                                 "instanceName": pnf,\r
474                                 "modelInfo": {\r
475                                     "modelType": "pnf"\r
476                                 }\r
477                             }\r
478                         }],\r
479                     "requestParameters": {\r
480                         "aLaCarte": true\r
481                     }\r
482             };\r
483 \r
484             $log.debug("payload", payload);\r
485 \r
486             return payload;\r
487         },\r
488         associatePnf: function(requestParams) {\r
489 \r
490             var payload = this.buildPayloadForAssociateDissociate(requestParams.serviceModelInfo, requestParams.attuuid, requestParams.instanceId, requestParams.pnf);\r
491             return sendPostRequest([\r
492                     COMPONENT.MSO, COMPONENT.MSO_CREATE_REALATIONSHIP,\r
493                     requestParams.instanceId,\r
494                     ''\r
495                 ].join(COMPONENT.FORWARD_SLASH), payload);\r
496         },\r
497         dissociatePnf: function(requestParams) {\r
498 \r
499             var payload = this.buildPayloadForAssociateDissociate(requestParams.serviceModelInfo, requestParams.attuuid, requestParams.serviceInstanceId, requestParams.pnf);\r
500 \r
501             return sendPostRequest([\r
502                 COMPONENT.MSO, COMPONENT.MSO_REMOVE_RELATIONSHIP,\r
503                 requestParams.serviceInstanceId,\r
504                 ''\r
505             ].join(COMPONENT.FORWARD_SLASH), payload);\r
506         }\r
507     }\r
508 };\r
509 \r
510 appDS2.factory("MsoService", MsoService );\r