improve dashboard UI
[portal/ric-dashboard.git] / webapp-frontend / src / app / services / ac-xapp / ac-xapp.service.ts
index 740fcbc..dbe4cd6 100644 (file)
@@ -2,14 +2,14 @@
  * ========================LICENSE_START=================================
  * O-RAN-SC
  * %%
- * Copyright (C) 2019 AT&T Intellectual Property and Nokia
+ * Copyright (C) 2019 AT&T Intellectual Property
  * %%
  * 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.
  * ========================LICENSE_END===================================
  */
 
- import { Injectable } from '@angular/core';
- import { HttpClient } from '@angular/common/http';
- import { Observable } from 'rxjs';
+import { HttpClient } from '@angular/common/http';
+import { Injectable } from '@angular/core';
+import { Observable } from 'rxjs';
+import { map } from 'rxjs/operators';
 import { ACAdmissionIntervalControl, ACAdmissionIntervalControlAck } from '../../interfaces/ac-xapp.types';
 import { DashboardSuccessTransport } from '../../interfaces/dashboard.types';
+import { DashboardService } from '../dashboard/dashboard.service';
 
+/**
+ * Services for calling the Dashboard's A1 endpoints to get/put AC policies.
+ */
 @Injectable({
   providedIn: 'root'
 })
-export class AcXappService {
+export class ACXappService {
+
+  private component = 'a1-p';
+  private policyTypePath = 'poltype';
+  private policyInstPath = 'polinst';
+  private acPolicyType = '21000';
+  private acPolicyInst = 'admission_control_policy';
 
-  private basePath = 'api/xapp/ac/';
+  constructor(
+    private dashboardSvc: DashboardService,
+    private httpClient: HttpClient) {
+  }
 
-  constructor(private httpClient: HttpClient) {
-    // injects to variable httpClient
+  /**
+   * Gets AC client version details
+   * @returns Observable that yields a String
+   */
+  getVersion(instanceKey: string): Observable<string> {
+    const path = this.dashboardSvc.buildPath(this.component, null, 'version');
+    return this.httpClient.get<DashboardSuccessTransport>(path).pipe(
+      // Extract the string here
+      map(res => res['data'])
+    );
   }
 
   /**
-   * Gets A1 Mediator client version details
-   * @returns Observable that should yield a SuccessTransport object
+   * Gets admission control policy.
+   * @returns Observable that yields an ACAdmissionIntervalControl
    */
-  getVersion() {
-    // Remember that AC traffic goes via A1!
-    return this.httpClient.get<DashboardSuccessTransport>(this.basePath + 'version');
+  getPolicy(instanceKey: string): Observable<ACAdmissionIntervalControl> {
+    const path = this.dashboardSvc.buildPath(this.component, instanceKey, this.policyTypePath, this.acPolicyType,
+      this.policyInstPath, this.acPolicyInst);
+    return this.httpClient.get<ACAdmissionIntervalControl>(path);
   }
 
   /**
-   * Puts control admission time parameters to AC via A1
+   * Puts admission control policy.
    * @param policy an instance of ACAdmissionIntervalControl
-   * @returns Observable that should yield an ACAdmissionIntervalControlAck
+   * @returns Observable that yields a response code, no data
    */
-  putCaTime(policy: ACAdmissionIntervalControl): Observable<ACAdmissionIntervalControlAck> {
-    return this.httpClient.put<ACAdmissionIntervalControlAck>(this.basePath + 'catime', policy);
+  putPolicy(instanceKey: string, policy: ACAdmissionIntervalControl): Observable<any> {
+    const path = this.dashboardSvc.buildPath(this.component, instanceKey, this.policyTypePath, this.acPolicyType,
+      this.policyInstPath, this.acPolicyInst);
+    return this.httpClient.put<ACAdmissionIntervalControlAck>(path, policy, { observe: 'response' });
   }
 
 }