Open RMR connection in a new thread
[ric-plt/rtmgr.git] / cmd / rtmgr.go
index e4f76d8..c8ad5c6 100644 (file)
    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    See the License for the specific language governing permissions and
    limitations under the License.
    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    See the License for the specific language governing permissions and
    limitations under the License.
+
+
+   This source code is part of the near-RT RIC (RAN Intelligent Controller)
+   platform project (RICP).
+
+
 ==================================================================================
 */
 /*
 ==================================================================================
 */
 /*
 */
 package main
 
 */
 package main
 
+//TODO: change flag to pflag (won't need any argument parse)
+
 import (
 import (
-       "flag"
-       "nbi"
+       "gerrit.o-ran-sc.org/r/ric-plt/xapp-frame/pkg/xapp"
        "os"
        "os"
-       "rpe"
-       "rtmgr"
-       "sbi"
-       "sdl"
+       "os/signal"
+       "routing-manager/pkg/nbi"
+       //"routing-manager/pkg/rpe"
+       "routing-manager/pkg/rtmgr"
+       //"routing-manager/pkg/sbi"
+       //"routing-manager/pkg/sdl"
+       "syscall"
        "time"
 )
 
 const SERVICENAME = "rtmgr"
        "time"
 )
 
 const SERVICENAME = "rtmgr"
-const INTERVAL time.Duration = 2
 
 
-var (
-       args *map[string]string
-)
-
-func parseArgs() {
-       a := make(map[string]string)
-       xmgeturl := flag.String("nbi-httpget", "http://localhost:3000/xapps", "xApp Manager URL")
-       nngpubsock := flag.String("sbi-nngsub", "tcp://0.0.0.0:4560", "NNG Subsciption Socket URI")
-       file := flag.String("sdl-file", "/db/rt.json", "Local file store location")
-       rpename := flag.String("rpe", "rmr", "Policy Engine Module name")
-       loglevel := flag.String("loglevel", "INFO", "INFO | WARN | ERROR | DEBUG")
-       flag.Parse()
-       if (*xmgeturl) != "" {
-               a["xmurl"] = (*xmgeturl)
-               a["nbiname"] = "httpGetter"
-       }
-       if (*nngpubsock) != "" {
-               a["socketuri"] = (*nngpubsock)
-               a["sbiname"] = "nngpub"
-       }
-       if (*file) != "" {
-               a["file"] = (*file)
-               a["sdlname"] = "file"
-       }
-       a["rpename"] = (*rpename)
-       a["loglevel"] = (*loglevel)
-       args = &a
+func SetupCloseHandler() {
+       c := make(chan os.Signal, 2)
+       signal.Notify(c, os.Interrupt, syscall.SIGTERM)
+       go func() {
+               <-c
+               xapp.Logger.Info("\r- Ctrl+C pressed in Terminal")
+               os.Exit(0)
+       }()
 }
 
 }
 
-func initRtmgr() (*nbi.NbiEngineConfig, *sbi.SbiEngineConfig, *sdl.SdlEngineConfig, *rpe.RpeEngineConfig, error) {
-       var err error
-       if nbi, err := nbi.GetNbi((*args)["nbiname"]); err == nil && nbi != nil {
-               if sbi, err := sbi.GetSbi((*args)["sbiname"]); err == nil && sbi != nil {
-                       if sdl, err := sdl.GetSdl((*args)["sdlname"]); err == nil && sdl != nil {
-                               if rpe, err := rpe.GetRpe((*args)["rpename"]); err == nil && rpe != nil {
-                                       return nbi, sbi, sdl, rpe, nil
-                               }
-                       }
-               }
-       }
-       return nil, nil, nil, nil, err
-}
+func main() {
 
 
-func serve(nbi *nbi.NbiEngineConfig, sbi *sbi.SbiEngineConfig, sdl *sdl.SdlEngineConfig, rpe *rpe.RpeEngineConfig) {
-       err := sbi.OpenSocket((*args)["socketuri"])
-       if err != nil {
-               rtmgr.Logger.Info("fail to open pub socket due to: " + err.Error())
-               return
-       }
-       defer sbi.CloseSocket()
-       for {
-               time.Sleep(INTERVAL * time.Second)
-               data, err := nbi.BatchFetch((*args)["xmurl"])
-               if err != nil {
-                       rtmgr.Logger.Error("cannot get data from " + nbi.Engine.Name + " interface dute to: " + err.Error())
-               } else {
-                       sdl.WriteAll((*args)["file"], data)
-               }
-               data, err = sdl.ReadAll((*args)["file"])
-               if err != nil || data == nil {
-                       rtmgr.Logger.Error("cannot get data from " + sdl.Engine.Name + " interface dute to: " + err.Error())
-                       continue
-               }
-               policies := rpe.GeneratePolicies(data)
-               err = sbi.DistributeAll(policies)
-               if err != nil {
-                       rtmgr.Logger.Error("routing rable cannot be published due to: " + err.Error())
-               }
-       }
-}
+       SetupCloseHandler()
 
 
-func main() {
-       parseArgs()
-       rtmgr.SetLogLevel((*args)["loglevel"])
-       nbi, sbi, sdl, rpe, err := initRtmgr()
-       if err != nil {
-               rtmgr.Logger.Error(err.Error())
-               os.Exit(1)
+       xapp.Logger.Info("Start " + SERVICENAME + " service")
+       rtmgr.Eps = make(rtmgr.Endpoints)
+       rtmgr.Mtype = make(rtmgr.MessageTypeList)
+       rtmgr.Rtmgr_ready = false
+       rtmgr.RMRConnStatus = make(map[string]bool)
+
+       // RMR thread is starting port: 4560
+       c := nbi.NewControl()
+       go c.Run()
+
+       // Waiting for RMR to be ready
+       time.Sleep(time.Duration(2) * time.Second)
+       for xapp.Rmr.IsReady() == false {
+               time.Sleep(time.Duration(2) * time.Second)
        }
        }
-       rtmgr.Logger.Info("Start " + SERVICENAME + " service")
-       serve(nbi, sbi, sdl, rpe)
+
+       dummy_whid := int(xapp.Rmr.Openwh("rtmgr:4560"))
+       xapp.Logger.Info("created dummy Wormhole ID for routingmanager and dummy_whid :%d", dummy_whid)
+
+       nbi.Serve()
        os.Exit(0)
 }
        os.Exit(0)
 }