X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;f=dashboard%2Fwebapp-frontend%2Fsrc%2Fapp%2Fstats%2Fstats.component.ts;h=f3e453564fe6c10436b0a74fd602dc14ad946495;hb=HEAD;hp=29930566019c07babcdb718444760f447016699e;hpb=c7d74b01b59da07704be4069acece1a91d451a7e;p=portal%2Fric-dashboard.git diff --git a/dashboard/webapp-frontend/src/app/stats/stats.component.ts b/dashboard/webapp-frontend/src/app/stats/stats.component.ts index 29930566..f3e45356 100644 --- a/dashboard/webapp-frontend/src/app/stats/stats.component.ts +++ b/dashboard/webapp-frontend/src/app/stats/stats.component.ts @@ -7,9 +7,9 @@ * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. @@ -17,12 +17,21 @@ * limitations under the License. * ========================LICENSE_END=================================== */ -import { Component, OnInit, ViewChildren, QueryList } from '@angular/core'; -import { BaseChartDirective } from 'ng2-charts/ng2-charts'; +import { Component, OnInit } from '@angular/core'; import { StatsService } from '../services/stats/stats.service'; -import { HttpClient } from '@angular/common/http'; -import { DashboardSuccessTransport } from '../interfaces/dashboard.types'; +import { ConfirmDialogService } from '../services/ui/confirm-dialog.service'; import { DomSanitizer, SafeResourceUrl } from '@angular/platform-browser'; +import { MatDialog } from '@angular/material/dialog'; +import { MatTabChangeEvent } from '@angular/material/tabs'; +import { NotificationService } from '../services/ui/notification.service'; +import { UiService } from '../services/ui/ui.service'; +import { InstanceSelectorService } from '../services/instance-selector/instance-selector.service'; +import { StatsDataSource } from './stats-datasource'; +import { Subscription } from 'rxjs'; +import { StatsDialogComponent } from './stats-dialog.component'; +import { AppStats } from '../interfaces/e2-mgr.types'; +import {FormControl} from '@angular/forms'; +import { RicInstance} from '../interfaces/dashboard.types'; @Component({ selector: 'rd-stats', @@ -31,23 +40,138 @@ import { DomSanitizer, SafeResourceUrl } from '@angular/platform-browser'; }) export class StatsComponent implements OnInit { - @ViewChildren(BaseChartDirective) charts: QueryList; checked = false; - metricsUrlMc: SafeResourceUrl; - metricsUrlMl: SafeResourceUrl; + darkMode: boolean; + panelClass: string; + displayedColumns: string[] = ['appName', 'metricUrl', 'editmetricUrl']; + dataSource: StatsDataSource; + private instanceChange: Subscription; + private instanceKey: string; + metricsUrl: SafeResourceUrl; + tabs = []; + showTabs = false; + selected = new FormControl(0); - constructor(private service: StatsService, - private httpClient: HttpClient, - private sanitize: DomSanitizer) { + constructor(private statsservice: StatsService, + private sanitize: DomSanitizer, + private confirmDialogService: ConfirmDialogService, + private notificationService: NotificationService, + public instanceSelectorService: InstanceSelectorService, + public dialog: MatDialog, + public ui: UiService) { } ngOnInit() { - this.service.getAppMetricsUrl('MC').subscribe((res: DashboardSuccessTransport) => { - this.metricsUrlMc = this.sanitize.bypassSecurityTrustResourceUrl(res.data); + this.dataSource = new StatsDataSource(this.statsservice, this.notificationService); + + this.ui.darkModeState.subscribe((isDark) => { + this.darkMode = isDark; + }); + + this.instanceChange = this.instanceSelectorService.getSelectedInstance().subscribe((instance: RicInstance) => { + if (instance.key) { + this.instanceKey = instance.key; + this.dataSource.loadTable(instance.key); + } }); - this.service.getAppMetricsUrl('ML').subscribe((res: DashboardSuccessTransport) => { - this.metricsUrlMl = this.sanitize.bypassSecurityTrustResourceUrl(res.data); + + } + + ngOnDestroy() { + this.instanceChange.unsubscribe(); + } + + setupAppMetrics() { + if (this.darkMode) { + this.panelClass = 'dark-theme'; + } else { + this.panelClass = ''; + } + const dialogRef = this.dialog.open(StatsDialogComponent, { + panelClass: this.panelClass, + width: '450px', + data: { + instanceKey: this.instanceKey + } }); + dialogRef.afterClosed() + .subscribe((result: boolean) => { + if (result) { + this.dataSource.loadTable(this.instanceKey); + } + }); } + editAppMetrics(stats?) { + const dialogRef = this.dialog.open(StatsDialogComponent, { + hasBackdrop: false, + data: { + instanceKey: this.instanceKey, + appName: stats.statsDetails.appName ? stats.statsDetails.appName : '', + metricUrl: stats.statsDetails.metricUrl ? stats.statsDetails.metricUrl : '', + appId: stats.statsDetails.appId ? stats.statsDetails.appId : 0, + isEdit: 'true' + } + }); + dialogRef.afterClosed() + .subscribe((result: boolean) => { + if (result) { + this.dataSource.loadTable(this.instanceKey); + } + }); + } + + viewAppMetrics(stats?) { + this.statsservice.getAppMetricsById(this.instanceKey, stats.statsDetails.appId) .subscribe((res: AppStats) => { + this.metricsUrl = this.sanitize.bypassSecurityTrustResourceUrl(res.statsDetails.metricUrl); + let tabNotThere:boolean = true; + if (this.tabs.length <= 0) { + this.tabs.push(res); + this.selected.setValue(this.tabs.length - 1); + } + else { + for(let i=0; i=0) + this.viewAppMetrics(this.tabs[event.index]); + } + + deleteAppMetrics(stats?) { + this.confirmDialogService.openConfirmDialog('Are you sure you want to delete this entry?') + .afterClosed().subscribe((res: boolean) => { + if (res) { + + this.statsservice.deleteAppMetrics(this.instanceKey, stats.statsDetails.appId).subscribe(() => { + for(let i=0; i0) { + if (this.tabs[i] == null) + i=i-1; + this.viewAppMetrics(this.tabs[i]); + } + break; + } + } + this.dataSource.loadTable(this.instanceKey); + }); + } + }); + } }