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=ca393307ae83ac892cfc8baa3229ae61a7d0c13f;hb=HEAD;hp=ce6c9a73f0ab618670ef2f3bd716ad78c12b0996;hpb=cad2aefe20f47931a1ebf40e948d1e4a922de841;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 ce6c9a7..ca39330 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,11 +22,12 @@ 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, of, pipe, Subscription, concat, Observable } from "rxjs"; +import { EMPTY, forkJoin, of, Subscription, concat } from "rxjs"; import { BehaviorSubject } from "rxjs/BehaviorSubject"; import { mergeMap, finalize, map, tap, concatMap, delay, skip, catchError } from "rxjs/operators"; import { ConsumerService } from "@services/ei/consumer.service"; import { UiService } from "@services/ui/ui.service"; +import { OperationalState } from '@app/interfaces/consumer.types'; export interface Job { jobId: string; @@ -34,6 +35,7 @@ export interface Job { targetUri: string; owner: string; prodIds: string[]; + status: OperationalState; } @Component({ @@ -64,6 +66,7 @@ export class JobsListComponent implements OnInit { owner: new FormControl(""), targetUri: new FormControl(""), prodIds: new FormControl(""), + status: new FormControl("") }); } @@ -81,7 +84,8 @@ export class JobsListComponent implements OnInit { this.isDataIncluding(data.jobId, searchTerms.jobId) && this.isDataIncluding(data.owner, searchTerms.owner) && this.isDataIncluding(data.typeId, searchTerms.typeId) && - this.isArrayIncluding(data.prodIds, searchTerms.prodIds) + this.isArrayIncluding(data.prodIds, searchTerms.prodIds) && + this.isDataIncluding(data.status, searchTerms.status) ); }) as (data: Job, filter: any) => boolean; }); @@ -97,13 +101,18 @@ export class JobsListComponent implements OnInit { dataSubscription(): Subscription { const jobsInfo$ = this.consumerService.getJobIds().pipe( + catchError(_ => { return EMPTY }), tap((_) => { this.jobList = [] as Job[]; }), mergeMap((jobIds) => forkJoin(jobIds.map((jobId) => { return forkJoin([ - of(jobId), + of(jobId).pipe( + catchError(err => { + return of([-1]); + }) + ), this.consumerService.getJobInfo(jobId).pipe( catchError(err => { return of([-1]); @@ -119,7 +128,6 @@ export class JobsListComponent implements OnInit { this.loadingSubject$.next(false); this.jobsSubject$.next(this.jobList); }) - ); const whenToRefresh$ = of('').pipe( @@ -158,6 +166,7 @@ export class JobsListComponent implements OnInit { this.jobForm.get("owner").setValue(""); this.jobForm.get("targetUri").setValue(""); this.jobForm.get("prodIds").setValue(""); + this.jobForm.get("status").setValue(""); } sortJobs(sort: Sort) { @@ -175,6 +184,8 @@ export class JobsListComponent implements OnInit { return this.compare(a.targetUri, b.targetUri, isAsc); case "prodIds": return this.compare(a.prodIds, b.prodIds, isAsc); + case "status": + return this.compare(a.status, b.status, isAsc); default: return 0; } @@ -185,7 +196,9 @@ export class JobsListComponent implements OnInit { stopPolling(checked) { this.checked = checked; this.polling$.next(this.jobs().length); - this.refreshDataClick(); + if (this.checked) { + this.refreshDataClick(); + } } compare(a: any, b: any, isAsc: boolean) { @@ -230,14 +243,30 @@ export class JobsListComponent implements OnInit { private extractJobs(res: any) { this.clearFilter(); res.forEach(element => { - if(element[1] != -1 && element[2] != -1){ - let jobObj = {}; - jobObj.jobId = element[0]; - jobObj.owner = element[1].job_owner; - jobObj.targetUri = element[1].job_result_uri; - jobObj.typeId = element[1].info_type_id; - jobObj.prodIds = (element[2].producers) ? element[2].producers : ["No Producers"]; - this.jobList = this.jobList.concat(jobObj); + if (element[0] != -1) { + if (element[1] != -1 && element[2] != -1) { + let jobObj = {}; + jobObj.jobId = element[0]; + jobObj.owner = element[1].job_owner; + jobObj.targetUri = element[1].job_result_uri; + jobObj.typeId = element[1].info_type_id; + jobObj.prodIds = (element[2].producers) ? element[2].producers : ["No Producers"]; + jobObj.status = element[2].info_job_status; + this.jobList = this.jobList.concat(jobObj); + } else { + let jobObj = {}; + jobObj.jobId = element[0]; + if (element[1] == -1) { + jobObj.owner = "--Missing information--"; + jobObj.targetUri = "--Missing information--"; + jobObj.typeId = "--Missing information--"; + } + if (element[2] == -1) { + jobObj.prodIds = "--Missing information--" as unknown as []; + jobObj.status = "--Missing information--" as OperationalState; + } + this.jobList = this.jobList.concat(jobObj); + } } }); @@ -252,8 +281,12 @@ export class JobsListComponent implements OnInit { this.refresh$.next(""); } + jobsNumber() : number { + return this.jobsDataSource.data.length; + } + hasJobs(): boolean { - return this.jobs().length > 0; + return this.jobsNumber() > 0; } }