diff options
author | Keguang He <hekeguang@chinamobile.com> | 2022-03-21 07:30:40 +0000 |
---|---|---|
committer | Gerrit Code Review <gerrit@onap.org> | 2022-03-21 07:30:40 +0000 |
commit | 0b9d6ded59f73d8f48975f66481053c85fb17cd5 (patch) | |
tree | ad135c3d63e894adc7e2f22220d4ea958e23b0b6 /usecaseui-portal/src/app | |
parent | 067fe18168fae8b5cf5ac211dcf1f52f476e8bb7 (diff) | |
parent | dc2d38249ca5ac3127c260745af6251604e35a80 (diff) |
Merge "feat: intent instance management"
Diffstat (limited to 'usecaseui-portal/src/app')
11 files changed, 332 insertions, 13 deletions
diff --git a/usecaseui-portal/src/app/app.module.ts b/usecaseui-portal/src/app/app.module.ts index bc2daea0..3e0c46e9 100644 --- a/usecaseui-portal/src/app/app.module.ts +++ b/usecaseui-portal/src/app/app.module.ts @@ -74,6 +74,7 @@ import { CloudLeasedLineModalComponent } from './views/services/intent-based-ser import { CloudLeasedLineComponent } from './views/services/intent-based-services/cloud-leased-line/cloud-leased-line.component'; import { IntentBasedPredictComponent } from './views/services/intent-based-services/intent-based-predict/intent-based-predict.component'; import { IntentBasedServicesComponent } from './views/services/intent-based-services/intent-based-services.component'; +import { IntentInstanceComponent } from './views/services/intent-based-services/intent-instance/intent-instance.component'; import { SmartCloudLeasedModalComponent } from './views/services/intent-based-services/smart-cloud-leased-modal/smart-cloud-leased-modal.component'; import { CcvpnCreationComponent } from "./views/services/services-list/ccvpn-creation/ccvpn-creation.component"; import { CcvpnDetailComponent } from "./views/services/services-list/ccvpn-detail/ccvpn-detail.component"; @@ -175,6 +176,7 @@ registerLocaleData(en); MonitorFacpsServiceComponent, IntentBasedPredictComponent, IntentBasedServicesComponent, + IntentInstanceComponent, CloudLeasedLineComponent, CloudLeasedLineModalComponent, SmartCloudLeasedModalComponent, diff --git a/usecaseui-portal/src/app/core/services/intentBase.service.ts b/usecaseui-portal/src/app/core/services/intentBase.service.ts index 7fb8104f..5ee8424a 100644 --- a/usecaseui-portal/src/app/core/services/intentBase.service.ts +++ b/usecaseui-portal/src/app/core/services/intentBase.service.ts @@ -34,7 +34,10 @@ export class intentBaseService { invalidIntentInstance: this.baseUrl + "/intent/invalidIntentInstance", queryAccessNodeInfo: this.baseUrl + "/intent/queryAccessNodeInfo", intentInstancePredict: this.baseUrl + "/intent/predict", - intentBasedUnifyPredict: this.baseUrl + "/intent/unifyPredict" + intentBasedUnifyPredict: this.baseUrl + "/intent/unifyPredict", + getIntentInstanceList: this.baseUrl + "/intent/getIntentList", + delIntentInstance: this.baseUrl + "/intent/deleteIntent", + verifyIntentInstance: this.baseUrl + "/intent/verifyIntentInstance" }; //The following APIs function are optimizable------------------------ @@ -88,4 +91,17 @@ export class intentBaseService { intentBasedUnifyPredict(requestBody) { return this.http.post<any>(this.url["intentBasedUnifyPredict"], requestBody); } + + getIntentInstanceList(paramsObj) { + return this.http.post<any>(this.url["getIntentInstanceList"], paramsObj); + } + + delIntentInstance(id) { + let params = new HttpParams({ fromObject: { "id": id } }); + return this.http.delete<any>(this.url['delIntentInstance'], { params }); + } + + verifyIntentInstance(paramsObj) { + return this.http.post<any>(this.url['verifyIntentInstance'], paramsObj); + } } diff --git a/usecaseui-portal/src/app/core/services/slicingTaskServices.ts b/usecaseui-portal/src/app/core/services/slicingTaskServices.ts index 362e9f6a..292d9bdd 100644 --- a/usecaseui-portal/src/app/core/services/slicingTaskServices.ts +++ b/usecaseui-portal/src/app/core/services/slicingTaskServices.ts @@ -13,13 +13,10 @@ See the License for the specific language governing permissions and
limitations under the License.
*/
-import { Injectable } from "@angular/core";
import {
- HttpClient,
- HttpHeaders,
- HttpParams,
- HttpResponse,
+ HttpClient
} from "@angular/common/http";
+import { Injectable } from "@angular/core";
import { Http } from "../../shared/utils/http";
@Injectable()
export class SlicingTaskServices {
@@ -85,6 +82,7 @@ export class SlicingTaskServices { csmfGetProgress:
"/api/usecaseui/csmf/5gSlicing/service/{serviceId}/progress",
csmfPurchase: "/api/usecaseui-server/v1/uui-slicing/csmf/5gSlicing",
+ csmfPurchaseWithContent: '/api/usecaseui-server/v1/intent/csmf/5gSlicing',
//monitor 5G
fetchTraffic:
this.baseUrl +
@@ -294,7 +292,10 @@ export class SlicingTaskServices { let url = this.url.csmfPurchase;
return this.Http.httpAxios("post", url, paramsObj, failedCallback);
}
-
+ csmfSlicingPurchaseWithContent(paramsObj: any, failedCallback?: any) {
+ let url = this.url.csmfPurchaseWithContent;
+ return this.Http.httpAxios("post", url, paramsObj, failedCallback);
+ }
//monitor 5G
getFetchTraffic(service_list, time, failedCallback?: any) {
let url = this.url.fetchTraffic.replace("{queryTimestamp}", time);
diff --git a/usecaseui-portal/src/app/views/fcaps/monitor-management-service/monitor-facps-service/monitor-facps-service.component.ts b/usecaseui-portal/src/app/views/fcaps/monitor-management-service/monitor-facps-service/monitor-facps-service.component.ts index f86f02c1..858bfac2 100644 --- a/usecaseui-portal/src/app/views/fcaps/monitor-management-service/monitor-facps-service/monitor-facps-service.component.ts +++ b/usecaseui-portal/src/app/views/fcaps/monitor-management-service/monitor-facps-service/monitor-facps-service.component.ts @@ -1,5 +1,6 @@ import { HttpClient } from "@angular/common/http"; import { Component, OnInit } from "@angular/core"; +import { ActivatedRoute } from '@angular/router'; import { NzMessageService } from "ng-zorro-antd"; import { intentBaseService } from "../../../../core/services/intentBase.service"; @@ -13,7 +14,8 @@ export class MonitorFacpsServiceComponent implements OnInit { constructor( private nzMessage: NzMessageService, private myHttp: intentBaseService, - private http: HttpClient + private http: HttpClient, + private route: ActivatedRoute ) {} selectedSubscriptionType: string = ""; @@ -57,6 +59,14 @@ export class MonitorFacpsServiceComponent implements OnInit { progressSetTimeOut: any; ngOnInit() { + this.route.queryParams.subscribe( + params => { + this.instanceId= params['instanceId']; + if (this.instanceId) { + this.queryInstancePerformance(this.instanceId); + } + } + ); this.getFinishedInstanceInfo(); this.initOpts = { renderer: "canvas", diff --git a/usecaseui-portal/src/app/views/services/intent-based-services/cloud-leased-line/cloud-leased-line.component.html b/usecaseui-portal/src/app/views/services/intent-based-services/cloud-leased-line/cloud-leased-line.component.html index f4dd029f..ae733c5f 100644 --- a/usecaseui-portal/src/app/views/services/intent-based-services/cloud-leased-line/cloud-leased-line.component.html +++ b/usecaseui-portal/src/app/views/services/intent-based-services/cloud-leased-line/cloud-leased-line.component.html @@ -51,7 +51,7 @@ nz-button nzType="primary" class="buy-button" - (click)="goMonitorService()" + (click)="goMonitorService(data)" > Intent Monitor </button> diff --git a/usecaseui-portal/src/app/views/services/intent-based-services/cloud-leased-line/cloud-leased-line.component.ts b/usecaseui-portal/src/app/views/services/intent-based-services/cloud-leased-line/cloud-leased-line.component.ts index 7b39f1aa..a9d239df 100644 --- a/usecaseui-portal/src/app/views/services/intent-based-services/cloud-leased-line/cloud-leased-line.component.ts +++ b/usecaseui-portal/src/app/views/services/intent-based-services/cloud-leased-line/cloud-leased-line.component.ts @@ -147,8 +147,14 @@ export class CloudLeasedLineComponent implements OnInit { this.cloudLeasedLineShowFlag = true; } // to monitor page - goMonitorService(): void { - this.router.navigateByUrl('/fcaps/monitor_service'); + goMonitorService(data): void { + // this.router.navigateByUrl('/fcaps/monitor_service');navigate + this.router.navigate(['/fcaps/monitor_service'], { + queryParams: { + instanceId: data.instanceId + }, + skipLocationChange: true + }); } activeCloudLeasedLine(row): void { diff --git a/usecaseui-portal/src/app/views/services/intent-based-services/intent-based-services.component.html b/usecaseui-portal/src/app/views/services/intent-based-services/intent-based-services.component.html index e4262859..52f70988 100644 --- a/usecaseui-portal/src/app/views/services/intent-based-services/intent-based-services.component.html +++ b/usecaseui-portal/src/app/views/services/intent-based-services/intent-based-services.component.html @@ -9,4 +9,9 @@ *ngIf="selectedIndex === 1" ></app-cloud-leased-line> </nz-tab> + <nz-tab [nzTitle]="'i18nTextDefine_intentInstance' | translate"> + <app-intent-instance + *ngIf="selectedIndex === 2" + ></app-intent-instance> + </nz-tab> </nz-tabset>
\ No newline at end of file diff --git a/usecaseui-portal/src/app/views/services/intent-based-services/intent-instance/intent-instance.component.html b/usecaseui-portal/src/app/views/services/intent-based-services/intent-instance/intent-instance.component.html new file mode 100644 index 00000000..ee71be03 --- /dev/null +++ b/usecaseui-portal/src/app/views/services/intent-based-services/intent-instance/intent-instance.component.html @@ -0,0 +1,64 @@ +<div class="intent-resource_tab"> + <div class="intent-resource-table-list"> + <nz-table + #basicTable [nzData]="listOfData" + [nzFrontPagination]="false" + nzShowSizeChanger + [nzPageSizeOptions]="[5,10,15,20]" + [nzTotal]='total' + [(nzPageSize)]="pageSize" + [(nzPageIndex)]='pageIndex' + [nzLoading]="loading" + (nzPageIndexChange)="searchData()" + (nzPageSizeChange)="searchData()" + [nzScroll]="{ x: '1500px' }" + nzTableLayout="fixed" + > + <thead> + <tr> + <th [nzLeft]="true">No</th> + <th>Intent Name</th> + <th>Intent Source</th> + <th>Customer</th> + <th nzEllipsis>Intent Content</th> + <th>Intent Config</th> + <th>Business Instance</th> + <th [nzRight]="true" [nzWidth]="300"></th> + </tr> + </thead> + <tbody> + <ng-template ngFor let-data [ngForOf]="basicTable.data" let-i="index"> + <tr> + <td [nzLeft]="true">{{i+1}}</td> + <td>{{ data.intentName }}</td> + <td>{{ data.intentSource }}</td> + <td>{{ data.customer }}</td> + <td [title]="data.intentContent" nzEllipsis> + {{ data.intentContent }} + </td> + <td>{{ data.intentConfig }}</td> + <td>{{ data.businessInstance }}</td> + <td [nzRight]="true"> + <button + nz-button + nzType="primary" + class="buy-button" + (click)="verificationIntentionInstance(data)" + > + check + </button> + <button + nz-button + nzType="primary" + class="buy-button" + (click)="deleteIntentionInstance(data)" + > + Delete + </button> + </td> + </tr> + </ng-template> + </tbody> + </nz-table> + </div> +</div>
\ No newline at end of file diff --git a/usecaseui-portal/src/app/views/services/intent-based-services/intent-instance/intent-instance.component.less b/usecaseui-portal/src/app/views/services/intent-based-services/intent-instance/intent-instance.component.less new file mode 100644 index 00000000..f665fdb0 --- /dev/null +++ b/usecaseui-portal/src/app/views/services/intent-based-services/intent-instance/intent-instance.component.less @@ -0,0 +1,87 @@ +.intent-resource_tab { + width: 103%; + margin-left: 60px!important; + margin-top: -35px!important; + .ant-tabs-content.ant-tabs-content-animated{ + padding: 20px 0!important; + } +} +.slicing-resource-table{ + padding: 20px!important; +} +.intent-resource-table-list{ + padding: 20px!important; + nz-table{ + .ant-table-wrapper{ + .ant-table-body{ + th,td{ + word-break: break-word!important; + } + } + } + } +} +nz-select { + width: 200px; +} + +.task_status { + margin-bottom: 20px; + + span { + margin-right: 5%; + } +} + +.action-icon { + display: inline-block; + vertical-align: top; +} + +i.anticon { + cursor: pointer; + font-size: 18px; + padding: 2px 15px; + vertical-align: inherit !important; + + &:hover { + color: #147dc2; + } +} + +.cannotclick { + pointer-events: none; + color: #aaa; + opacity: 0.6; +} + +.buy-button { + float: right; + margin-right: 2%; +} +::ng-deep .ant-table-row .buy-button { + float: left; +} + +::ng-deep .ant-table-th-right-sticky { + width: 200px; +} +.ant-table-th-right-sticky, .ant-table-td-right-sticky { + position: -webkit-sticky; + position: sticky; + z-index: 1; + right: 0; +} +.ant-table-th-left-sticky, .ant-table-td-left-sticky { + position: -webkit-sticky; + position: sticky; + z-index: 1; + left: 0; +} +.ellipsisClass{ + display: inline-block; + max-width: 150px; + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; +}
\ No newline at end of file diff --git a/usecaseui-portal/src/app/views/services/intent-based-services/intent-instance/intent-instance.component.ts b/usecaseui-portal/src/app/views/services/intent-based-services/intent-instance/intent-instance.component.ts new file mode 100644 index 00000000..d13b9d7e --- /dev/null +++ b/usecaseui-portal/src/app/views/services/intent-based-services/intent-instance/intent-instance.component.ts @@ -0,0 +1,96 @@ +import { Component, OnInit } from "@angular/core"; +import { Router } from "@angular/router"; +import { NzMessageService } from "ng-zorro-antd"; +import { intentBaseService } from "../../../../core/services/intentBase.service"; + +@Component({ + selector: 'app-intent-instance', + templateUrl: './intent-instance.component.html', + styleUrls: ['./intent-instance.component.less'] +}) +export class IntentInstanceComponent implements OnInit { + + constructor( + private router:Router, + private myHttp: intentBaseService, + private nzMessage: NzMessageService + ) {} + + ngOnChanges() {} + + ngOnInit() { + this.pageIndex = 1; + this.pageSize = 10; + this.getIntentionInstanceList(); + } + + ngOnDestroy() {} + + // table lists + listOfData: any[] = []; + // pageSize or pageNum + pageIndex: number = 1; + pageSize: number = 10; + total: number = 0; + loading = false; + + // init source data + getIntentionInstanceList(): void { + this.myHttp.getIntentInstanceList({ + currentPage: this.pageIndex, + pageSize: this.pageSize + }).subscribe((response) => { + const { code, message, data:{ totalRecords, list } } = response; + if (code !== 200) { + this.nzMessage.error(message); + return; + } + + this.total = totalRecords; + this.listOfData = list; + }, (err) => { + console.log(err); + }); + } + + // change page message + searchData(): void { + this.getIntentionInstanceList(); + } + + verificationIntentionInstance(row): void { + this.myHttp.verifyIntentInstance({ + id: row.id + }).subscribe((response) => { + const { code, message, data } = response; + if (code !== 200) { + this.nzMessage.error(message); + return; + } + this.nzMessage.success(data); + this.resetParam2Query(); + }, (err) => { + console.log(err); + }); + } + + deleteIntentionInstance(row): void { + this.myHttp.delIntentInstance(row.id).subscribe((response) => { + const { code, message } = response; + if (code !== 200) { + this.nzMessage.error(message); + return; + } + this.nzMessage.success('Delete IntentionInstance Success'); + this.resetParam2Query(); + }, (err) => { + console.log(err); + }); + } + + resetParam2Query() { + this.pageIndex = 1; + this.pageSize = 10; + this.getIntentionInstanceList(); + } +}
\ No newline at end of file diff --git a/usecaseui-portal/src/app/views/services/slicing-management/csmf-slicing-business-management/business-order/business-order.component.ts b/usecaseui-portal/src/app/views/services/slicing-management/csmf-slicing-business-management/business-order/business-order.component.ts index aa5a5db1..70ef4ef8 100644 --- a/usecaseui-portal/src/app/views/services/slicing-management/csmf-slicing-business-management/business-order/business-order.component.ts +++ b/usecaseui-portal/src/app/views/services/slicing-management/csmf-slicing-business-management/business-order/business-order.component.ts @@ -51,6 +51,7 @@ export class BusinessOrderComponent implements OnInit { uEMobilityLevel: "stationary", coverageArea: "", coverageAreaNumber: null, + intentContent: '', }; areaList: any[] = []; validateRulesShow: any[] = []; @@ -95,6 +96,7 @@ export class BusinessOrderComponent implements OnInit { uEMobilityLevel: "stationary", coverageArea: "", coverageAreaNumber: null, + intentContent: '' }; this.validateRulesShow = []; } @@ -152,7 +154,18 @@ export class BusinessOrderComponent implements OnInit { this.handleCancel(); }; this.loading = true; - this.myhttp + + // csmfSlicingPurchaseWithContent + const { intentContent } = this.slicing_order_info; + if (intentContent) { + this.csmfSlicingPurchaseWithContent(paramsObj, csmfSlicingPurchaseFailedCallback); + return; + } + this.csmfSlicingPurchase(paramsObj, csmfSlicingPurchaseFailedCallback); + } + + csmfSlicingPurchase(paramsObj, csmfSlicingPurchaseFailedCallback): void { + this.myhttp .csmfSlicingPurchase(paramsObj, csmfSlicingPurchaseFailedCallback) .then((res) => { const result = res.result_header; @@ -168,5 +181,24 @@ export class BusinessOrderComponent implements OnInit { this.loading = false; this.handleCancel(); }); - } + } + + csmfSlicingPurchaseWithContent(paramsObj, csmfSlicingPurchaseFailedCallback): void { + this.myhttp + .csmfSlicingPurchaseWithContent(paramsObj, csmfSlicingPurchaseFailedCallback) + .then((res) => { + const result = res.result_header; + if ( + result && + result.result_code && + +result.result_code === 200 + ) { + console.log(res); + } else { + this.message.create("error", "Network error"); + } + this.loading = false; + this.handleCancel(); + }); + } } |