X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;f=webapp-frontend%2Fsrc%2Fapp%2Fac-xapp%2Fac-xapp.component.ts;h=1f1d61e2f64fc0aef9322a8079106428d376fdef;hb=refs%2Fchanges%2F72%2F2272%2F8;hp=1e0df3b5955340cce56a0b1b85d46991a9601a47;hpb=44203c43bb16a87eb54cc97431a026e111842c97;p=portal%2Fric-dashboard.git diff --git a/webapp-frontend/src/app/ac-xapp/ac-xapp.component.ts b/webapp-frontend/src/app/ac-xapp/ac-xapp.component.ts index 1e0df3b5..1f1d61e2 100644 --- a/webapp-frontend/src/app/ac-xapp/ac-xapp.component.ts +++ b/webapp-frontend/src/app/ac-xapp/ac-xapp.component.ts @@ -18,63 +18,79 @@ * ========================LICENSE_END=================================== */ -import { Component, OnInit } from '@angular/core'; -import { FormGroup, FormControl, Validators } from '@angular/forms'; -import { ACAdmissionIntervalControl, ACAdmissionIntervalControlAck } from '../interfaces/ac-xapp.types'; +import { HttpErrorResponse } from '@angular/common/http'; +import { Component, OnDestroy, OnInit } from '@angular/core'; +import { FormControl, FormGroup, Validators } from '@angular/forms'; +import { Subscription } from 'rxjs'; +import { ACAdmissionIntervalControl } from '../interfaces/ac-xapp.types'; +import { RicInstance } from '../interfaces/dashboard.types'; import { ACXappService } from '../services/ac-xapp/ac-xapp.service'; +import { InstanceSelectorService } from '../services/instance-selector/instance-selector.service'; import { ErrorDialogService } from '../services/ui/error-dialog.service'; -import { NotificationService } from './../services/ui/notification.service'; -import { HttpErrorResponse } from '@angular/common/http'; +import { NotificationService } from '../services/ui/notification.service'; @Component({ selector: 'rd-ac-xapp', templateUrl: './ac-xapp.component.html', styleUrls: ['./ac-xapp.component.scss'] }) -export class AcXappComponent implements OnInit { +export class AcXappComponent implements OnInit, OnDestroy { private acForm: FormGroup; + private instanceChange: Subscription; + private instanceKey: string; constructor( private acXappService: ACXappService, private errorDialogService: ErrorDialogService, - private notificationService: NotificationService) { } + private notificationService: NotificationService, + public instanceSelectorService: InstanceSelectorService, ) { } ngOnInit() { - const windowLengthPattern = /^([0-9]{1}|[1-5][0-9]{1}|60)$/; - const blockingRatePattern = /^([0-9]{1,2}|100)$/; - const triggerPattern = /^([0-9]+)$/; this.acForm = new FormGroup({ // Names must match the ACAdmissionIntervalControl interface enforce: new FormControl(true, [Validators.required]), - window_length: new FormControl('', [Validators.required, Validators.pattern(windowLengthPattern)]), - blocking_rate: new FormControl('', [Validators.required, Validators.pattern(blockingRatePattern)]), - trigger_threshold: new FormControl('', [Validators.required, Validators.pattern(triggerPattern)]) + class: new FormControl('', [Validators.required, Validators.min(1), Validators.max(256)]), + window_length: new FormControl('', [Validators.required, Validators.min(15), Validators.max(300)]), + blocking_rate: new FormControl('', [Validators.required, Validators.min(0), Validators.max(100)]), + trigger_threshold: new FormControl('', [Validators.required, Validators.min(1)]) }); - // TODO: show pending action indicator - this.acXappService.getPolicy().subscribe((res: ACAdmissionIntervalControl) => { - this.acForm.controls['enforce'].setValue(res.enforce); - this.acForm.controls['window_length'].setValue(res.window_length); - this.acForm.controls['blocking_rate'].setValue(res.blocking_rate); - this.acForm.controls['trigger_threshold'].setValue(res.trigger_threshold); - // TODO: clear pending action indicator - }, - (error: HttpErrorResponse) => { - // TODO: clear pending action indicator - this.errorDialogService.displayError(error.message); - }); + + this.instanceChange = this.instanceSelectorService.getSelectedInstance().subscribe((instance: RicInstance) => { + if (instance.key) { + // TODO: show pending action indicator + this.instanceKey = instance.key; + this.acXappService.getPolicy(instance.key).subscribe((res: ACAdmissionIntervalControl) => { + this.acForm.controls['class'].setValue(res.class); + this.acForm.controls['enforce'].setValue(res.enforce); + this.acForm.controls['window_length'].setValue(res.window_length); + this.acForm.controls['blocking_rate'].setValue(res.blocking_rate); + this.acForm.controls['trigger_threshold'].setValue(res.trigger_threshold); + // TODO: clear pending action indicator + }, + (error: HttpErrorResponse) => { + // TODO: clear pending action indicator + this.errorDialogService.displayError(error.message); + }); + } + }); + } + + ngOnDestroy() { + this.instanceChange.unsubscribe(); } updateAc = (acFormValue: ACAdmissionIntervalControl) => { if (this.acForm.valid) { // convert strings to numbers using the plus operator const acFormValueConverted = { + class: +acFormValue.class, enforce: acFormValue.enforce, window_length: +acFormValue.window_length, blocking_rate: +acFormValue.blocking_rate, trigger_threshold: +acFormValue.trigger_threshold }; - this.acXappService.putPolicy(acFormValueConverted).subscribe( + this.acXappService.putPolicy(this.instanceKey, acFormValueConverted).subscribe( response => { if (response.status === 200) { this.notificationService.success('AC update policy succeeded!');