-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 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())
- }
- }
+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)
+ }()