Open RMR connection in a new thread
[ric-plt/rtmgr.git] / cmd / rtmgr.go
index 093da71..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() {
-       // TODO: arguments should be validated (filename; xm-url; sbi-if)
-       args = make(map[string]*string)
-       args["nbi"] = flag.String("nbi", "httpGetter", "Northbound interface module to be used. Valid values are: 'httpGetter'")
-       args["sbi"] = flag.String("sbi", "nngpush", "Southbound interface module to be used. Valid values are: 'nngpush | nngpub'")
-       args["rpe"] = flag.String("rpe", "rmrpush", "Route Policy Engine to be used. Valid values are: 'rmrpush | rmrpub'")
-       args["sdl"] = flag.String("sdl", "file", "Datastore enginge to be used. Valid values are: 'file'")
-       args["xm-url"] = flag.String("xm-url", "http://localhost:3000/xapps", "HTTP URL where xApp Manager exposes the entire xApp List")
-       args["sbi-if"] = flag.String("sbi-if", "0.0.0.0", "IPv4 address of interface where Southbound socket to be opened")
-       args["filename"] = flag.String("filename", "/db/rt.json", "Absolute path of file where the route information to be stored")
-       args["loglevel"] = flag.String("loglevel", "INFO", "INFO | WARN | ERROR | DEBUG")
-       flag.Parse()
+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
-       var nbii *nbi.NbiEngineConfig
-       var sbii *sbi.SbiEngineConfig
-       var sdli *sdl.SdlEngineConfig
-       var rpei *rpe.RpeEngineConfig
-       if nbii, err = nbi.GetNbi(*args["nbi"]); err == nil && nbii != nil {
-               if sbii, err = sbi.GetSbi(*args["sbi"]); err == nil && sbii != nil {
-                       if sdli, err = sdl.GetSdl(*args["sdl"]); err == nil && sdli != nil {
-                               if rpei, err = rpe.GetRpe(*args["rpe"]); err == nil && rpei != nil {
-                                       return nbii, sbii, sdli, rpei, nil
-                               }
-                       }
-               }
-       }
-       return nil, nil, nil, nil, err
-}
+func main() {
 
 
-func serve(nbii *nbi.NbiEngineConfig, sbii *sbi.SbiEngineConfig, sdli *sdl.SdlEngineConfig, rpei *rpe.RpeEngineConfig) {
-       err := sbii.OpenSocket(*args["sbi-if"])
-       if err != nil {
-               rtmgr.Logger.Info("fail to open pub socket due to: " + err.Error())
-               return
-       }
-       defer sbii.CloseSocket()
-       for {
-               time.Sleep(INTERVAL * time.Second)
-               data, err := nbii.BatchFetch(*args["xm-url"])
-               if err != nil {
-                       rtmgr.Logger.Error("cannot get data from " + nbii.Engine.Name + " interface dute to: " + err.Error())
-               } else {
-                       sdli.WriteAll(*args["filename"], data)
-               }
-               data, err = sdli.ReadAll(*args["filename"])
-               if err != nil || data == nil {
-                       rtmgr.Logger.Error("cannot get data from " + sdli.Engine.Name + " interface dute to: " + err.Error())
-                       continue
-               }
-               sbi.UpdateEndpointList(data, sbii)
-               policies := rpei.GeneratePolicies(rtmgr.Eps)
-               err = sbii.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"])
-       nbii, sbii, sdli, rpei, err := initRtmgr()
-       if err != nil {
-               rtmgr.Logger.Error(err.Error())
-               os.Exit(1)
-       }
-       rtmgr.Logger.Info("Start " + SERVICENAME + " service")
+       xapp.Logger.Info("Start " + SERVICENAME + " service")
        rtmgr.Eps = make(rtmgr.Endpoints)
        rtmgr.Eps = make(rtmgr.Endpoints)
-       serve(nbii, sbii, sdli, rpei)
+       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)
+       }
+
+       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)
 }