Open RMR connection in a new thread
[ric-plt/rtmgr.git] / pkg / sdl / file.go
index 7ac6594..28274fc 100644 (file)
@@ -34,9 +34,9 @@ import (
        "gerrit.o-ran-sc.org/r/ric-plt/xapp-frame/pkg/xapp"
        "io/ioutil"
        "os"
-       "strings"
-       "routing-manager/pkg/rtmgr"
        "routing-manager/pkg/models"
+       "routing-manager/pkg/rtmgr"
+       "strings"
 )
 
 /*
@@ -113,101 +113,104 @@ func (f *File) WriteXApps(file string, xApps *[]rtmgr.XApp) error {
        return nil
 }
 
-func (f *File) WriteNewE2TInstance(file string, E2TInst *rtmgr.E2TInstance,meiddata string) error {
-        xapp.Logger.Debug("Invoked sdl.WriteNewE2TInstance")
-        xapp.Logger.Debug("file.WriteNewE2TInstance writes into file: " + file)
-        xapp.Logger.Debug("file.WriteNewE2TInstance writes data: %v", *E2TInst)
-
-        ricData, err := NewFile().ReadAll(file)
-        if err != nil {
-                xapp.Logger.Error("cannot get data from sdl interface due to: " + err.Error())
-                return errors.New("cannot read full ric data to modify xApps data, due to:  " + err.Error())
-        }
-        ricData.E2Ts[E2TInst.Fqdn] = *E2TInst
-       if (len(meiddata) > 0){
-           ricData.MeidMap = []string {meiddata}
-        } else {
-           ricData.MeidMap = []string {}
-       }
+func (f *File) WriteNewE2TInstance(file string, E2TInst *rtmgr.E2TInstance, meiddata string) error {
+       xapp.Logger.Debug("Invoked sdl.WriteNewE2TInstance")
+       xapp.Logger.Debug("file.WriteNewE2TInstance writes into file: " + file)
+       xapp.Logger.Debug("file.WriteNewE2TInstance writes data: %v", *E2TInst)
 
+       ricData, err := NewFile().ReadAll(file)
+       if err != nil {
+               xapp.Logger.Error("cannot get data from sdl interface due to: " + err.Error())
+               return errors.New("cannot read full ric data to modify xApps data, due to:  " + err.Error())
+       }
+       ricData.E2Ts[E2TInst.Fqdn] = *E2TInst
+       if len(meiddata) > 0 {
+               ricData.MeidMap = append(ricData.MeidMap, meiddata)
+       }
+       /*{
+                   ricData.MeidMap = []string {meiddata}
+               }
+                       else {
+                   ricData.MeidMap = []string {}
+               }*/
 
-        byteValue, err := json.Marshal(ricData)
-        if err != nil {
-                return errors.New("cannot convert data due to: " + err.Error())
-        }
-        err = ioutil.WriteFile(file, byteValue, 0644)
-        if err != nil {
-                return errors.New("cannot write file due to: " + err.Error())
-        }
-        return nil
+       byteValue, err := json.Marshal(ricData)
+       if err != nil {
+               return errors.New("cannot convert data due to: " + err.Error())
+       }
+       err = ioutil.WriteFile(file, byteValue, 0644)
+       if err != nil {
+               return errors.New("cannot write file due to: " + err.Error())
+       }
+       return nil
 }
 
 func (f *File) WriteAssRANToE2TInstance(file string, rane2tmap models.RanE2tMap) error {
-        xapp.Logger.Debug("Invoked sdl.WriteAssRANToE2TInstance")
-        xapp.Logger.Debug("file.WriteAssRANToE2TInstance writes into file: " + file)
-        xapp.Logger.Debug("file.WriteAssRANToE2TInstance writes data: %v", rane2tmap)
+       xapp.Logger.Debug("Invoked sdl.WriteAssRANToE2TInstance")
+       xapp.Logger.Debug("file.WriteAssRANToE2TInstance writes into file: " + file)
+       xapp.Logger.Debug("file.WriteAssRANToE2TInstance writes data: %v", rane2tmap)
 
-        ricData, err := NewFile().ReadAll(file)
-        if err != nil {
-                xapp.Logger.Error("cannot get data from sdl interface due to: " + err.Error())
-                return errors.New("cannot read full ric data to modify xApps data, due to:  " + err.Error())
-        }
+       ricData, err := NewFile().ReadAll(file)
+       if err != nil {
+               xapp.Logger.Error("cannot get data from sdl interface due to: " + err.Error())
+               return errors.New("cannot read full ric data to modify xApps data, due to:  " + err.Error())
+       }
 
-       ricData.MeidMap = []string{}
+       //ricData.MeidMap = []string{}
        for _, element := range rane2tmap {
                xapp.Logger.Info("data received")
-               var str,meidar string
+               var str, meidar string
                for _, meid := range element.RanNamelist {
-                   meidar += meid + " "
+                       meidar += meid + " "
                }
-               str = "mme_ar|" + *element.E2TAddress + "|" + strings.TrimSuffix(meidar," ")
-               ricData.MeidMap = append(ricData.MeidMap,str)
+               str = "mme_ar|" + *element.E2TAddress + "|" + strings.TrimSuffix(meidar, " ")
+               ricData.MeidMap = append(ricData.MeidMap, str)
 
                for key, _ := range ricData.E2Ts {
                        if key == *element.E2TAddress {
                                var estObj rtmgr.E2TInstance
                                estObj = ricData.E2Ts[key]
                                estObj.Ranlist = append(ricData.E2Ts[key].Ranlist, element.RanNamelist...)
-                               ricData.E2Ts[key]= estObj
+                               ricData.E2Ts[key] = estObj
                        }
                }
        }
 
        byteValue, err := json.Marshal(ricData)
-        if err != nil {
-                return errors.New("cannot convert data due to: " + err.Error())
-        }
-        err = ioutil.WriteFile(file, byteValue, 0644)
-        if err != nil {
-                return errors.New("cannot write file due to: " + err.Error())
-        }
-        return nil
+       if err != nil {
+               return errors.New("cannot convert data due to: " + err.Error())
+       }
+       err = ioutil.WriteFile(file, byteValue, 0644)
+       if err != nil {
+               return errors.New("cannot write file due to: " + err.Error())
+       }
+       return nil
 }
 
 func (f *File) WriteDisAssRANFromE2TInstance(file string, disassranmap models.RanE2tMap) error {
-        xapp.Logger.Debug("Invoked sdl.WriteDisAssRANFromE2TInstance")
-        xapp.Logger.Debug("file.WriteDisAssRANFromE2TInstance writes into file: " + file)
-        xapp.Logger.Debug("file.WriteDisAssRANFromE2TInstance writes data: %v", disassranmap)
-
-        ricData, err := NewFile().ReadAll(file)
-        if err != nil {
-                xapp.Logger.Error("cannot get data from sdl interface due to: " + err.Error())
-                return errors.New("cannot read full ric data to modify xApps data, due to:  " + err.Error())
-        }
-
-       var str,meiddel,meiddisdel string
-       ricData.MeidMap = []string{}
+       xapp.Logger.Debug("Invoked sdl.WriteDisAssRANFromE2TInstance")
+       xapp.Logger.Debug("file.WriteDisAssRANFromE2TInstance writes into file: " + file)
+       xapp.Logger.Debug("file.WriteDisAssRANFromE2TInstance writes data: %v", disassranmap)
+
+       ricData, err := NewFile().ReadAll(file)
+       if err != nil {
+               xapp.Logger.Error("cannot get data from sdl interface due to: " + err.Error())
+               return errors.New("cannot read full ric data to modify xApps data, due to:  " + err.Error())
+       }
+
+       var str, meiddel, meiddisdel string
+       //ricData.MeidMap = []string{}
        for _, element := range disassranmap {
                xapp.Logger.Info("data received")
                for _, meid := range element.RanNamelist {
-                   meiddisdel += meid + " "
+                       meiddisdel += meid + " "
+               }
+               if len(element.RanNamelist) > 0 {
+                       str = "mme_del|" + strings.TrimSuffix(meiddisdel, " ")
+                       ricData.MeidMap = append(ricData.MeidMap, str)
                }
-               if ( len(element.RanNamelist) > 0 ) {
-                   str = "mme_del|" + strings.TrimSuffix(meiddisdel," ")
-                   ricData.MeidMap = append(ricData.MeidMap,str)
-               }
                e2taddress_key := *element.E2TAddress
-               //Check whether the provided E2T Address is available in SDL as a key. 
+               //Check whether the provided E2T Address is available in SDL as a key.
                //If exist, proceed further to check RAN list, Otherwise move to next E2T Instance
                if _, exist := ricData.E2Ts[e2taddress_key]; exist {
                        var estObj rtmgr.E2TInstance
@@ -215,13 +218,13 @@ func (f *File) WriteDisAssRANFromE2TInstance(file string, disassranmap models.Ra
                        // If RAN list is empty, then routing manager assumes that all RANs attached associated to the particular E2T Instance to be removed.
                        if len(element.RanNamelist) == 0 {
                                xapp.Logger.Debug("RAN List is empty. So disassociating all RANs from the E2T Instance: %v ", *element.E2TAddress)
-                       for _, meid := range estObj.Ranlist {
-                       meiddel += meid + " "
-                       }
-                       str = "mme_del|" + strings.TrimSuffix(meiddel," ")
-                       ricData.MeidMap = append(ricData.MeidMap,str)
+                               for _, meid := range estObj.Ranlist {
+                                       meiddel += meid + " "
+                               }
+                               str = "mme_del|" + strings.TrimSuffix(meiddel, " ")
+                               ricData.MeidMap = append(ricData.MeidMap, str)
 
-                       estObj.Ranlist = []string{}
+                               estObj.Ranlist = []string{}
                        } else {
                                xapp.Logger.Debug("Remove only selected rans from E2T Instance: %v and %v ", ricData.E2Ts[e2taddress_key].Ranlist, element.RanNamelist)
                                for _, disRanValue := range element.RanNamelist {
@@ -234,20 +237,20 @@ func (f *File) WriteDisAssRANFromE2TInstance(file string, disassranmap models.Ra
                                        }
                                }
                        }
-                       ricData.E2Ts[e2taddress_key]= estObj
+                       ricData.E2Ts[e2taddress_key] = estObj
                }
        }
 
        xapp.Logger.Debug("Final data after disassociate: %v", ricData)
 
        byteValue, err := json.Marshal(ricData)
-        if err != nil {
-                return errors.New("cannot convert data due to: " + err.Error())
-        }
-        err = ioutil.WriteFile(file, byteValue, 0644)
-        if err != nil {
-                return errors.New("cannot write file due to: " + err.Error())
-        }
+       if err != nil {
+               return errors.New("cannot convert data due to: " + err.Error())
+       }
+       err = ioutil.WriteFile(file, byteValue, 0644)
+       if err != nil {
+               return errors.New("cannot write file due to: " + err.Error())
+       }
        return nil
 }
 
@@ -258,46 +261,45 @@ func (f *File) WriteDeleteE2TInstance(file string, E2TInst *models.E2tDeleteData
 
        ricData, err := NewFile().ReadAll(file)
        if err != nil {
-               xapp.Logger.Error("cannot get data from sdl interface due to: " + err.Error())
-               return errors.New("cannot read full ric data to modify xApps data, due to:  " + err.Error())
+               xapp.Logger.Error("cannot get data from sdl interface due to: " + err.Error())
+               return errors.New("cannot read full ric data to modify xApps data, due to:  " + err.Error())
        }
 
-
-       ricData.MeidMap = []string {}
-       var delrow,meiddel string
-       if(len(E2TInst.RanNamelistTobeDissociated)>0) {
-           for _, meid := range E2TInst.RanNamelistTobeDissociated {
+       //ricData.MeidMap = []string{}
+       var delrow, meiddel string
+       if len(E2TInst.RanNamelistTobeDissociated) > 0 {
+               for _, meid := range E2TInst.RanNamelistTobeDissociated {
                        meiddel += meid + " "
                }
-           delrow = "mme_del|" + strings.TrimSuffix(meiddel," ")
-           ricData.MeidMap = append(ricData.MeidMap,delrow)
+               delrow = "mme_del|" + strings.TrimSuffix(meiddel, " ")
+               ricData.MeidMap = append(ricData.MeidMap, delrow)
        } else {
-             if(len(ricData.E2Ts[*E2TInst.E2TAddress].Ranlist) > 0) {
-                 for _, meid := range ricData.E2Ts[*E2TInst.E2TAddress].Ranlist {
-                       meiddel += meid + " "
-                 }
-                 delrow = "mme_del|" + strings.TrimSuffix(meiddel," ")
-                 ricData.MeidMap = append(ricData.MeidMap,delrow)
-             }
+               if len(ricData.E2Ts[*E2TInst.E2TAddress].Ranlist) > 0 {
+                       for _, meid := range ricData.E2Ts[*E2TInst.E2TAddress].Ranlist {
+                               meiddel += meid + " "
+                       }
+                       delrow = "mme_del|" + strings.TrimSuffix(meiddel, " ")
+                       ricData.MeidMap = append(ricData.MeidMap, delrow)
+               }
        }
 
        delete(ricData.E2Ts, *E2TInst.E2TAddress)
 
        for _, element := range E2TInst.RanAssocList {
-               var str,meidar string
+               var str, meidar string
                xapp.Logger.Info("data received")
                for _, meid := range element.RanNamelist {
                        meidar = meid + " "
                }
-               str = "mme_ar|" + *element.E2TAddress + "|" + strings.TrimSuffix(meidar," ")
-               ricData.MeidMap = append(ricData.MeidMap,str)
+               str = "mme_ar|" + *element.E2TAddress + "|" + strings.TrimSuffix(meidar, " ")
+               ricData.MeidMap = append(ricData.MeidMap, str)
                key := *element.E2TAddress
 
                if val, ok := ricData.E2Ts[key]; ok {
                        var estObj rtmgr.E2TInstance
                        estObj = val
                        estObj.Ranlist = append(ricData.E2Ts[key].Ranlist, element.RanNamelist...)
-                       ricData.E2Ts[key]= estObj
+                       ricData.E2Ts[key] = estObj
                } else {
                        xapp.Logger.Error("file.WriteDeleteE2TInstance E2T instance is not found for provided E2TAddress : %v", errors.New(key).Error())
                }
@@ -306,11 +308,11 @@ func (f *File) WriteDeleteE2TInstance(file string, E2TInst *models.E2tDeleteData
 
        byteValue, err := json.Marshal(ricData)
        if err != nil {
-               return errors.New("cannot convert data due to: " + err.Error())
+               return errors.New("cannot convert data due to: " + err.Error())
        }
        err = ioutil.WriteFile(file, byteValue, 0644)
        if err != nil {
-               return errors.New("cannot write file due to: " + err.Error())
+               return errors.New("cannot write file due to: " + err.Error())
        }
        return nil
 }