Support for NETCONF Get command to get xapp configuration in O1 client
[ric-plt/o1.git] / agent / pkg / sbi / sbi.go
index 8801dde..ad1ddb6 100755 (executable)
@@ -21,6 +21,7 @@ package sbi
 
 import (
        "bytes"
+       "encoding/json"
        "fmt"
        httptransport "github.com/go-openapi/runtime/client"
        "github.com/go-openapi/strfmt"
@@ -29,10 +30,15 @@ import (
        "strings"
        "time"
 
-       "gerrit.o-ran-sc.org/r/ric-plt/xapp-frame/pkg/xapp"
+       clientruntime "github.com/go-openapi/runtime/client"
+       "github.com/prometheus/alertmanager/api/v2/client"
+       "github.com/prometheus/alertmanager/api/v2/client/alert"
+
        apiclient "gerrit.oran-osc.org/r/ric-plt/o1mediator/pkg/appmgrclient"
        apixapp "gerrit.oran-osc.org/r/ric-plt/o1mediator/pkg/appmgrclient/xapp"
        apimodel "gerrit.oran-osc.org/r/ric-plt/o1mediator/pkg/appmgrmodel"
+
+       "gerrit.o-ran-sc.org/r/ric-plt/xapp-frame/pkg/xapp"
 )
 
 type PodStatus struct {
@@ -43,12 +49,12 @@ type PodStatus struct {
 
 var log = xapp.Logger
 
-func NewSBIClient(host, baseUrl string, prot []string, timo int) *SBIClient {
-       return &SBIClient{host, baseUrl, prot, time.Duration(timo) * time.Second}
+func NewSBIClient(appmgrAddr, alertmgrAddr string, timo int) *SBIClient {
+       return &SBIClient{appmgrAddr, alertmgrAddr, time.Duration(timo) * time.Second}
 }
 
-func (s *SBIClient) CreateTransport() *apiclient.RICAppmgr {
-       return apiclient.New(httptransport.New(s.host, s.baseUrl, s.prot), strfmt.Default)
+func (s *SBIClient) CreateTransport(host string) *apiclient.RICAppmgr {
+       return apiclient.New(httptransport.New(host, "/ric/v1/", []string{"http"}), strfmt.Default)
 }
 
 func (s *SBIClient) BuildXappDescriptor(name, namespace, release, version string) *apimodel.XappDescriptor {
@@ -64,7 +70,7 @@ func (s *SBIClient) DeployXapp(xappDesc *apimodel.XappDescriptor) error {
        params := apixapp.NewDeployXappParamsWithTimeout(s.timeout).WithXappDescriptor(xappDesc)
        log.Info("SBI: DeployXapp=%v", params)
 
-       result, err := s.CreateTransport().Xapp.DeployXapp(params)
+       result, err := s.CreateTransport(s.appmgrAddr).Xapp.DeployXapp(params)
        if err != nil {
                log.Error("SBI: DeployXapp unsuccessful: %v", err)
        } else {
@@ -82,7 +88,7 @@ func (s *SBIClient) UndeployXapp(xappDesc *apimodel.XappDescriptor) error {
        params := apixapp.NewUndeployXappParamsWithTimeout(s.timeout).WithXAppName(name)
        log.Info("SBI: UndeployXapp=%v", params)
 
-       result, err := s.CreateTransport().Xapp.UndeployXapp(params)
+       result, err := s.CreateTransport(s.appmgrAddr).Xapp.UndeployXapp(params)
        if err != nil {
                log.Error("SBI: UndeployXapp unsuccessful: %v", err)
        } else {
@@ -93,7 +99,7 @@ func (s *SBIClient) UndeployXapp(xappDesc *apimodel.XappDescriptor) error {
 
 func (s *SBIClient) GetDeployedXapps() error {
        params := apixapp.NewGetAllXappsParamsWithTimeout(s.timeout)
-       result, err := s.CreateTransport().Xapp.GetAllXapps(params)
+       result, err := s.CreateTransport(s.appmgrAddr).Xapp.GetAllXapps(params)
        if err != nil {
                log.Error("GET unsuccessful: %v", err)
        } else {
@@ -116,7 +122,7 @@ func (s *SBIClient) BuildXappConfig(name, namespace string, configData interface
 
 func (s *SBIClient) ModifyXappConfig(xappConfig *apimodel.XAppConfig) error {
        params := apixapp.NewModifyXappConfigParamsWithTimeout(s.timeout).WithXAppConfig(xappConfig)
-       result, err := s.CreateTransport().Xapp.ModifyXappConfig(params)
+       result, err := s.CreateTransport(s.appmgrAddr).Xapp.ModifyXappConfig(params)
        if err != nil {
                log.Error("SBI: ModifyXappConfig unsuccessful: %v", err)
        } else {
@@ -173,11 +179,59 @@ var CommandExec = func(args string) (string, error) {
        cmd.Stdout = &stdout
        cmd.Stderr = &stderr
 
-       xapp.Logger.Debug("Running command: '%s'", cmd)
+       xapp.Logger.Debug("Running command: '%s'", strings.Join(cmd.Args, " "))
        if err := cmd.Run(); err != nil {
-               xapp.Logger.Error("Command failed (%s): %v - %s", cmd, err.Error(), stderr.String())
+               xapp.Logger.Error("Command failed (%s): %v - %s", strings.Join(cmd.Args, " "), err.Error(), stderr.String())
                return "", err
        }
        xapp.Logger.Debug("Command executed successfully!")
        return stdout.String(), nil
 }
+
+func (s *SBIClient) GetAlerts() (*alert.GetAlertsOK, error) {
+       xapp.Logger.Info("Fetching alerts ...")
+
+       cr := clientruntime.New(s.alertmgrAddr, "/api/v2", []string{"http"})
+       resp, err := client.New(cr, strfmt.Default).Alert.GetAlerts(nil)
+       if err != nil {
+               xapp.Logger.Error("Fetching alerts failed with error: %v", err)
+               return nil, err
+       }
+
+       return resp, nil
+}
+
+func (s *SBIClient) GetAllDeployedXappsConfig() ([]string, []string) {
+
+       //Trigger http rest api to appmgr to get config of all deployed xapps
+       params := apixapp.NewGetAllXappConfigParamsWithTimeout(s.timeout)
+       result, err := s.CreateTransport(s.appmgrAddr).Xapp.GetAllXappConfig(params)
+       if err != nil {
+               log.Error("GetAllDeployedXappsConfig() unsuccessful: %v", err)
+               return nil, nil
+       }
+
+       var xappCfgList []string
+       var xappNameList []string
+       var allXappCfg apimodel.AllXappConfig
+
+       allXappCfg = apimodel.AllXappConfig(result.Payload)
+       for i, xappCfg := range allXappCfg {
+               var xappName string
+               var xappJsonStrCfg string
+               xappName = string(*(xappCfg.Metadata.XappName))
+               xappJsonCfgMap := xappCfg.Config.(map[string]interface{})
+               bs, err := json.Marshal(xappJsonCfgMap)
+               if err != nil {
+                       log.Error("json marshal failure after AllXappConfig: %v", err)
+                       return nil, nil
+               }
+               xappJsonStrCfg = string(bs)
+               log.Info(" %d %s xapp config json data: %v", i, xappName, xappJsonStrCfg)
+               xappCfgList = append(xappCfgList, xappJsonStrCfg)
+               xappNameList = append(xappNameList, xappName)
+       }
+
+       return xappNameList, xappCfgList
+}
+