-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)