X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;f=webapp-frontend%2Fsrc%2Fapp%2Fei-coordinator%2Fjobs-list%2Fjobs-list.component.ts;h=f06202ccabf00ee2232e775dceb516f9fae7ecdd;hb=b43fe9cc63931f8c45f93261f235d0608a855a83;hp=a85e57747612e80185bdff0d99e9a044aea065b3;hpb=832368a5329cffbac6f33b8355d95a18875ac2b7;p=portal%2Fnonrtric-controlpanel.git diff --git a/webapp-frontend/src/app/ei-coordinator/jobs-list/jobs-list.component.ts b/webapp-frontend/src/app/ei-coordinator/jobs-list/jobs-list.component.ts index a85e577..f06202c 100644 --- a/webapp-frontend/src/app/ei-coordinator/jobs-list/jobs-list.component.ts +++ b/webapp-frontend/src/app/ei-coordinator/jobs-list/jobs-list.component.ts @@ -22,22 +22,11 @@ import { FormControl, FormGroup } from "@angular/forms"; import { MatPaginator } from "@angular/material/paginator"; import { Sort } from "@angular/material/sort"; import { MatTableDataSource } from "@angular/material/table"; -import { - EMPTY, - forkJoin, - Subscription, - timer, -} from "rxjs"; +import { EMPTY, forkJoin, Subscription, timer } from "rxjs"; import { BehaviorSubject } from "rxjs/BehaviorSubject"; -import { - mergeMap, - finalize, - map, - tap, - switchMap -} from "rxjs/operators"; -import { EIJob } from "@interfaces/ei.types"; -import { EIService } from "@services/ei/ei.service"; +import { mergeMap, finalize, map, tap, switchMap } from "rxjs/operators"; +import { JobInfo } from "@interfaces/producer.types"; +import { ProducerService } from "@services/ei/producer.service"; import { UiService } from "@services/ui/ui.service"; export interface Job { @@ -63,12 +52,13 @@ export class JobsListComponent implements OnInit { private jobsSubject$ = new BehaviorSubject([]); private refresh$ = new BehaviorSubject(""); private loadingSubject$ = new BehaviorSubject(false); - private polling$ = new BehaviorSubject(true); + private polling$ = new BehaviorSubject(0); public loading$ = this.loadingSubject$.asObservable(); subscription: Subscription; checked: boolean = false; + firstTime: boolean = true; - constructor(private eiSvc: EIService, private ui: UiService) { + constructor(private producerService: ProducerService, private ui: UiService) { this.jobForm = new FormGroup({ jobId: new FormControl(""), typeId: new FormControl(""), @@ -108,31 +98,34 @@ export class JobsListComponent implements OnInit { dataSubscription(): Subscription { let prodId = []; - const jobs$ = this.eiSvc.getProducerIds().pipe( + const jobs$ = this.producerService.getProducerIds().pipe( tap((data) => (prodId = data)), mergeMap((prodIds) => - forkJoin(prodIds.map((id) => this.eiSvc.getJobsForProducer(id))) + forkJoin(prodIds.map((id) => this.producerService.getJobsForProducer(id))) ), finalize(() => this.loadingSubject$.next(false)) ); - const refreshedJobs$ = this.refresh$ - .pipe( - switchMap((_) => timer(0, 10000).pipe( + const refreshedJobs$ = this.refresh$.pipe( + switchMap((_) => + timer(0, 10000).pipe( tap((_) => { this.loadingSubject$.next(true); }), switchMap((_) => jobs$), map((response) => this.extractJobs(prodId, response)) ) - ) - ); - - return this.polling$.pipe( - switchMap(p => { - return p ? refreshedJobs$ : EMPTY; - }) - ).subscribe(); + ) + ); + + return this.polling$ + .pipe( + switchMap((value) => { + let pollCondition = value == 0 || this.checked; + return pollCondition ? refreshedJobs$ : EMPTY; + }) + ) + .subscribe(); } ngOnDestroy() { @@ -169,8 +162,9 @@ export class JobsListComponent implements OnInit { this.jobsDataSource.data = data; } - stopPolling(checked){ - this.polling$.next(checked); + stopPolling(checked) { + this.checked = checked; + this.polling$.next(this.jobs().length); } compare(a: any, b: any, isAsc: boolean) { @@ -186,16 +180,16 @@ export class JobsListComponent implements OnInit { return data.toLowerCase().includes(transformedFilter); } - getJobTypeId(eiJob: Job): string { - if (eiJob.typeId) { - return eiJob.typeId; + getJobTypeId(job: Job): string { + if (job.typeId) { + return job.typeId; } return "< No type >"; } - getJobOwner(eiJob: Job): string { - if (eiJob.owner) { - return eiJob.owner; + getJobOwner(job: Job): string { + if (job.owner) { + return job.owner; } return "< No owner >"; } @@ -204,7 +198,7 @@ export class JobsListComponent implements OnInit { return this.jobsSubject$.value; } - private extractJobs(prodId: number[], res: EIJob[][]) { + private extractJobs(prodId: number[], res: JobInfo[][]) { this.clearFilter(); let jobList = []; prodId.forEach((element, index) => { @@ -212,10 +206,14 @@ export class JobsListComponent implements OnInit { jobList = jobList.concat(jobs.map((job) => this.createJob(element, job))); }); this.jobsSubject$.next(jobList); + if (this.firstTime && jobList.length > 0) { + this.polling$.next(jobList.length); + this.firstTime = false; + } return jobList; } - createJobList(prodId: any[], result: EIJob[][]) { + createJobList(prodId: any[], result: JobInfo[][]) { let jobList = []; prodId.forEach((element, index) => { let jobs = result[index]; @@ -224,14 +222,14 @@ export class JobsListComponent implements OnInit { return jobList; } - createJob(element: any, job: EIJob): any { - let eiJob = {}; - eiJob.jobId = job.ei_job_identity; - eiJob.typeId = job.ei_type_identity; - eiJob.owner = job.owner; - eiJob.targetUri = job.target_uri; - eiJob.prodId = element; - return eiJob; + createJob(element: any, job: JobInfo): any { + let infoJob = {}; + infoJob.jobId = job.info_job_identity; + infoJob.typeId = job.info_type_identity; + infoJob.owner = job.owner; + infoJob.targetUri = job.target_uri; + infoJob.prodId = element; + return infoJob; } refreshDataClick() {