X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;f=E2Manager%2Fmanagers%2Fran_list_manager.go;h=d392e3da8bdd99e4c8939bafa33485fae7236eca;hb=35c65f11141d339d6afc27ed35c6fc09d61b8a99;hp=9ad10f212e0f6c061aea44d03c71a2c948696dff;hpb=197657e0e814c871b903ef779ad654b13347e430;p=ric-plt%2Fe2mgr.git diff --git a/E2Manager/managers/ran_list_manager.go b/E2Manager/managers/ran_list_manager.go index 9ad10f2..d392e3d 100644 --- a/E2Manager/managers/ran_list_manager.go +++ b/E2Manager/managers/ran_list_manager.go @@ -21,24 +21,110 @@ package managers import ( "e2mgr/logger" + "e2mgr/services" "gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/entities" + "sync" ) type ranListManagerInstance struct { - logger *logger.Logger + logger *logger.Logger + rnibDataService services.RNibDataService + mux sync.Mutex + nbIdentityMap map[string]*entities.NbIdentity } type RanListManager interface { - UpdateRanState(nodebInfo *entities.NodebInfo) error + InitNbIdentityMap() error + AddNbIdentity(nodeType entities.Node_Type, nbIdentity *entities.NbIdentity) error + UpdateNbIdentityConnectionStatus(nodeType entities.Node_Type, ranName string, connectionStatus entities.ConnectionStatus) error + RemoveNbIdentity(nodeType entities.Node_Type, ranName string) error + GetNbIdentityList() []*entities.NbIdentity + UpdateRanState(nodebInfo *entities.NodebInfo) error // TODO: replace with UpdateNbIdentityConnectionStatus } -func NewRanListManager(logger *logger.Logger) RanListManager { +func NewRanListManager(logger *logger.Logger, rnibDataService services.RNibDataService) RanListManager { return &ranListManagerInstance{ - logger: logger, + logger: logger, + rnibDataService: rnibDataService, + nbIdentityMap: make(map[string]*entities.NbIdentity), } } +// TODO: replace with UpdateNbIdentityConnectionStatus func (m *ranListManagerInstance) UpdateRanState(nodebInfo *entities.NodebInfo) error { m.logger.Infof("#ranListManagerInstance.UpdateRanState - RAN name: %s - Updating state...", nodebInfo.RanName) return nil } + +func (m *ranListManagerInstance) InitNbIdentityMap() error { + nbIds, err := m.rnibDataService.GetListNodebIds() + + if err != nil { + m.logger.Errorf("#ranListManagerInstance.InitNbIdentityMap - Failed fetching RAN list from DB. error: %s", err) + return err + } + + for _, v := range nbIds { + m.nbIdentityMap[v.InventoryName] = v + } + + m.logger.Infof("#ranListManagerInstance.InitNbIdentityMap - Successfully initiated nodeb identity map") + m.logger.Debugf("#ranListManagerInstance.InitNbIdentityMap - nodeb Identity map: %s", m.nbIdentityMap) + return nil +} + +func (m *ranListManagerInstance) AddNbIdentity(nodeType entities.Node_Type, nbIdentity *entities.NbIdentity) error { + m.mux.Lock() + defer m.mux.Unlock() + + m.nbIdentityMap[nbIdentity.InventoryName] = nbIdentity + + err := m.rnibDataService.AddNbIdentity(nodeType, nbIdentity) + + if err != nil { + m.logger.Errorf("#ranListManagerInstance.AddNbIdentity - RAN name: %s - Failed adding nodeb identity to DB. error: %s", nbIdentity.InventoryName, err) + return err + } + + m.logger.Infof("#ranListManagerInstance.AddNbIdentity - RAN name: %s - Successfully added nodeb identity", nbIdentity.InventoryName) + m.logger.Debugf("#ranListManagerInstance.AddNbIdentity - nodeb Identity map: %s", m.nbIdentityMap) + return nil +} + +func (m *ranListManagerInstance) UpdateNbIdentityConnectionStatus(nodeType entities.Node_Type, ranName string, connectionStatus entities.ConnectionStatus) error { + //TODO: implement + return nil +} + +func (m *ranListManagerInstance) RemoveNbIdentity(nodeType entities.Node_Type, ranName string) error { + m.mux.Lock() + defer m.mux.Unlock() + + m.logger.Infof("#ranListManagerInstance.RemoveNbIdentity - RAN name: %s - deleting nodeb identity from memory and db...", ranName) + + nbIdentity, ok := m.nbIdentityMap[ranName] + if !ok { + m.logger.Infof("#ranListManagerInstance.RemoveNbIdentity - RAN name: %s - nodeb identity not found", ranName) + return nil + } + + delete(m.nbIdentityMap, ranName) + + err := m.rnibDataService.RemoveNbIdentity(nodeType, nbIdentity) + if err != nil { + m.logger.Errorf("#ranListManagerInstance.RemoveNbIdentity - RAN name: %s - Failed removing nodeb identity from DB. error: %s", ranName, err) + return err + } + + m.logger.Infof("#ranListManagerInstance.RemoveNbIdentity - RAN name: %s - Successfully deleted nodeb identity", ranName) + return nil +} + +func (m *ranListManagerInstance) GetNbIdentityList() []*entities.NbIdentity { + nbIds := make([]*entities.NbIdentity, 0, len(m.nbIdentityMap)) + for _, v := range m.nbIdentityMap { + nbIds = append(nbIds, v) + } + + return nbIds +}