From dc2d38249ca5ac3127c260745af6251604e35a80 Mon Sep 17 00:00:00 2001 From: liuwh7 Date: Mon, 21 Mar 2022 14:11:42 +0800 Subject: feat: intent instance management Signed-off-by: liuwh7 Change-Id: I7d8047e7ccc86617399ce57a5be62907d09292eb Issue-ID: REQ-1075 --- usecaseui-portal/src/app/app.module.ts | 2 + .../src/app/core/services/intentBase.service.ts | 18 +++- .../src/app/core/services/slicingTaskServices.ts | 13 +-- .../monitor-facps-service.component.ts | 12 ++- .../cloud-leased-line.component.html | 2 +- .../cloud-leased-line.component.ts | 10 ++- .../intent-based-services.component.html | 5 ++ .../intent-instance/intent-instance.component.html | 64 +++++++++++++++ .../intent-instance/intent-instance.component.less | 87 ++++++++++++++++++++ .../intent-instance/intent-instance.component.ts | 96 ++++++++++++++++++++++ .../business-order/business-order.component.ts | 36 +++++++- 11 files changed, 332 insertions(+), 13 deletions(-) create mode 100644 usecaseui-portal/src/app/views/services/intent-based-services/intent-instance/intent-instance.component.html create mode 100644 usecaseui-portal/src/app/views/services/intent-based-services/intent-instance/intent-instance.component.less create mode 100644 usecaseui-portal/src/app/views/services/intent-based-services/intent-instance/intent-instance.component.ts (limited to 'usecaseui-portal/src/app') diff --git a/usecaseui-portal/src/app/app.module.ts b/usecaseui-portal/src/app/app.module.ts index 1bf1b652..f9c7a6f4 100644 --- a/usecaseui-portal/src/app/app.module.ts +++ b/usecaseui-portal/src/app/app.module.ts @@ -75,6 +75,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"; @@ -177,6 +178,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(this.url["intentBasedUnifyPredict"], requestBody); } + + getIntentInstanceList(paramsObj) { + return this.http.post(this.url["getIntentInstanceList"], paramsObj); + } + + delIntentInstance(id) { + let params = new HttpParams({ fromObject: { "id": id } }); + return this.http.delete(this.url['delIntentInstance'], { params }); + } + + verifyIntentInstance(paramsObj) { + return this.http.post(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 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" > + + + \ 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 @@ +
+
+ + + + No + Intent Name + Intent Source + Customer + Intent Content + Intent Config + Business Instance + + + + + + + {{i+1}} + {{ data.intentName }} + {{ data.intentSource }} + {{ data.customer }} + + {{ data.intentContent }} + + {{ data.intentConfig }} + {{ data.businessInstance }} + + + + + + + + +
+
\ 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(); + }); + } } -- cgit 1.2.3-korg