Refactoring some code
[ric-plt/rtmgr.git] / cmd / rtmgr.go
index e4f76d8..834df26 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
 
 import (
 package main
 
 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/nbi/restful"
+       "routing-manager/pkg/rtmgr"
+       "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)
+
+       go func() {
+               restful.LaunchRest(xapp.Config.GetString("nbiurl"))
+       }()
+
+       nbi.Serve()
        os.Exit(0)
 }
        os.Exit(0)
 }