273f8e9e3d125f1ef9a6f5d79d547b42dff0a93f
[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 activateInstance = function(requestParams) {\r
84         var requestDetails = buildPayloadForServiceActivateDeactivate(requestParams.model, requestParams.userId);\r
85 \r
86         return sendPostRequest(COMPONENT.MSO_ACTIVATE_INSTANCE.replace('@serviceInstanceId', requestParams.instance.serviceInstanceId),\r
87             requestDetails);\r
88     };\r
89 \r
90     var deactivateInstance = function(requestParams) {\r
91         var requestDetails = buildPayloadForServiceActivateDeactivate(requestParams.model, requestParams.userId);\r
92 \r
93         return sendPostRequest(COMPONENT.MSO_DEACTIVATE_INSTANCE.replace('@serviceInstanceId', requestParams.instance.serviceInstanceId),\r
94             requestDetails);\r
95     };\r
96 \r
97     var sendPostRequest = function(url, requestDetails) {\r
98         var deferred = $q.defer();\r
99         if (url) {\r
100             $http.post(url, {\r
101                 requestDetails: requestDetails\r
102             }, {\r
103                 timeout: PropertyService.getServerResponseTimeoutMsec()\r
104             }).success(function (response) {\r
105                 deferred.resolve({data: response});\r
106             }).error(function (data, status) {\r
107                 deferred.reject({message: data, status: status});\r
108             });\r
109         }\r
110 \r
111         return deferred.promise;\r
112     };\r
113 \r
114     return {\r
115         createInstance : requestInstanceUpdate,\r
116         deleteInstance : requestInstanceUpdate,\r
117         getOrchestrationRequest : function(requestId, successCallbackFunction) {\r
118             $log.debug("MsoService:getOrchestrationRequest: requestId: "\r
119                 + requestId);\r
120             $http.get(\r
121                 "mso/mso_get_orch_req/"\r
122                 + requestId + "?r=" + Math.random(),\r
123                 {\r
124                     timeout : PropertyService\r
125                         .getServerResponseTimeoutMsec()\r
126                 }).then(successCallbackFunction)["catch"]\r
127             (UtilityService.runHttpErrorHandler);\r
128         },\r
129         getOrchestrationRequests : function(filterString,\r
130                                             successCallbackFunction) {\r
131             $log.debug("MsoService:getOrchestrationRequests: filterString: "\r
132                 + filterString);\r
133             $http.get(\r
134                 "mso/mso_get_orch_reqs/"\r
135                 + encodeURIComponent(filterString) + "?r="\r
136                 + Math.random(),\r
137                 {\r
138                     timeout : PropertyService\r
139                         .getServerResponseTimeoutMsec()\r
140                 }).then(successCallbackFunction)["catch"]\r
141             (UtilityService.runHttpErrorHandler);\r
142         },\r
143         getFormattedCommonResponse : function(response) {\r
144             return UtilityService.getCurrentTime() + " HTTP Status: "\r
145                 + UtilityService.getHttpStatusText(response.data.status)\r
146                 + "\n" + angular.toJson(response.data.entity, true)\r
147 \r
148         },\r
149         checkValidStatus : checkValidStatus,\r
150         getFormattedGetOrchestrationRequestsResponse : function(response) {\r
151             UtilityService.checkUndefined(COMPONENT.ENTITY, response.data.entity);\r
152             UtilityService.checkUndefined(COMPONENT.STATUS, response.data.status);\r
153             checkValidStatus(response);\r
154 \r
155             var list = response.data.entity.requestList;\r
156             UtilityService.checkUndefined(FIELD.ID.REQUEST_LIST, list);\r
157 \r
158             var message = "";\r
159 \r
160             for (var i = 0; i < list.length; i++) {\r
161                 var request = list[i].request;\r
162                 message += addListEntry(FIELD.ID.REQUEST_ID, request.requestId) + ",\n";\r
163                 message += addListEntry(FIELD.ID.REQUEST_TYPE, request.requestType)\r
164                     + ",\n";\r
165                 var status = request.requestStatus;\r
166                 if (status === undefined) {\r
167                     message += addListEntry(FIELD.ID.REQUEST_STATUS, undefined) + "\n";\r
168                 } else {\r
169                     if(status.finishTime) {\r
170                         message += addListEntry(FIELD.ID.TIMESTAMP, moment(new Date(status.finishTime)).format("ddd, DD MMM YYYY HH:mm:ss"))\r
171                             + ",\n";\r
172                     }\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, moment(new Date()).format("ddd, DD MMM YYYY HH:mm:ss"))\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": requestParams.configurationByPolicy ? {\r
345                                 "instanceName": requestParams.portMirroringConfigFields.destinationInstance.properties['pnfName'],\r
346                                 "instanceDirection": "destination",\r
347                                 "modelInfo": {\r
348                                     "modelType": "pnf"\r
349                                 }\r
350                             } : {\r
351                                 "instanceId": requestParams.portMirroringConfigFields.destinationInstance.properties['vnf-id'],\r
352                                 "instanceDirection": "destination",\r
353                                 "modelInfo": modelInfoOf(requestParams.portMirroringConfigFields.destinationInstance)\r
354                             }\r
355                         }\r
356                     ],\r
357                     "requestParameters": {\r
358                         "userParams": []\r
359                     }\r
360                 }\r
361             };\r
362 \r
363             $log.debug("payload", payload);\r
364 \r
365             var deferred = $q.defer();\r
366             $http.post([\r
367                 'mso','mso_create_configuration_instance',\r
368                 requestParams.topServiceInstanceId,\r
369                 'configurations',''\r
370             ].join(COMPONENT.FORWARD_SLASH),\r
371                 payload)\r
372                 .success(function (response) {\r
373                     deferred.resolve({data : response});\r
374                 }).error(function (data, status) {\r
375                 deferred.reject({message: data, status: status});\r
376             });\r
377             return deferred.promise;\r
378         },\r
379         deleteConfiguration: function(requestParams, configuration) {\r
380 \r
381             var requestDetails = {\r
382                 "modelInfo": requestParams.configurationModel,\r
383                 "cloudConfiguration": {\r
384                     "lcpCloudRegionId": configuration.configData.cloudRegionId\r
385                 },\r
386                 "requestInfo": {\r
387                     "source": "VID",\r
388                     "requestorId": requestParams.userId\r
389                 },\r
390                 "requestParameters": {\r
391                     "userParams": []\r
392                 }\r
393             };\r
394 \r
395             var url = "mso/mso_delete_configuration/" + requestParams.serviceInstanceId + "/configurations/" + requestParams.configurationId;\r
396             return sendPostRequest(url, requestDetails);\r
397         },\r
398         toggleConfigurationStatus: function(requestParams, configuration) {\r
399 \r
400             var requestDetails = {\r
401                 "modelInfo": requestParams.configurationModel,\r
402                 "cloudConfiguration": {\r
403                     "lcpCloudRegionId": configuration && configuration.configData ? configuration.configData.cloudRegionId : null\r
404                 },\r
405                 "requestInfo": {\r
406                     "source": "VID",\r
407                     "requestorId": requestParams.userId\r
408                 },\r
409                 "relatedInstanceList": [{\r
410                     "relatedInstance": {\r
411                         "instanceId": requestParams.serviceInstanceId,\r
412                         "modelInfo": requestParams.serviceModel\r
413                     }\r
414                 }],\r
415                 "requestParameters": {\r
416                     "userParams": []\r
417                 }\r
418             };\r
419 \r
420             var url;\r
421             switch (requestParams.configStatus) {\r
422                 case FIELD.STATUS.AAI_CREATED:\r
423                 case FIELD.STATUS.AAI_INACTIVE:\r
424                     url = "mso/mso_activate_configuration/"+requestParams.serviceInstanceId+"/configurations/"+requestParams.configurationId;\r
425                     break;\r
426                 case FIELD.STATUS.AAI_ACTIVE:\r
427                     url = "mso/mso_deactivate_configuration/"+requestParams.serviceInstanceId+"/configurations/"+requestParams.configurationId;\r
428                     break;\r
429             }\r
430 \r
431             return sendPostRequest(url, requestDetails);\r
432         },\r
433 \r
434         togglePortStatus: function(requestParams, configuration, defaultParams) {\r
435 \r
436             var requestDetails = {\r
437                 "modelInfo": requestParams.configurationModel,\r
438                 "cloudConfiguration": {\r
439                     "lcpCloudRegionId": configuration && configuration.configData ? configuration.configData.cloudRegionId : null\r
440                 },\r
441                 "requestInfo": {\r
442                     "source": "VID",\r
443                     "requestorId": requestParams.userId\r
444                 },\r
445                 "relatedInstanceList": [\r
446                     {\r
447                         "relatedInstance": {\r
448                             "instanceId": requestParams.serviceInstanceId,\r
449                             "modelInfo": requestParams.serviceModel\r
450                         }\r
451                     },\r
452                     {\r
453                         "relatedInstance": {\r
454                             "instanceId": requestParams.portId,\r
455                             "instanceDirection": "source",\r
456                             "modelInfo": {\r
457                                 "modelType": "connectionPoint"\r
458                             }\r
459                         }\r
460                     }\r
461                 ]\r
462             };\r
463 \r
464             var url;\r
465             switch (requestParams.portStatus) {\r
466                 case FIELD.STATUS.AAI_ENABLED:\r
467                     url = "mso/mso_disable_port_configuration/"+requestParams.serviceInstanceId+"/configurations/"+requestParams.configurationId;\r
468                     break;\r
469                 case FIELD.STATUS.AAI_DISABLED:\r
470                     url = "mso/mso_enable_port_configuration/"+requestParams.serviceInstanceId+"/configurations/"+requestParams.configurationId;\r
471                     break;\r
472             }\r
473 \r
474             return sendPostRequest(url, requestDetails);\r
475         },\r
476 \r
477         buildPayloadForAssociateDissociate: function(serviceModelInfo, attuuid, instanceId, pnf) {\r
478             var payload = {\r
479                     "modelInfo": {\r
480                         "modelType": "service",\r
481                         "modelInvariantId": serviceModelInfo.invariantUuid,\r
482                         "modelVersionId": serviceModelInfo.uuid,\r
483                         "modelName": serviceModelInfo.name,\r
484                         "modelVersion": serviceModelInfo.version\r
485                     },\r
486                     "requestInfo": {\r
487                         "source": "VID",\r
488                         "requestorId": attuuid\r
489                     },\r
490                     "relatedInstanceList": [\r
491                         {\r
492                             "relatedInstance": {\r
493                                 "instanceName": pnf,\r
494                                 "modelInfo": {\r
495                                     "modelType": "pnf"\r
496                                 }\r
497                             }\r
498                         }],\r
499                     "requestParameters": {\r
500                         "aLaCarte": true\r
501                     }\r
502             };\r
503 \r
504             $log.debug("payload", payload);\r
505 \r
506             return payload;\r
507         },\r
508         associatePnf: function(requestParams) {\r
509 \r
510             var payload = this.buildPayloadForAssociateDissociate(requestParams.serviceModelInfo, requestParams.attuuid, requestParams.instanceId, requestParams.pnf);\r
511             return sendPostRequest([\r
512                     COMPONENT.MSO, COMPONENT.MSO_CREATE_REALATIONSHIP,\r
513                     requestParams.instanceId,\r
514                     ''\r
515                 ].join(COMPONENT.FORWARD_SLASH), payload);\r
516         },\r
517         dissociatePnf: function(requestParams) {\r
518 \r
519             var payload = this.buildPayloadForAssociateDissociate(requestParams.serviceModelInfo, requestParams.attuuid, requestParams.serviceInstanceId, requestParams.pnf);\r
520 \r
521             return sendPostRequest([\r
522                 COMPONENT.MSO, COMPONENT.MSO_REMOVE_RELATIONSHIP,\r
523                 requestParams.serviceInstanceId,\r
524                 ''\r
525             ].join(COMPONENT.FORWARD_SLASH), payload);\r
526         }\r
527     }\r
528 };\r
529 \r
530 appDS2.factory("MsoService", MsoService );\r