summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorliuwh7 <liuwh7@asiainfo.com>2022-03-21 14:11:42 +0800
committerliuwh7 <liuwh7@asiainfo.com>2022-03-21 14:11:57 +0800
commitdc2d38249ca5ac3127c260745af6251604e35a80 (patch)
tree83b1f76b09492b96701486023fab9574f768c7e5
parentb44075625fe5d092e0f7048b254edc986dd26c0a (diff)
feat: intent instance management
Signed-off-by: liuwh7 <liuwh7@asiainfo.com> Change-Id: I7d8047e7ccc86617399ce57a5be62907d09292eb Issue-ID: REQ-1075
-rw-r--r--usecaseui-portal/src/app/app.module.ts2
-rw-r--r--usecaseui-portal/src/app/core/services/intentBase.service.ts18
-rw-r--r--usecaseui-portal/src/app/core/services/slicingTaskServices.ts13
-rw-r--r--usecaseui-portal/src/app/views/fcaps/monitor-management-service/monitor-facps-service/monitor-facps-service.component.ts12
-rw-r--r--usecaseui-portal/src/app/views/services/intent-based-services/cloud-leased-line/cloud-leased-line.component.html2
-rw-r--r--usecaseui-portal/src/app/views/services/intent-based-services/cloud-leased-line/cloud-leased-line.component.ts10
-rw-r--r--usecaseui-portal/src/app/views/services/intent-based-services/intent-based-services.component.html5
-rw-r--r--usecaseui-portal/src/app/views/services/intent-based-services/intent-instance/intent-instance.component.html64
-rw-r--r--usecaseui-portal/src/app/views/services/intent-based-services/intent-instance/intent-instance.component.less87
-rw-r--r--usecaseui-portal/src/app/views/services/intent-based-services/intent-instance/intent-instance.component.ts96
-rw-r--r--usecaseui-portal/src/app/views/services/slicing-management/csmf-slicing-business-management/business-order/business-order.component.ts36
-rw-r--r--usecaseui-portal/src/assets/i18n/cn.json2
-rw-r--r--usecaseui-portal/src/assets/i18n/en.json2
13 files changed, 334 insertions, 15 deletions
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<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();
+ });
+ }
}
diff --git a/usecaseui-portal/src/assets/i18n/cn.json b/usecaseui-portal/src/assets/i18n/cn.json
index ad9d855e..e2eab0b2 100644
--- a/usecaseui-portal/src/assets/i18n/cn.json
+++ b/usecaseui-portal/src/assets/i18n/cn.json
@@ -172,7 +172,7 @@
"i18nTextDefine_manageService":"管理服务",
"i18nTextDefine_cloudLeasedLine":"Cloud Leased Line",
"i18nTextDefine_intentBaseService":"Intent Based Services",
-
+ "i18nTextDefine_intentInstance":"Intent Instance Management",
"mdons-network-component":"--:",
"i18nTextDefine_InterDomainTitle": "域间链接",
diff --git a/usecaseui-portal/src/assets/i18n/en.json b/usecaseui-portal/src/assets/i18n/en.json
index 034262b2..f47d7b99 100644
--- a/usecaseui-portal/src/assets/i18n/en.json
+++ b/usecaseui-portal/src/assets/i18n/en.json
@@ -166,7 +166,7 @@
"i18nTextDefine_manageService":"Manage Service",
"i18nTextDefine_cloudLeasedLine":"Cloud Leased Line",
"i18nTextDefine_intentBaseService":"Intent Based Services",
-
+ "i18nTextDefine_intentInstance":"Intent Instance Management",
"mdons-network-component":"--:",
"i18nTextDefine_InterDomainTitle": "Inter-domain link",