Fix Bug 2048:The VCA Status for an NS with both a KNF and a VNF does not provide...
[osm/NG-UI.git] / src / app / operational-view / OperationalViewComponent.ts
index 9d6c1fe..22d4077 100644 (file)
@@ -1,3 +1,4 @@
+/* eslint-disable security/detect-object-injection */
 /*
  Copyright 2020 TATA ELXSI
 
@@ -34,8 +35,7 @@ import { RestService } from 'RestService';
 import { Observable } from 'rxjs';
 import { Subscription } from 'rxjs';
 import { map } from 'rxjs/operators';
-import { SharedService } from 'SharedService';
-import { isNullOrUndefined } from 'util';
+import { SharedService, isNullOrUndefined } from 'SharedService';
 /**
  * Creating component
  * @Component takes OperationalViewComponent.html as template url
@@ -77,19 +77,22 @@ export class OperationalViewComponent implements OnInit {
     public timeOutDefaultSeconds: number = CONSTANTNUMBER.timeOutDefaultSeconds;
 
     /** variables contains minimum seconds for the timeout @public */
+    // eslint-disable-next-line @typescript-eslint/no-magic-numbers
     public minSeconds: number = 5;
 
     /** variables contains maximum seconds for the timeout @public */
+    // eslint-disable-next-line @typescript-eslint/no-magic-numbers
     public maxSeconds: number = 60;
 
     /** variables contains timer calculation value of milliseconds @public */
+    // eslint-disable-next-line @typescript-eslint/no-magic-numbers
     public timeDefaultCal: number = 1000;
 
     /** variables contains timeout @public */
     public timeOut: number;
 
     /** Set the timer button @public */
-    // tslint:disable-next-line: no-magic-numbers
+    // eslint-disable-next-line no-magic-numbers
     public setSeconds: SETTIMER[] = SET_TIMER;
 
     /** Instance of subscriptions @private */
@@ -118,7 +121,6 @@ export class OperationalViewComponent implements OnInit {
      * Lifecyle Hooks the trigger before component is instantiate
      */
     public ngOnInit(): void {
-        // tslint:disable-next-line:no-backbone-get-set-outside-model
         this.instancesID = this.activatedRoute.snapshot.paramMap.get('id');
         this.generateData();
         this.generateDataSub = this.sharedService.dataEvent.subscribe((): void => { this.generateData(); });
@@ -186,9 +188,7 @@ export class OperationalViewComponent implements OnInit {
         if (liveData) {
             NSURL = NSURL + '?vcaStatusRefresh=true';
         }
-        return this.restService.getResource(NSURL).pipe(map((operationalList: VCASTATUS): VCADETAILS => {
-            return this.vcaDetailsData(operationalList, liveData, timeOutSeconds);
-        }));
+        return this.restService.getResource(NSURL).pipe(map((operationalList: VCASTATUS): VCADETAILS => this.vcaDetailsData(operationalList, liveData, timeOutSeconds)));
     }
     /**
      * Form the VCA Details for each NS Instances
@@ -227,26 +227,34 @@ export class OperationalViewComponent implements OnInit {
     public vcaDetailsData(list: VCASTATUS, liveData: boolean, timeOutSeconds: number): VCADETAILS {
         const assignVCADetails: VCADETAILS[] = [];
         const setModels: SETMODELS[] = [];
-        const assignNSInstancesID: string = list.id;
         Object.keys(list.vcaStatus).forEach((key: string): void => {
-            const vcaApplication: VCAAPPLICATIONS[] = this.appData(list.vcaStatus[key].applications);
-            const vcaUnits: VCAUNITS[] = this.unitsData(vcaApplication);
-            const vcaMachines: MACHINES[] = this.machinesData(list.vcaStatus[key].machines);
-            list.vcaStatus[key].units = vcaUnits;
-            list.vcaStatus[key].applications = vcaApplication;
-            list.vcaStatus[key].machines = vcaMachines;
-            list.vcaStatus[key].relations = list.vcaStatus[key].relations;
-            list.vcaStatus[key].model = list.vcaStatus[key].model;
-            const getEachModelData: SETMODELS = this.assignVCAStatusOfEachModel(list.vcaStatus[key]);
-            setModels.push(getEachModelData);
-            list.vcaStatus[assignNSInstancesID].vca_id = key;
-            list.vcaStatus[assignNSInstancesID].vca_name = list.name;
-            list.vcaStatus[assignNSInstancesID].ns_id = list.id;
-            list.vcaStatus[assignNSInstancesID].isLiveloading = liveData;
-            list.vcaStatus[assignNSInstancesID].timeOutSeconds = timeOutSeconds;
-            list.vcaStatus[assignNSInstancesID].vcaStatusModels = setModels;
-            const getAssignedData: VCADETAILS = this.formVCADetails(list.vcaStatus[assignNSInstancesID]);
-            assignVCADetails.push(getAssignedData);
+            let vcaStatus = [];
+            vcaStatus = Object.values(list.vcaStatus[key]);
+            if (!isNullOrUndefined(vcaStatus)) {
+                vcaStatus.forEach((data): void => {
+                    const vcaApplication: VCAAPPLICATIONS[] = this.appData(data.applications);
+                    const vcaUnits: VCAUNITS[] = this.unitsData(vcaApplication);
+                    const vcaMachines: MACHINES[] = this.machinesData(data.machines);
+                    const assignNSInstancesID: string = key;
+                    data.units = vcaUnits;
+                    data.applications = vcaApplication;
+                    data.machines = vcaMachines;
+                    // eslint-disable-next-line no-self-assign
+                    data.relations = data.relations;
+                    // eslint-disable-next-line no-self-assign
+                    data.model = data.model;
+                    const getEachModelData: SETMODELS = this.assignVCAStatusOfEachModel(data);
+                    setModels.push(getEachModelData);
+                    list.vcaStatus[assignNSInstancesID].vca_id = key;
+                    list.vcaStatus[assignNSInstancesID].vca_name = list.name;
+                    list.vcaStatus[assignNSInstancesID].ns_id = list.id;
+                    list.vcaStatus[assignNSInstancesID].isLiveloading = liveData;
+                    list.vcaStatus[assignNSInstancesID].timeOutSeconds = timeOutSeconds;
+                    list.vcaStatus[assignNSInstancesID].vcaStatusModels = setModels;
+                    const getAssignedData: VCADETAILS = this.formVCADetails(list.vcaStatus[assignNSInstancesID]);
+                    assignVCADetails.push(getAssignedData);
+                });
+            }
         });
         return assignVCADetails[0];
     }
@@ -256,20 +264,24 @@ export class OperationalViewComponent implements OnInit {
     public appData(applicationData: VCAAPPLICATIONS): VCAAPPLICATIONS[] {
         const vcaApplication: VCAAPPLICATIONS[] = [];
         Object.keys(applicationData).forEach((applicationKey: string): void => {
-            const charmSplitlist: string[] = applicationData[applicationKey].charm.split('/');
-            const status: string = applicationData[applicationKey].status.status;
-            const charm: string = charmSplitlist[1].substr(0, charmSplitlist[1].lastIndexOf('-'));
-            const store: string = charmSplitlist[0].substr(0, charmSplitlist[0].lastIndexOf(':'));
-            applicationData[applicationKey].app_id = applicationKey;
-            applicationData[applicationKey].charm = charm;
-            applicationData[applicationKey].status = status;
-            applicationData[applicationKey].scale = Object.keys(applicationData[applicationKey].units).length;
-            applicationData[applicationKey].store = store;
-            applicationData[applicationKey].configs = !isNullOrUndefined(applicationData[applicationKey].configs) ?
-                applicationData[applicationKey].configs : null;
-            applicationData[applicationKey].actions = !isNullOrUndefined(applicationData[applicationKey].actions) ?
-                applicationData[applicationKey].actions : null;
-            vcaApplication.push(applicationData[applicationKey]);
+            if (!isNullOrUndefined(applicationData[applicationKey].charm)) {
+                const charmSplitlist: string[] = applicationData[applicationKey].charm.split('/');
+                const status: string = applicationData[applicationKey].status.status;
+                // eslint-disable-next-line deprecation/deprecation
+                const charm: string = charmSplitlist[1].substr(0, charmSplitlist[1].lastIndexOf('-'));
+                // eslint-disable-next-line deprecation/deprecation
+                const store: string = charmSplitlist[0].substr(0, charmSplitlist[0].lastIndexOf(':'));
+                applicationData[applicationKey].app_id = applicationKey;
+                applicationData[applicationKey].charm = charm;
+                applicationData[applicationKey].status = status;
+                applicationData[applicationKey].scale = Object.keys(applicationData[applicationKey].units).length;
+                applicationData[applicationKey].store = store;
+                applicationData[applicationKey].configs = !isNullOrUndefined(applicationData[applicationKey].configs) ?
+                    applicationData[applicationKey].configs : null;
+                applicationData[applicationKey].actions = !isNullOrUndefined(applicationData[applicationKey].actions) ?
+                    applicationData[applicationKey].actions : null;
+                vcaApplication.push(applicationData[applicationKey]);
+            }
         });
         return vcaApplication;
     }
@@ -298,16 +310,19 @@ export class OperationalViewComponent implements OnInit {
     }
     /** Show the Config list in modal using modalservice @public */
     public showExecutedActionsList(executeActionsList: EXECUTEDACTIONS[]): void {
+        // eslint-disable-next-line security/detect-non-literal-fs-filename
         this.modalService.open(OperationalViewAppExecutedActionsComponent, { size: 'xl', backdrop: 'static' })
             .componentInstance.params = { executedActions: executeActionsList };
     }
     /** Show the Config list in modal using modalservice @public */
     public showConfigList(configList: object): void {
+        // eslint-disable-next-line security/detect-non-literal-fs-filename
         this.modalService.open(OperationalViewAppConfigsComponent, { size: 'xl', backdrop: 'static' })
             .componentInstance.params = { configs: configList };
     }
     /** Show the Config list in modal using modalservice @public */
     public showActionsList(actionsList: object): void {
+        // eslint-disable-next-line security/detect-non-literal-fs-filename
         this.modalService.open(OperationalViewAppActionsComponent, { size: 'xl', backdrop: 'static' })
             .componentInstance.params = { actions: actionsList };
     }