/* Copyright (C) 2019 CMCC, Inc. and others. All rights reserved. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. */ import { Component, OnInit, HostBinding, TemplateRef } from '@angular/core'; import { MyhttpService } from '../../../core/services/myhttp.service'; import { slideToRight } from '../../../shared/utils/animates'; import { NzModalService } from 'ng-zorro-antd'; import { NzNotificationService } from 'ng-zorro-antd'; @Component({ selector: 'app-services-list', templateUrl: './services-list.component.html', styleUrls: ['./services-list.component.less'], animations: [slideToRight] }) export class ServicesListComponent implements OnInit { @HostBinding('@routerAnimate') routerAnimateState; constructor(private myhttp: MyhttpService, private modalService: NzModalService, private notification: NzNotificationService) { } ngOnInit() { this.getallCustomers(); } // customer servicetype isSol005Interface = false; orchestratorList = []; customerList = []; customerList2 = []; customerSelected = { name: null, id: null }; customerSelected2 = { name: null, id: null }; serviceTypeList = []; serviceTypeList2 = []; serviceTypeSelected = { name: '' }; serviceTypeSelected2 = { name: '' }; serviceTypeSelectedName = ""; templateTypeSelected = "CCVPN"; orchestratorSelected = { name: null, id: null }; listSortMasters = JSON.parse(sessionStorage.getItem('listSortMasters')); language = sessionStorage.getItem("DefaultLang"); iconMore = false; loadingAnimateShow = false; serviceMunber = [ // top: E2E/NS/CCVPN data { "serviceDomain": "E2E", "Success": 0, "failed": 0, "InProgress": 0, "detailName": "i18nTextDefine_End_To_End_Service" }, { "serviceDomain": "NS", "Success": 0, "failed": 0, "InProgress": 0, "detailName": "i18nTextDefine_Network_Service" }, { "serviceDomain": "CCVPN", "Success": 0, "failed": 0, "InProgress": 0, "detailName": "i18nTextDefine_Cross_Domain_and_Cross_Layer_VPN" } ]; //The icon behind each row of data in the table expands iconMoreShow(data, tableData) { tableData.map((its) => { if (its["service-instance-id"] == data["service-instance-id"]) { if (its["iconMore"] == false) { data.iconMore = true; } else if (its["iconMore"] == true) { data.iconMore = false; } } else { its["iconMore"] = false; } }) } //Get all the customers getallCustomers() { console.log(this.language, "this.language"); this.myhttp.getAllCustomers() .subscribe((data) => { this.customerList = data.map((item) => { return { name: item["subscriber-name"], id: item["global-customer-id"] } }); if (this.customerList.length == 0) { console.log("customerList.length == 0", this.customerList); return false; } this.customerList2 = data.map((item) => { return { name: item["subscriber-name"], id: item["global-customer-id"] } }); if (this.customerList2.length == 0) { return false; } this.customerSelected = this.customerList[0]; this.choseCustomer(this.customerSelected); }) } getallOrchestrators() { this.myhttp.getAllOrchestrators() .subscribe((data) => { this.orchestratorList = data.map((item) => { return { name: item["name"], id: item["name"] } }); if (this.orchestratorList.length == 0) { console.log("orchestratorList.length == 0", this.orchestratorList); return false; } this.orchestratorSelected = this.orchestratorList[0]; }) } choseCustomer(item) { this.customerSelected = item; this.myhttp.getServiceTypes(this.customerSelected) .subscribe((data) => { this.serviceTypeList = data.map((item) => { return { name: item["service-type"] } }); if (this.serviceTypeList.length == 0) { console.log("serviceTypeList.length == 0", this.serviceTypeList); return false; } this.serviceTypeSelected = this.serviceTypeList[0]; this.choseServiceType(this.serviceTypeSelected); }) } choseServiceType(item) { this.serviceTypeSelected = item; this.getTableData(); } // Create modal box 2 (dialog box) create ------------------------------- isVisible = false; customerChange(): void { this.getServiceType(this.customerSelected2); } getServiceType(customerSelected2) { this.myhttp.getServiceTypes(customerSelected2) .subscribe((data) => { this.serviceTypeList2 = data.map((item) => { return { name: item["service-type"] } }); if (this.serviceTypeList2.length == 0) { console.log("serviceTypeList.length == 0", this.serviceTypeList2); return false; } this.getAlltemplates(); }) } serviceTypeChange(): void { this.serviceTypeSelected2.name = this.serviceTypeSelectedName } createModal(): void { this.isVisible = true; this.getallOrchestrators(); this.customerSelected2 = this.customerSelected; this.serviceTypeSelectedName = this.serviceTypeSelected.name; this.serviceTypeSelected2 = Object.assign({}, this.serviceTypeSelected); this.getServiceType(this.customerSelected2); } choseTemplateType() { this.getallOrchestrators(); this.getAlltemplates(); } templates = []; template1 = { name: null }; getAlltemplates() { this.myhttp.getAllServiceTemplates(this.templateTypeSelected) .subscribe((data) => { this.templates = data; if (this.templateTypeSelected == "Network Service") { this.templates = data.filter((d) => { return typeof d.packageInfo.csarName == "string"; }).map((item) => { let cName = item.packageInfo.csarName.split("/").reverse()[0]; return { name: cName, id: item.csarId, packageInfo: item.packageInfo } }); } this.template1 = this.templates[0]; }, (err) => { console.log(err); }) } createshow = false; createshow2 = false; listDisplay = false; createData: Object = {}; handleOk(): void { if (this.templateTypeSelected == "SOTN" || this.templateTypeSelected == "CCVPN") { this.createData = { commonParams: { customer: this.customerSelected, serviceType: this.serviceTypeSelected2, templateType: this.templateTypeSelected }, template: this.template1 }; } else if (this.templateTypeSelected == "E2E Service" || this.templateTypeSelected == "Network Service") { this.createData = { commonParams: { customer: this.customerSelected, serviceType: this.serviceTypeSelected2, templateType: this.templateTypeSelected }, template: this.template1, orchestrator: this.orchestratorSelected, isSol005Interface: this.isSol005Interface }; } this.getTemParameters(); } handleCancel(): void { this.isVisible = false; this.loadingAnimateShow = false; } temParametersTips = false; ccvpn_temParametersContent: any; e2e_ns_temParametersContent: any; getTemParameters() { let chosedtemplates = this.createData["template"]; let types = this.createData["commonParams"].templateType; if (types == "E2E Service") { types = "e2e"; } else if (types == "Network Service") { types = "ns"; } this.loadingAnimateShow = true; this.myhttp.getTemplateParameters(types, chosedtemplates) .subscribe((data) => { this.loadingAnimateShow = false; if (data.status == "FAILED") { this.temParametersTips = true; this.isVisible = true; console.log("Template parsing Failed"); } else { this.isVisible = false; this.temParametersTips = false; if (this.templateTypeSelected == "SOTN" || this.templateTypeSelected == "CCVPN") { this.ccvpn_temParametersContent = data; this.createshow = true; this.listDisplay = true; } else if (this.templateTypeSelected == "E2E Service" || this.templateTypeSelected == "Network Service") { this.e2e_ns_temParametersContent = data; this.createshow2 = true; this.listDisplay = true; } } }) } //tableData tableData = []; pageIndex = 1; pageSize = 10; total = 100; loading = false; getTableData() { this.loading = true; // Query parameter: customer serviceType Current page number, number of pages per page let paramsObj = { customerId: this.customerSelected.id, serviceType: this.serviceTypeSelected.name, currentPage: this.pageIndex, pageSize: this.pageSize } this.myhttp.getServicesTableData(paramsObj) .subscribe((data) => { this.total = data.body.total; this.tableData = data.body.tableList.map((item) => { if (typeof item == "string") { item = JSON.parse(item); } item["iconMore"] = this.iconMore; if (item["serviceDomain"] == "Network Service") { if (item["vnfInfo"]) { item["childServiceInstances"] = item["vnfInfo"].map((vnf) => { vnf["serviceDomain"] = "vnf"; return vnf; }); } else if (item["relationship-list"] && item["relationship-list"]["relationship"]) { item["childServiceInstances"] = item["relationship-list"]["relationship"].filter((relate) => { return relate["related-to"] == "generic-vnf"; }).map((vnf) => { let vnfInfo = { vnfNsInstanceId: "", vnfInstanceId: "", vnfInstanceName: "", serviceDomain: "vnf" }; vnfInfo.vnfNsInstanceId = item["nsInstanceId"] || item["service-instance-id"]; vnfInfo.vnfInstanceId = vnf["relationship-data"].find((vnfid) => { return vnfid["relationship-key"] == "generic-vnf.vnf-id" })["relationship-value"]; vnfInfo.vnfInstanceName = vnf["related-to-property"].find((vnfname) => { return vnfname["property-key"] == "generic-vnf.vnf-name" })["property-value"]; return vnfInfo; }) } } else { item["childServiceInstances"] = []; } // if (item["operationResult"] == "2001") { //operationResult==2001 item["status"] = "Available"; item["tips"] = "Available"; item["statusClass"] = item["operationResult"]; } // 2018.12.13 else if (item["operationResult"] == "2002") { //operationResult==2002 if (item["operationType"] == "1001" || item["operationType"] == "1002") { // item["status"] = this.accordingState["operationResult"][item["operationResult"]]; item["status"] = this.listSortMasters["operationResults"].find((its) => { return its["sortCode"] == item["operationResult"] && its["language"] == this.language })["sortValue"]; item["tips"] = "Unavailable"; item["statusClass"] = item["operationType"]; } else if (item["operationType"] != "1001" && item["operationType"] != "1002") { // item["status"] = this.accordingState["operationResult"][item["operationResult"]]; item["status"] = this.listSortMasters["operationResults"].find((its) => { return its["sortCode"] == item["operationResult"] && its["language"] == this.language })["sortValue"]; item["tips"] = "Available"; item["statusClass"] = item["operationType"]; } } else if (item["operationResult"] == "2003") { //operationResult==2003 // item["status"] = this.accordingState["operationResult"][item["operationResult"]]; item["status"] = this.listSortMasters["operationResults"].find((its) => { return its["sortCode"] == item["operationResult"] && its["language"] == this.language })["sortValue"]; item["statusClass"] = item["operationType"]; if (item["serviceDomain"] == "Network Service") { let updata = (prodata) => { item["rate"] = prodata.progress; item["tips"] = this.listSortMasters["operationTypes"].find((its) => { return its["sortCode"] == item["operationType"] && its["language"] == this.language })["sortValue"] + '\xa0\xa0\xa0' + prodata.progress + "%"; if (item["rate"] > 100) { item["status"] = prodata.status; item["tips"] = this.listSortMasters["operationTypes"].find((its) => { return its["sortCode"] == item["operationType"] && its["language"] == this.language })["sortValue"] + '\xa0\xa0\xa0' + item["status"]; } } let id = item["nsInstanceId"] || item["service-instance-id"]; let jobid = item["jobId"] || item["operationId"]; let operationType = item["operationType"]; this.queryNsProgress(jobid, id, updata, operationType).then(() => { item["rate"] = 100; item["status"] = this.listSortMasters["operationResults"].find((its) => { return its["sortCode"] == 2001 && its["language"] == this.language })["sortValue"]; item["tips"] = this.listSortMasters["operationTypes"].find((its) => { return its["sortCode"] == item["operationType"] && its["language"] == this.language })["sortValue"] + '\xa0\xa0\xa0' + item["status"]; }) } else { let updata = (prodata) => { item["rate"] = prodata.progress || item["rate"]; item["tips"] = this.listSortMasters["operationTypes"].find((its) => { return its["sortCode"] == item["operationType"] && its["language"] == this.language })["sortValue"] + '\xa0\xa0\xa0' + prodata.progress + "%"; if (item["rate"] > 100) { item["status"] = prodata.status; item["tips"] = this.listSortMasters["operationTypes"].find((its) => { return its["sortCode"] == item["operationType"] && its["language"] == this.language })["sortValue"] + '\xa0\xa0\xa0' + item["status"]; } } let obj = { serviceId: item["service-instance-id"], operationId: item["operationId"], operationType: item["operationType"] } this.queryProgress(obj, updata).then(() => { item["rate"] = 100; item["status"] = this.listSortMasters["operationResults"].find((its) => { return its["sortCode"] == 2001 && its["language"] == this.language })["sortValue"]; item["tips"] = this.listSortMasters["operationTypes"].find((its) => { return its["sortCode"] == item["operationType"] && its["language"] == this.language })["sortValue"] + '\xa0\xa0\xa0' + item["status"]; }) } } return item; }) this.tableData.map((item, index) => { if (item.serviceDomain == 'E2E Service') { if (item.operationResult == 2001) { this.serviceMunber[0]["Success"] += 1; } else if (item.operationResult == 2002) { this.serviceMunber[0]["failed"] += 1; } else if (item.operationResult == 2003) { this.serviceMunber[0]["InProgress"] += 1; } } else if (item.serviceDomain == 'Network Service') { if (item.operationResult == 2001) { this.serviceMunber[1]["Success"] += 1; } else if (item.operationResult == 2002) { this.serviceMunber[1]["failed"] += 1; } else if (item.operationResult == 2003) { this.serviceMunber[1]["InProgress"] += 1; } } else if (item.serviceDomain == 'CCVPN') { if (item.operationResult == 2001) { this.serviceMunber[2]["Success"] += 1; } else if (item.operationResult == 2002) { this.serviceMunber[2]["failed"] += 1; } else if (item.operationResult == 2003) { this.serviceMunber[2]["InProgress"] += 1; } } }) this.loading = false; }, (err) => { console.log(err); this.loading = false; }) } searchData(reset: boolean = false) { this.getTableData(); } thisService = {}; //The current service of the operation e2e_nsData: Object[]; scaleModelVisible = false; scaleService(service) { this.thisService = service; this.scaleModelVisible = true; let paramsObj = { customerId: this.customerSelected.id, serviceType: this.serviceTypeSelected.name, serviceId: service["service-instance-id"] } this.myhttp.getE2e_nsData(paramsObj) .subscribe((data) => { this.e2e_nsData = data; }) } scaleOk(templatescalestarting, templateScaleSuccessFaild) { this.scaleModelVisible = false; let requestBody = { "service": { "serviceInstanceName": this.thisService["service-instance-name"], "serviceType": this.serviceTypeSelected.name, "globalSubscriberId": this.customerSelected.id, "resources": this.e2e_nsData.map((item) => { return { "resourceInstanceId": item["netWorkServiceId"], "scaleType": item["scaleType"], "scaleNsData": { "scaleNsByStepsData": { "aspectId": item["aspectId"], "numberOfSteps": item["numberOfSteps"], "scalingDirection": item["scalingDirection"] } } } }) } } this.scaleE2eService(this.thisService, requestBody, templateScaleSuccessFaild); this.scaleNotification(templatescalestarting); } scaleCancel() { this.scaleModelVisible = false; } scaleNotification(template: TemplateRef<{}>): void { this.notification.template(template); } scaleSuccessNotification(template: TemplateRef<{}>): void { this.notification.template(template); } //heal healModelVisible = false; healActions = []; nsAdditional = []; nsParams = { degreeHealing: "HEAL_RESTORE", actionsHealing: [], healScript: "", additionalParamsforNs: "" } vnfVms = []; vmSelected = {}; vnfParams = { vnfInstanceId: "", cause: "", additionalParams: { action: "", actionvminfo: { vmid: "", vduid: "", vmname: "" } } } addActionsHealing() { this.healActions.push({ value: "" }) } minusActionsHealing(index) { this.healActions.splice(index, 1); } addNsAdditional() { this.nsAdditional.push({ key: "", value: "" }) } minusNsAdditional(index) { this.nsAdditional.splice(index, 1); } healService(service) { this.thisService = service; this.healModelVisible = true; if (service.serviceDomain == "vnf") { this.vnfParams.vnfInstanceId = service.vnfInstanceId; this.myhttp.getVnfInfo(service.vnfInstanceId) .subscribe((data) => { this.vnfVms = data.vnfVms; this.vmSelected = this.vnfVms[0]; }) } } healOk(templatehealstarting, templatehealSuccessFaild) { this.healModelVisible = false; // nsParams this.nsParams.actionsHealing = this.healActions.map((item) => { return item.value }); let additional = {}; this.nsAdditional.forEach((item) => { additional[item.key] = item.value; }); this.nsParams.additionalParamsforNs = JSON.stringify(additional); // vnfParams this.vnfParams.additionalParams.actionvminfo.vmid = this.vmSelected["vmId"]; this.vnfParams.additionalParams.actionvminfo.vmname = this.vmSelected["vmName"]; let requestBody = this.thisService["serviceDomain"] == "Network Service" ? { healNsData: this.nsParams } : { healVnfData: this.vnfParams }; this.healNsVnfService(this.thisService, requestBody, templatehealSuccessFaild); this.healNotification(templatehealstarting); } healCancel() { this.healModelVisible = false; } healNotification(template: TemplateRef<{}>): void { this.notification.template(template); } healSuccessNotification(template: TemplateRef<{}>): void { this.notification.template(template); } // show detail detailshow = false; detailshow2 = false; upDateShow = false; detailData: Object; serviceDetail(service, typeNum) { service["siteSer"] = []; service["sdwanSer"] = []; service["customer"] = this.customerSelected; service["serviceType"] = this.serviceTypeSelected; service.childServiceInstances.forEach((item) => { if (item.serviceDomain == "SITE") { service.siteSer.push(item); } else if (item.serviceDomain == "SDWAN") { service.sdwanSer.push(item); } }) if (service["serviceDomain"] == 'CCVPN' || service["serviceDomain"] == 'SOTN') { this.detailshow = true; if (typeNum == 1) { this.upDateShow = false; } else { this.upDateShow = true; } } else if (service["serviceDomain"] == 'E2E Service' || service["serviceDomain"] == 'Network Service') { this.detailshow2 = true; } this.listDisplay = true; this.detailData = service; console.log(service); } deleteModelVisible = false; terminationType = "graceful"; gracefulTerminationTimeout = 120; // delete Model show deleteModel(service) { this.thisService = service; this.deleteModelVisible = true; } deleteOk(templatedeletestarting, templateDeleteSuccessFaild) { this.deleteModelVisible = false; this.loadingAnimateShow = true; if (this.thisService["serviceDomain"] == "Network Service") { this.deleteNsService(this.thisService, templateDeleteSuccessFaild); } else { this.deleteService(this.thisService, templateDeleteSuccessFaild); } this.deleteNotification(templatedeletestarting); } deleteCancel() { this.deleteModelVisible = false; } deleteNotification(template: TemplateRef<{}>): void { this.notification.template(template); } deleteSuccessNotification(template: TemplateRef<{}>): void { this.notification.template(template); } createNotification(template: TemplateRef<{}>): void { this.notification.template(template); } createSuccessNotification(template: TemplateRef<{}>): void { this.notification.template(template); } //ccvpn sotn createservice parentServiceInstanceId = ""; thisCreateService = {}; closeCreate(obj, templateCreatestarting, templateCreateSuccessFaild) { if (!obj) { this.createshow = false; //close this.listDisplay = false; //close return false; } this.createshow = false; this.listDisplay = false; this.loadingAnimateShow = true; console.log(obj); let newData; //Newly created service data for the main table let createParams = "?customerId=" + this.customerSelected2.id + "&serviceType=" + this.serviceTypeSelected2.name + "&serviceDomain=" + this.templateTypeSelected; this.createService(obj, createParams, templateCreatestarting, templateCreateSuccessFaild).then((data) => { console.log(data); this.loadingAnimateShow = false; newData = { //Newly created service data in the main form 'service-instance-id': data["serviceId"], 'service-instance-name': obj.service.name, serviceDomain: this.templateTypeSelected, childServiceInstances: [], status: "In Progress", rate: 0, statusClass: 1001, tips: "" }; this.thisCreateService = newData; this.tableData = [newData, ...this.tableData]; this.createNotification(templateCreatestarting); let updata = (prodata) => { newData.rate = prodata.progress; newData.tips = this.listSortMasters["operationTypes"].find((its) => { return its["sortCode"] == newData["statusClass"] && its["language"] == this.language })["sortValue"] + newData.rate + "%"; if (newData["rate"] > 100) { newData["status"] = prodata.status; newData.tips = this.listSortMasters["operationTypes"].find((its) => { return its["sortCode"] == newData["statusClass"] && its["language"] == this.language })["sortValue"] + '\xa0\xa0\xa0' + newData["status"]; } }; let queryParams = { serviceId: data["serviceId"], operationId: data["operationId"], operationType: "1001" }; return this.queryProgress(queryParams, updata); }).then((data) => { console.log(data); newData.rate = 100; newData.status = "Successful"; this.createSuccessNotification(templateCreateSuccessFaild); newData.tips = this.listSortMasters["operationTypes"].find((its) => { return its["sortCode"] == newData["statusClass"] && its["language"] == this.language })["sortValue"] + '\xa0\xa0\xa0' + this.listSortMasters["operationResults"].find((its) => { return its["sortCode"] == 2001 && its["language"] == this.language })["sortValue"]; let hasUndone = this.tableData.some((item) => { return item.rate < 100; }); if (!hasUndone) { setTimeout(() => { this.getTableData(); }, 1000) } }) } e2eCloseCreate(obj, templateCreatestarting, templateCreateSuccessFaild) { if (!obj) { this.createshow2 = false; // this.listDisplay = false; // return false; } this.createshow2 = false; // this.listDisplay = false; // this.loadingAnimateShow = true; console.log(obj); let newData; // let createParams = "?customerId=" + this.customerSelected.id + "&serviceType=" + this.serviceTypeSelected2.name + "&serviceDomain=" + this.templateTypeSelected + "&parentServiceInstanceId=" + "&uuid=" + obj.service.serviceUuid + "&invariantUuuid=" + obj.service.serviceInvariantUuid; this.createService(obj, createParams, templateCreatestarting, templateCreateSuccessFaild).then((data) => { console.log(data); this.loadingAnimateShow = false; newData = { // 'service-instance-id': data["serviceId"], 'service-instance-name': obj.service.name, serviceDomain: this.templateTypeSelected, childServiceInstances: [], status: "In Progress", statusClass: 1001, rate: 0, tips: "" } this.thisCreateService = newData; this.tableData = [newData, ...this.tableData]; this.createNotification(templateCreatestarting); let updata = (prodata) => { newData.rate = prodata.progress; newData.tips = this.listSortMasters["operationTypes"].find((its) => { return its["sortCode"] == newData["statusClass"] && its["language"] == this.language })["sortValue"] + newData.rate + "%"; if (newData["rate"] > 100) { newData["status"] = prodata.status; newData.tips = this.listSortMasters["operationTypes"].find((its) => { return its["sortCode"] == newData["statusClass"] && its["language"] == this.language })["sortValue"] + '\xa0\xa0\xa0' + newData["status"]; } } let queryParams = { serviceId: data["serviceId"], operationId: data["operationId"], operationType: "1001" }; return this.queryProgress(queryParams, updata); }).then((data) => { console.log(data); newData.rate = 100; newData.status = "Successful"; this.createSuccessNotification(templateCreateSuccessFaild); newData.tips = this.listSortMasters["operationTypes"].find((its) => { return its["sortCode"] == newData["statusClass"] && its["language"] == this.language })["sortValue"] + '\xa0\xa0\xa0' + this.listSortMasters["operationResults"].find((its) => { return its["sortCode"] == 2001 && its["language"] == this.language })["sortValue"]; let hasUndone = this.tableData.some((item) => { return item.rate < 100; }) if (!hasUndone) { setTimeout(() => { this.getTableData(); }, 1000) } }) } nsCloseCreate(obj, templateCreatestarting, templateCreateSuccessFaild) { if (!obj) { this.createshow2 = false; // this.listDisplay = false; // return false; } this.createshow2 = false; // this.listDisplay = false; // this.loadingAnimateShow = true; console.log(obj); let newData; // // step1 this.myhttp.nsCreateInstance(obj.step1) .subscribe((data) => { // console.log(data); this.loadingAnimateShow = false; newData = { // 'service-instance-id': data.nsInstanceId, 'service-instance-name': obj.step1.nsName, serviceDomain: this.templateTypeSelected, childServiceInstances: [], status: "In Progress", statusClass: 1001, rate: 0, tips: "" } this.thisCreateService = newData; this.tableData = [newData, ...this.tableData]; this.createNotification(templateCreatestarting); if (data.status == "FAILED") { console.log("create ns service Failed :" + JSON.stringify(data)); newData.status = "Failed"; this.createSuccessNotification(templateCreateSuccessFaild); return false; } let createParams = "?ns_instance_id=" + data.nsInstanceId + "&customerId=" + this.customerSelected2.id + "&serviceType=" + this.serviceTypeSelected2.name + "&serviceDomain=" + this.templateTypeSelected + "&parentServiceInstanceId="; // step2 this.createNsService(createParams, obj.step2).then((jobid) => { if (jobid == "Failed") { newData.status = "Failed"; console.log(jobid, "ns two jobid") this.thisCreateService = newData; console.log(this.thisCreateService) this.createSuccessNotification(templateCreateSuccessFaild); newData.tips = this.listSortMasters["operationTypes"].find((its) => { return its["sortCode"] == newData["statusClass"] && its["language"] == this.language })["sortValue"] + '\xa0\xa0\xa0' + this.listSortMasters["operationResults"].find((its) => { return its["sortCode"] == 2002 && its["language"] == this.language })["sortValue"]; return false; } let operationType = "1001"; let updata = (prodata) => { newData.rate = prodata.progress; newData.tips = this.listSortMasters["operationTypes"].find((its) => { return its["sortCode"] == newData["statusClass"] && its["language"] == this.language })["sortValue"] + newData.rate + "%"; if (newData["rate"] > 100) { newData["status"] = prodata.status; newData.tips = this.listSortMasters["operationTypes"].find((its) => { return its["sortCode"] == newData["statusClass"] && its["language"] == this.language })["sortValue"] + '\xa0\xa0\xa0' + newData["status"]; } } return this.queryNsProgress(jobid, newData["service-instance-id"], updata, operationType); }).then((data) => { console.log(data); newData.rate = 100; newData.status = "Successful"; this.thisCreateService = newData; console.log(this.thisCreateService) this.createSuccessNotification(templateCreateSuccessFaild); newData.tips = this.listSortMasters["operationTypes"].find((its) => { return its["sortCode"] == newData["statusClass"] && its["language"] == this.language })["sortValue"] + '\xa0\xa0\xa0' + this.listSortMasters["operationResults"].find((its) => { return its["sortCode"] == 2001 && its["language"] == this.language })["sortValue"]; let hasUndone = this.tableData.some((item) => { return item.rate < 100; }) if (!hasUndone) { setTimeout(() => { this.getTableData(); }, 1000) } }) }) } createService(requestBody, createParams, templateCreatestarting, templateCreateSuccessFaild) { let mypromise = new Promise((res, rej) => { this.myhttp.createInstance(requestBody, createParams) .subscribe((data) => { if (data.status == "FAILED") { this.loadingAnimateShow = false; res("Failed"); console.log("create e2e service Failed :" + JSON.stringify(data)); return false; } res(data.service); }) }) return mypromise; } createNsService(id, obj) { let mypromise = new Promise((res, rej) => { this.myhttp.nsCreateInstance2(id, obj) .subscribe((data) => { if (data.status == "FAILED") { this.loadingAnimateShow = false; console.log("instantiate ns service Failed :" + JSON.stringify(data)); res("Failed"); return false; } res(data.jobId); }) }) return mypromise; } scaleE2eService(service, requestBody, templateScaleSuccessFaild) { let id = service["service-instance-id"]; service.rate = 0; service.status = "In Progress"; service.statusClass = "1003"; service.tips = ""; this.myhttp.scaleE2eService(id, requestBody) .subscribe((data) => { if (data.status == "FAILED") { console.log("scale E2e service Failed :" + JSON.stringify(data)); service.status = "Failed"; service.tips = this.listSortMasters["operationTypes"].find((its) => { return its["sortCode"] == service.statusClass && its["language"] == this.language })["sortValue"] + '\xa0\xa0\xa0' + this.listSortMasters["operationResults"].find((its) => { return its["sortCode"] == 2002 && its["language"] == this.language })["sortValue"]; this.scaleSuccessNotification(templateScaleSuccessFaild); return false; } let obj = { serviceId: id, operationId: data.operationId, operationType: "1003" } let updata = (prodata) => { service.rate = prodata.progress; service.tips = this.listSortMasters["operationTypes"].find((its) => { return its["sortCode"] == service.statusClass && its["language"] == this.language })["sortValue"] + '\xa0\xa0\xa0' + service["rate"] + "%"; if (service["rate"] > 100) { service["status"] = prodata.status; service.tips = this.listSortMasters["operationTypes"].find((its) => { return its["sortCode"] == service["statusClass"] && its["language"] == this.language })["sortValue"] + '\xa0\xa0\xa0' + service["status"]; } } this.queryProgress(obj, updata).then(() => { service.rate = 100; service.status = "Successful"; service.tips = this.listSortMasters["operationTypes"].find((its) => { return its["sortCode"] == service["statusClass"] && its["language"] == this.language })["sortValue"] + '\xa0\xa0\xa0' + this.listSortMasters["operationResults"].find((its) => { return its["sortCode"] == 2001 && its["language"] == this.language })["sortValue"]; this.scaleSuccessNotification(templateScaleSuccessFaild); }) }) } healNsVnfService(service, requestBody, templatehealSuccessFaild) { console.log(service); service.rate = 0; service.status = "In Progress"; service.tips = ""; service.statusClass = "1004"; let id = service.nsInstanceId || service["service-instance-id"] || service["vnfNsInstanceId"]; this.myhttp.healNsService(id, requestBody) .subscribe((data) => { if (data.status == "FAILED") { console.log("heal nsvnf service Failed :" + JSON.stringify(data)); service.status = "Failed"; service.tips = this.listSortMasters["operationTypes"].find((its) => { return its["sortCode"] == service.statusClass && its["language"] == this.language })["sortValue"] + '\xa0\xa0\xa0' + this.listSortMasters["operationResults"].find((its) => { return its["sortCode"] == 2002 && its["language"] == this.language })["sortValue"]; this.healSuccessNotification(templatehealSuccessFaild); return false; } let jobid = data.jobId; let operationType = "1004"; let updata = (prodata) => { service.rate = prodata.progress; service.tips = this.listSortMasters["operationTypes"].find((its) => { return its["sortCode"] == service.statusClass && its["language"] == this.language })["sortValue"] + '\xa0\xa0\xa0' + service.rate + "%"; console.log(service.rate) if (service["rate"] > 100) { service["status"] = prodata.status; service.tips = this.listSortMasters["operationTypes"].find((its) => { return its["sortCode"] == service.statusClass && its["language"] == this.language })["sortValue"] + '\xa0\xa0\xa0' + service["status"]; } } this.queryNsProgress(jobid, null, updata, operationType).then((data1) => { console.log(data1); service.rate = 100; service.status = "Successful"; service.tips = this.listSortMasters["operationTypes"].find((its) => { return its["sortCode"] == service.statusClass && its["language"] == this.language })["sortValue"] + this.listSortMasters["operationResults"].find((its) => { return its["sortCode"] == 2001 && its["language"] == this.language })["sortValue"]; this.healSuccessNotification(templatehealSuccessFaild); }); }) } updateCcvpnNotification(template: TemplateRef<{}>): void { this.notification.template(template); } updateCcvpnSuccessNotification(template: TemplateRef<{}>): void { this.notification.template(template); } closeCCVPNUpdate(obj, templateUpdateSuccessFaild) { console.log(obj); this.detailshow = false; this.listDisplay = false; this.upDateShow = false; this.detailData["rate"] = 0; this.detailData["status"] = "In Progress"; this.detailData['tips'] = ""; this.detailData["statusClass"] = "1005"; let id = this.detailData["service-instance-id"]; this.myhttp.updateccvpn(id, obj) .subscribe((data) => { if (data.status == "FAILED") { console.log("scale E2e service Failed :" + JSON.stringify(data)); this.detailData["status"] = "Failed"; this.detailData["tips"] = this.listSortMasters["operationTypes"].find((its) => { return its["sortCode"] == this.detailData["statusClass"] && its["language"] == this.language })["sortValue"] + '\xa0\xa0\xa0' + this.listSortMasters["operationResults"].find((its) => { return its["sortCode"] == 2002 && its["language"] == this.language })["sortValue"]; this.updateCcvpnSuccessNotification(templateUpdateSuccessFaild); return false; } let obj = { serviceId: id, operationId: data.operationId } let updata = (prodata) => { this.detailData["rate"] = prodata.progress; this.detailData["tips"] = this.listSortMasters["operationTypes"].find((its) => { return its["sortCode"] == this.detailData["statusClass"] && its["language"] == this.language })["sortValue"] + '\xa0\xa0\xa0' + this.detailData["rate"] + "%"; if (this.detailData["rate"] > 100) { this.detailData["status"] = prodata.status; this.detailData["tips"] = this.listSortMasters["operationTypes"].find((its) => { return its["sortCode"] == this.detailData["statusClass"] && its["language"] == this.language })["sortValue"] + '\xa0\xa0\xa0' + this.detailData["status"]; } }; this.queryProgress(obj, updata).then(() => { this.detailData["rate"] = 100; this.detailData["status"] = "Successful"; this.detailData["tips"] = this.listSortMasters["operationTypes"].find((its) => { return its["sortCode"] == this.detailData["statusClass"] && its["language"] == this.language })["sortValue"] + '\xa0\xa0\xa0' + this.listSortMasters["operationResults"].find((its) => { return its["sortCode"] == 2001 && its["language"] == this.language })["sortValue"]; this.updateCcvpnSuccessNotification(templateUpdateSuccessFaild); }) }) } deleteService(service, templateDeleteSuccessFaild) { let allprogress = {}; // let querypros = []; // service.rate = 0; service.status = "In Progress"; service.tips = ""; service.statusClass = "1002"; service["childServiceInstances"].push({ "service-instance-id": service["service-instance-id"] }); let deletePros = service["childServiceInstances"].map((item) => { let params = { globalSubscriberId: this.customerSelected.id, serviceType: this.serviceTypeSelected, serviceInstanceId: item["service-instance-id"] } return new Promise((res, rej) => { this.myhttp.deleteInstance(params) .subscribe((data) => { this.loadingAnimateShow = false; if (data.status == "FAILED") { console.log("delete service Failed :" + JSON.stringify(data)); service.status = "Failed"; service.tips = this.listSortMasters["operationTypes"].find((its) => { return its["sortCode"] == service.statusClass && its["language"] == this.language })["sortValue"] + '\xa0\xa0\xa0' + this.listSortMasters["operationResults"].find((its) => { return its["sortCode"] == 2002 && its["language"] == this.language })["sortValue"]; return false; } let obj = { serviceId: params.serviceInstanceId, operationId: data.operationId, operationType: "1002" } let updata = (prodata) => { allprogress[prodata.operationId] = prodata.progress; let average = ((arr) => { return eval(arr.join("+")) / arr.length })(Object.values(allprogress)); service["rate"] = average; service.tips = this.listSortMasters["operationTypes"].find((its) => { return its["sortCode"] == service.statusClass && its["language"] == this.language })["sortValue"] + '\xa0\xa0\xa0' + service["rate"] + "%"; if (service["rate"] > 100) { service["status"] = prodata.status; service.tips = this.listSortMasters["operationTypes"].find((its) => { return its["sortCode"] == service.statusClass && its["language"] == this.language })["sortValue"] + '\xa0\xa0\xa0' + service["status"]; } }; querypros.push(this.queryProgress(obj, updata)); res(); }) }) }); Promise.all(deletePros).then(() => { Promise.all(querypros).then((data) => { console.log(data); service.rate = 100; service.status = "Successful"; service.tips = this.listSortMasters["operationTypes"].find((its) => { return its["sortCode"] == service.statusClass && its["language"] == this.language })["sortValue"] + this.listSortMasters["operationResults"].find((its) => { return its["sortCode"] == 2001 && its["language"] == this.language })["sortValue"]; this.deleteSuccessNotification(templateDeleteSuccessFaild); let hasUndone = this.tableData.some((item) => { return item.rate < 100; }) if (!hasUndone) { setTimeout(() => { this.getTableData(); }, 1000) } }) }) } deleteNsService(service, templateDeleteSuccessFaild) { service.rate = 0; service.status = "In Progress"; service.tips = ""; service.statusClass = "1002"; let id = service.nsInstanceId || service["service-instance-id"]; let operationType = "1002"; let requestBody = { terminationType: this.terminationType, gracefulTerminationTimeout: this.gracefulTerminationTimeout } this.stopNsService(id, requestBody).then((jobid) => { if (jobid == "Failed") { service.status = "Failed"; this.deleteSuccessNotification(templateDeleteSuccessFaild); service.tips = this.listSortMasters["operationTypes"].find((its) => { return its["sortCode"] == service.statusClass && its["language"] == this.language })["sortValue"] + this.listSortMasters["operationResults"].find((its) => { return its["sortCode"] == 2002 && its["language"] == this.language })["sortValue"]; return false; } let updata = (prodata) => { service.rate = prodata.progress; service.tips = this.listSortMasters["operationTypes"].find((its) => { return its["sortCode"] == service.statusClass && its["language"] == this.language })["sortValue"] + '\xa0\xa0\xa0' + service.rate + "%"; if (service["rate"] > 100) { service["status"] = prodata.status; service.tips = this.listSortMasters["operationTypes"].find((its) => { return its["sortCode"] == service.statusClass && its["language"] == this.language })["sortValue"] + service["status"]; } } return this.queryNsProgress(jobid, null, updata, operationType); }).then(() => { this.myhttp.nsDeleteInstance(id) .subscribe((data) => { console.log(data); service.rate = 100; service.status = "Successful"; service.tips = this.listSortMasters["operationTypes"].find((its) => { return its["sortCode"] == service.statusClass && its["language"] == this.language })["sortValue"] + this.listSortMasters["operationResults"].find((its) => { return its["sortCode"] == 2001 && its["language"] == this.language })["sortValue"]; this.deleteSuccessNotification(templateDeleteSuccessFaild); if (data.status == "FAILED") { console.log("delete ns service Failed :" + JSON.stringify(data)); service.status = "Failed"; service.tips = this.listSortMasters["operationTypes"].find((its) => { return its["sortCode"] == service.statusClass && its["language"] == this.language })["sortValue"] + this.listSortMasters["operationResults"].find((its) => { return its["sortCode"] == 2002 && its["language"] == this.language })["sortValue"]; this.deleteSuccessNotification(templateDeleteSuccessFaild); return false; } console.log(service, "deleteservice"); console.log(this.thisService, "thisService"); let hasUndone = this.tableData.some((item) => { return item.rate < 100; }) if (!hasUndone) { setTimeout(() => { this.getTableData(); }, 1000) } }) }) } stopNsService(id, obj) { let mypromise = new Promise((res, rej) => { this.myhttp.stopNsService(id, obj) .subscribe((data) => { this.loadingAnimateShow = false; if (data.status == "FAILED") { console.log("stop ns service Failed :" + JSON.stringify(data)); res("Failed"); return false; } res(data.jobId); }) }) return mypromise; } queryProgress(obj, callback) { let mypromise = new Promise((res, rej) => { // let data = { // operationStatus:{ // "operationId": "XXXXXX", // "operation": "create|delete|update|scale", // "result": "finished|error|processing", // "reason": "", // "userId": "", // "operationContent": "Be creating pop.", // "progress": 0, // "operateAt": "", // "finishedAt": "" // } // } let errorNums = 180; let requery = () => { this.myhttp.getProgress(obj) .subscribe((data) => { if (data.status == "FAILED") { callback({ progress: 255, status: "Failed" }); return false; } if (data.operationStatus == null || data.operationStatus.progress == undefined) { // console.log(data); errorNums--; if (errorNums == 0) { callback({ progress: 255, status: "time over" }); return false; } setTimeout(() => { requery(); }, 10000) return false; } if (data.operationStatus.progress > 100) { callback({ progress: 255, status: "time over" }); return false; } if (data.operationStatus.progress < 100) { callback(data.operationStatus); setTimeout(() => { requery(); }, 5000) } else { res(data.operationStatus); } }) // setTimeout(()=>{ // console.log(data.operationStatus.progress) // data.operationStatus.progress++; // if(data.operationStatus.progress<100){ // callback(data.operationStatus); // requery() // }else{ // callback(data.operationStatus); // res(data.operationStatus) // } // },100) } requery(); }) return mypromise; } queryNsProgress(jobid, id, callback, operationType) { let mypromise = new Promise((res, rej) => { // let data = { // "jobId": "string", // "responseDescriptor": { // "status": "string", // "progress": 0, // "statusDescription": "string", // "errorCode": "string", // "responseId": "string", // "responseHistoryList": [ // { // "status": "string", // "progress": "string", // "statusDescription": "string", // "errorCode": "string", // "responseId": "string" // } // ] // } // } let errorNums = 180; let requery = () => { this.myhttp.getNsProgress(jobid, id, operationType) .subscribe((data) => { if (data.status == "FAILED") { callback({ progress: 255, status: "Failed" }); return false; } if (data.responseDescriptor == null || data.responseDescriptor.progress == undefined) { // console.log(data); errorNums--; if (errorNums == 0) { callback({ progress: 255, status: "time over" }); return false; } setTimeout(() => { requery(); }, 10000) return false; } if (data.responseDescriptor.progress > 100 && data.responseDescriptor.status == "error") { callback({ progress: 255, status: data.responseDescriptor.statusDescription }); return false; } if (data.responseDescriptor.progress < 100) { callback(data.responseDescriptor); setTimeout(() => { requery(); }, 5000) } else { res(data); } }) // setTimeout(()=>{ // console.log(data.responseDescriptor.progress) // data.responseDescriptor.progress++; // if(data.responseDescriptor.progress<100){ // callback(data.responseDescriptor); // requery() // }else{ // callback(data); // res(data) // } // },100) }; requery(); }); return mypromise; } }