Routing manager v0.3.3
[ric-plt/rtmgr.git] / pkg / sbi / sbi.go
index a2da825..09d9381 100644 (file)
@@ -1,4 +1,5 @@
 /*
+w
 ==================================================================================
   Copyright (c) 2019 AT&T Intellectual Property.
   Copyright (c) 2019 Nokia
@@ -26,51 +27,117 @@ package sbi
 
 import (
        "errors"
-       "fmt"
-       "rtmgr"
+        "strconv"
+       "routing-manager/pkg/rtmgr"
 )
 
+const DEFAULT_NNG_PUBSUB_SOCKET_PREFIX = "tcp://"
+const DEFAULT_NNG_PUBSUB_SOCKET_NUMBER = 4560
+const DEFAULT_NNG_PIPELINE_SOCKET_PREFIX = "tcp://"
+const DEFAULT_NNG_PIPELINE_SOCKET_NUMBER = 4561
+const PLATFORMTYPE = "platformcomponenttype"
+
 var (
        SupportedSbis = []*SbiEngineConfig{
                &SbiEngineConfig{
-                       SbiEngine{
-                               Name:     "nngpub",
-                               Version:  "v1",
-                               Protocol: "nngpubsub",
-                       },
-                       openSocket(openNngPub),
-                       closeSocket(closeNngPub),
-                       distributeAll(publishAll),
-                       true,
-               },
+                        Name:     "nngpush",
+                        Version:  "v1",
+                        Protocol: "nngpipeline",
+                        Instance: NewNngPush(),
+                        IsAvailable: true,
+                },
                &SbiEngineConfig{
-                       SbiEngine{
-                               Name:     "nngpush",
-                               Version:  "v1",
-                               Protocol: "nngpipeline",
-                       },
-                       openSocket(nil),
-                       closeSocket(nil),
-                       distributeAll(nil),
-                       false,
-               },
+                        Name:     "nngpub",
+                        Version:  "v1",
+                        Protocol: "nngpubsub",
+                        Instance: NewNngPub(),
+                        IsAvailable: true,
+                },
        }
 )
 
-func ListSbis() {
-       fmt.Printf("SBI:\n")
+func GetSbi(sbiName string) (SbiEngine, error) {
        for _, sbi := range SupportedSbis {
-               if sbi.IsAvailable {
-                       rtmgr.Logger.Info(sbi.Engine.Name + "/" + sbi.Engine.Version)
+               if sbi.Name == sbiName && sbi.IsAvailable {
+                       return sbi.Instance, nil
                }
        }
+       return nil, errors.New("SBI:" + sbiName + " is not supported or still not available")
 }
 
-func GetSbi(sbiName string) (*SbiEngineConfig, error) {
-       for _, sbi := range SupportedSbis {
-               if sbi.Engine.Name == sbiName && sbi.IsAvailable {
-                       return sbi, nil
-               }
-       }
-       return nil, errors.New("SBI:" + sbiName + "is not supported or still not a available")
+type Sbi struct {
+
+}
+
+func (s *Sbi) pruneEndpointList(sbii SbiEngine) {
+        for _, ep := range rtmgr.Eps {
+                if !ep.Keepalive {
+                       rtmgr.Logger.Debug("deleting %v",ep)
+                       sbii.DeleteEndpoint(ep)
+                        delete(rtmgr.Eps, ep.Uuid)
+                } else {
+                        rtmgr.Eps[ep.Uuid].Keepalive = false
+                }
+        }
+}
+
+func (s *Sbi) updateEndpoints(rcs *rtmgr.RicComponents, sbii SbiEngine) {
+       for _, xapp := range (*rcs).Xapps {
+                for _, instance := range xapp.Instances {
+                        uuid := instance.Ip + ":" + strconv.Itoa(int(instance.Port))
+                        if _, ok := rtmgr.Eps[uuid]; ok {
+                                rtmgr.Eps[uuid].Keepalive = true
+                        } else {
+                                ep := &rtmgr.Endpoint{
+                                        uuid,
+                                        instance.Name,
+                                        xapp.Name,
+                                        instance.Ip,
+                                        instance.Port,
+                                        instance.TxMessages,
+                                        instance.RxMessages,
+                                        nil,
+                                        false,
+                                        true,
+                                }
+                                if err := sbii.AddEndpoint(ep); err != nil {
+                                        rtmgr.Logger.Error("can't create socket for endpoint: " + ep.Name + " due to:" + err.Error())
+                                        continue
+                                }
+                                rtmgr.Eps[uuid] = ep
+                        }
+                }
+        }
+       s.updatePlatformEndpoints(&((*rcs).Pcs), sbii)
+        s.pruneEndpointList(sbii)
 }
+
+func (s *Sbi ) updatePlatformEndpoints(pcs *rtmgr.PlatformComponents, sbii SbiEngine) {
+       rtmgr.Logger.Debug("updatePlatformEndpoints invoked. PCS: %v", *pcs)
+        for _, pc := range *pcs {
+                uuid := pc.Fqdn + ":" + strconv.Itoa(int(pc.Port))
+                if _, ok := rtmgr.Eps[uuid]; ok {
+                        rtmgr.Eps[uuid].Keepalive = true
+                } else {
+                        ep := &rtmgr.Endpoint{
+                                uuid,
+                                pc.Name,
+                                PLATFORMTYPE,
+                                pc.Fqdn,
+                                pc.Port,
+                                rtmgr.PLATFORMMESSAGETYPES[pc.Name]["tx"],
+                                rtmgr.PLATFORMMESSAGETYPES[pc.Name]["rx"],
+                                nil,
+                                false,
+                                true,
+                        }
+                       rtmgr.Logger.Debug("ep created: %v",ep)
+                        if err := sbii.AddEndpoint(ep); err != nil {
+                                rtmgr.Logger.Error("can't create socket for endpoint: " + ep.Name + " due to:" + err.Error())
+                                continue
+                        }
+                        rtmgr.Eps[uuid] = ep
+                }
+        }
+}
+