summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorguochuyicmri <guochuyi@chinamobile.com>2018-11-02 19:31:11 +0800
committerguochuyicmri <guochuyi@chinamobile.com>2018-11-02 19:32:32 +0800
commit52fb178dc3cd639a3efa89803b226ccdc53b287d (patch)
tree5c3af59aae52f87f92ecf891df932cf7c3cf6c34
parent4d526a0771ad93b1ab9807b413ad33f5b28fc8f6 (diff)
heal nsService and vnfService
Change-Id: I0d1124221d1b04f4a314c2b93dcf9e0cdce2b3c7 Issue-ID: USECASEUI-163 Signed-off-by: guochuyicmri <guochuyi@chinamobile.com>
-rw-r--r--usecaseui-portal/src/app/myhttp.service.ts6
-rw-r--r--usecaseui-portal/src/app/services/services-list/services-list.component.html56
-rw-r--r--usecaseui-portal/src/app/services/services-list/services-list.component.ts96
3 files changed, 149 insertions, 9 deletions
diff --git a/usecaseui-portal/src/app/myhttp.service.ts b/usecaseui-portal/src/app/myhttp.service.ts
index 14d81aef..5cdc67f6 100644
--- a/usecaseui-portal/src/app/myhttp.service.ts
+++ b/usecaseui-portal/src/app/myhttp.service.ts
@@ -35,6 +35,7 @@ export class MyhttpService {
// ns_deleteService: this.baseUrl + "/deleteNsService.json?",
// ns_stopService: this.baseUrl + "/stopNsService.json?",
// ns_healService: this.baseUrl + "/healNsService.json?",
+ // vnfInfo: this.baseUrl + "/vnfInfo.json?",
// progress:this.baseUrl + "/progress.json?",
// nsProgress:this.baseUrl + "nsProgress.json?",
@@ -75,6 +76,7 @@ export class MyhttpService {
ns_deleteService: this.baseUrl + "/uui-lcm/deleteNetworkServiceInstance?ns_instance_id=",
ns_stopService: this.baseUrl + "/uui-lcm/terminateNetworkServiceInstance?ns_instance_id=",
ns_healService: this.baseUrl + "/uui-lcm/healNetworkServiceInstance?ns_instance_id=",
+ vnfInfo: this.baseUrl + "/uui-lcm/VnfInfo/",
progress:this.baseUrl + "/uui-lcm/services/" + "*_*" + "/operations/",
nsProgress:this.baseUrl + "/uui-lcm/jobs/getNsLcmJobStatus/"+ "*_*" + "?responseId=",
@@ -221,6 +223,10 @@ export class MyhttpService {
// return this.http.get<any>(this.url.ns_stopService); //Local simulation
return this.http.post<any>(this.url.ns_stopService + id,requestBody);
}
+
+ getVnfInfo(id){
+ return this.http.get<any>(this.url.vnfInfo + id)
+ }
healNsService(id,requestBody){
// return this.http.get<any>(this.url.ns_healService); //Local simulation
return this.http.post<any>(this.url.ns_healService + id,requestBody);
diff --git a/usecaseui-portal/src/app/services/services-list/services-list.component.html b/usecaseui-portal/src/app/services/services-list/services-list.component.html
index cfb81703..616d5b39 100644
--- a/usecaseui-portal/src/app/services/services-list/services-list.component.html
+++ b/usecaseui-portal/src/app/services/services-list/services-list.component.html
@@ -119,9 +119,11 @@
<nz-progress *ngIf="data.status == 'Creating' || data.status == 'Deleting' || data.status == 'Stopping' || data.status == 'Healing' " [nzPercent]="data.rate"></nz-progress>
</td>
<td>
- <i *ngIf="data.serviceDomain=='E2E Service'||data.serviceDomain=='Network Service' " class="anticon anticon-setting" (click)="scaleService(data)"></i>
+ <i [ngClass]="{'cannotclick':data.status=='Deleting'||data.status=='Creating'||data.status=='Healing'}"
+ *ngIf="data.serviceDomain=='E2E Service'||data.serviceDomain=='Network Service' " class="anticon anticon-setting" (click)="scaleService(data)"></i>
<!-- <i *ngIf="data.serviceDomain=='E2E Service'||data.serviceDomain=='Network Service' " class="anticon anticon-cloud-upload-o" (click)="updataService(data)"></i> -->
- <i *ngIf="data.serviceDomain=='Network Service' " class="anticon anticon-reload" (click)="restartService(data)"></i>
+ <i [ngClass]="{'cannotclick':data.status=='Deleting'||data.status=='Creating'||data.status=='Healing'}"
+ *ngIf="data.serviceDomain=='Network Service' " class="anticon anticon-reload" (click)="healService(data)"></i>
<i *ngIf="data.serviceDomain=='SOTN'||data.serviceDomain=='CCVPN' " class="anticon anticon-ellipsis" (click)="serviceDetail(data)"></i>
<i [ngClass]="{'cannotclick':data.status=='Deleting'||data.status=='Creating'||data.status=='Healing'}" class="anticon anticon-delete" (click)="deleteModel(data)"></i>
</td>
@@ -137,14 +139,14 @@
<nz-progress *ngIf=" item.status == 'Healing' " [nzPercent]="item.rate"></nz-progress>
</td>
<td>
- <i *ngIf="item.serviceDomain=='vnf'" [ngClass]="{'cannotclick':item.status=='Healing'}" class="anticon anticon-reload" (click)="restartService(item)"></i>
+ <i *ngIf="item.serviceDomain=='vnf'" [ngClass]="{'cannotclick':item.status=='Healing'}" class="anticon anticon-reload" (click)="healService(item)"></i>
</td>
</tr>
</ng-template>
</tbody>
</nz-table>
<nz-modal [(nzVisible)]="deleteModelVisible" nzTitle="Delete" (nzOnCancel)="deleteCancel()" (nzOnOk)="deleteOk()">
- <h3><i class="anticon anticon-question-circle" style="color:red;"></i>Are you sure delete this instance?</h3>
+ <h3><i class="anticon anticon-question-circle" style="color:yellow;"></i>Are you sure delete this instance?</h3>
Instance ID: <b class="deleteModelContent"> {{ thisService["service-instance-id"] || thisService["nsInstanceId"] }}</b>
<div *ngIf="thisService['serviceDomain'] == 'Network Service'">
<span style="display:inline-block;width:50%;">terminationType:</span>
@@ -156,6 +158,52 @@
<input *ngIf="terminationType=='graceful'" style="width: 165px;" nz-input [(ngModel)]="gracefulTerminationTimeout">
</div>
</nz-modal>
+ <nz-modal [nzVisible]="healModelVisible" nzTitle="Heal" (nzOnCancel)="healCancel()" (nzOnOk)="healOk()">
+ <h3><i class="anticon anticon-question-circle" style="color:yellow;"></i>Are you sure heal this instance?</h3>
+ Instance ID: <b style="color:green"> {{ thisService["service-instance-id"] || thisService["nsInstanceId"] || thisService["vnfInstanceId"]}}</b>
+ <!-- NS -->
+ <div *ngIf="thisService['serviceDomain'] == 'Network Service'">
+ <span style="display:inline-block;width:50%;">degreeHealing:</span>
+ <nz-select style="width: 165px;" [(ngModel)]="nsParams.degreeHealing" >
+ <nz-option nzValue="HEAL_RESTORE" nzLabel="HEAL_RESTORE"></nz-option>
+ <nz-option nzValue="HEAL_QOS" nzLabel="HEAL_QOS"></nz-option>
+ <nz-option nzValue="HEAL_RESET" nzLabel="HEAL_RESET"></nz-option>
+ <nz-option nzValue="PARTIAL_HEALING" nzLabel="PARTIAL_HEALING"></nz-option>
+ </nz-select>
+ <div>
+ <span style="display:inline-block;">actionsHealing:</span>
+ <button nz-button [nzType]="'default'" (click)="addActionsHealing()"><i class="anticon anticon-plus-circle-o"></i></button>
+ <br>
+ <div *ngFor="let item of healActions;let i = index;" style="display:inline-block;">
+ <input style="width: 165px;" nz-input [(ngModel)]="item.value"><button nz-button [nzType]="'dashed'" (click)="minusActionsHealing(i)"><i class="anticon anticon-minus-circle-o"></i></button>
+ &nbsp;
+ </div>
+ </div>
+ <span style="display:inline-block;width:50%;">healScript:</span>
+ <input style="width: 165px;" nz-input [(ngModel)]="nsParams.healScript">
+ <div>
+ <span style="display:inline-block;">additionalParamsforNs:</span>
+ <button nz-button [nzType]="'default'" (click)="addNsAdditional()"><i class="anticon anticon-plus-circle-o"></i></button>
+ <br>
+ <div *ngFor="let item of nsAdditional;let i = index;">
+ Key: <input style="width: 165px;" nz-input [(ngModel)]="item.key"> &nbsp;
+ Value: <input style="width: 165px;" nz-input [(ngModel)]="item.value">
+ <button nz-button [nzType]="'dashed'" (click)="minusNsAdditional(i)"><i class="anticon anticon-minus-circle-o"></i></button>
+ </div>
+ </div>
+ </div>
+ <!-- vnf -->
+ <div *ngIf="thisService['serviceDomain'] == 'vnf'">
+ <span style="display:inline-block;width:50%;">cause:</span>
+ <input style="width: 165px;" nz-input [(ngModel)]="vnfParams.cause">
+ <span style="display:inline-block;width:50%;">action:</span>
+ <input style="width: 165px;" nz-input [(ngModel)]="vnfParams.additionalParams.action">
+ <span style="display:inline-block;width:50%;">actionvminfo:</span>
+ <nz-select style="width: 165px;" [(ngModel)]="vmSelected" >
+ <nz-option *ngFor="let item of vnfVms" [nzValue]="item" [nzLabel]="item.vmName"></nz-option>
+ </nz-select>
+ </div>
+ </nz-modal>
</div>
<div class="detailComponent" *ngIf="detailshow">
diff --git a/usecaseui-portal/src/app/services/services-list/services-list.component.ts b/usecaseui-portal/src/app/services/services-list/services-list.component.ts
index aecc6f2c..9da7cf9c 100644
--- a/usecaseui-portal/src/app/services/services-list/services-list.component.ts
+++ b/usecaseui-portal/src/app/services/services-list/services-list.component.ts
@@ -166,19 +166,88 @@ export class ServicesListComponent implements OnInit {
this.getTableData();
}
+ thisService = {}; //The current service of the operation
scaleService(){
console.log("scaleService!");
}
updataService(){
console.log("updataService!");
}
- stopService(data){
+ //heal
+ healModelVisible = false;
+ healActions = [];
+ nsAdditional = [];
+ nsParams = {
+ degreeHealing:"HEAL_RESTORE",
+ actionsHealing: [
+
+ ],
+ healScript: "",
+ additionalParamsforNs: ""
}
- restartService(data){
-
+ 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){
+ // console.log(service);
+ this.thisService = service;
+ this.healModelVisible = true;
+ if(service.serviceDomain == "vnf"){
+ this.vnfParams.vnfInstanceId = service.vnfInstanceId;
+ this.myhttp.getVnfInfo(service.vnfInstanceId)
+ .subscribe((data)=>{
+ // console.log(data);
+ this.vnfVms = data.vnfVms;
+ this.vmSelected = this.vnfVms[0];
+ })
+ }
+ }
+ healOk(){
+ 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};
+ console.log(requestBody);
+ this.healNsVnfService(this.thisService,requestBody);
+ }
+ healCancel(){
+ this.healModelVisible = false;
+ }
+
+ // show detail
detailshow = false;
detailData:Object;
serviceDetail(service){
@@ -199,7 +268,6 @@ export class ServicesListComponent implements OnInit {
console.log(service);
}
- thisService = {};
deleteModelVisible = false;
terminationType = "graceful";
gracefulTerminationTimeout = 120;
@@ -443,6 +511,24 @@ export class ServicesListComponent implements OnInit {
return mypromise;
}
+ healNsVnfService(service,requestBody){
+ console.log(service);
+ service.rate = 0;
+ service.status = "Healing";
+ this.myhttp.healNsService(service.nsInstanceId,requestBody)
+ .subscribe((data)=>{
+ let jobid = data.jobId;
+ let updata = (prodata)=>{
+ service.rate = prodata.responseDescriptor.progress;
+ }
+ this.queryNsProgress(jobid,updata).then((data1)=>{
+ console.log(data1);
+ service.rate = 100;
+ service.status = "Active";
+ });
+ })
+ }
+
deleteService(service){
let allprogress = {}; //
let querypros = []; //