[RICPLT-2585] E2Term Init - Support Multiple E2T Instances
[ric-plt/e2mgr.git] / E2Manager / handlers / rmrmsghandlers / e2_term_init_notification_handler.go
index 86bf3f2..fd2ec81 100644 (file)
@@ -21,42 +21,55 @@ import (
        "e2mgr/logger"
        "e2mgr/managers"
        "e2mgr/models"
-       "e2mgr/sessions"
+       "e2mgr/services"
        "gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/common"
-       "gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/reader"
 )
 
 type E2TermInitNotificationHandler struct {
-       rnibReaderProvider     func() reader.RNibReader
+       logger                 *logger.Logger
+       rnibDataService        services.RNibDataService
        ranReconnectionManager *managers.RanReconnectionManager
+       e2tInstancesManager    managers.IE2TInstancesManager
 }
 
-func NewE2TermInitNotificationHandler(ranReconnectionManager *managers.RanReconnectionManager, rnibReaderProvider func() reader.RNibReader) E2TermInitNotificationHandler {
+func NewE2TermInitNotificationHandler(logger *logger.Logger, ranReconnectionManager *managers.RanReconnectionManager, rnibDataService services.RNibDataService, e2tInstancesManager managers.IE2TInstancesManager) E2TermInitNotificationHandler {
        return E2TermInitNotificationHandler{
-               rnibReaderProvider:     rnibReaderProvider,
+               logger:                 logger,
+               rnibDataService:        rnibDataService,
                ranReconnectionManager: ranReconnectionManager,
+               e2tInstancesManager:    e2tInstancesManager,
        }
 }
 
-func (handler E2TermInitNotificationHandler) Handle(logger *logger.Logger, e2Sessions sessions.E2Sessions, request *models.NotificationRequest, messageChannel chan<- *models.NotificationResponse) {
+func (h E2TermInitNotificationHandler) Handle(request *models.NotificationRequest) {
 
-logger.Infof("#E2TermInitNotificationHandler.Handle - Handling E2_TERM_INIT")
+       h.logger.Infof("#E2TermInitNotificationHandler.Handle - Handling E2_TERM_INIT")
+
+       e2tAddress := string(request.Payload) // TODO: make sure E2T sends this as the only value of the message
+
+       e2tInstance, err := h.e2tInstancesManager.GetE2TInstance(e2tAddress)
 
-       nbIdentityList, err := handler.rnibReaderProvider().GetListNodebIds()
        if err != nil {
-               logger.Errorf("#E2TermInitNotificationHandler.Handle - Failed to get nodes list from RNIB. Error: %s", err.Error())
+               _, ok := err.(*common.ResourceNotFoundError)
+
+               if !ok {
+                       h.logger.Errorf("#E2TermInitNotificationHandler.Handle - Failed retrieving E2TInstance. error: %s", err)
+                       return
+               }
+
+               _ = h.e2tInstancesManager.AddE2TInstance(e2tAddress)
                return
        }
 
-       if len(nbIdentityList) == 0 {
-               logger.Warnf("#E2TermInitNotificationHandler.Handle - The Nodes list in RNIB is empty")
+       if len(e2tInstance.AssociatedRanList) == 0 {
+               h.logger.Infof("#E2TermInitNotificationHandler.Handle - E2T Address: %s - E2T instance has no associated RANs", e2tInstance.Address)
                return
        }
 
-       for _, nbIdentity := range nbIdentityList {
+       for _, ranName := range e2tInstance.AssociatedRanList {
 
-               if err := handler.ranReconnectionManager.ReconnectRan(nbIdentity.InventoryName); err != nil {
-                       logger.Errorf("#E2TermInitNotificationHandler.Handle - Ran name: %s - connection attempt failure, error: %s", (*nbIdentity).GetInventoryName(), err.Error())
+               if err := h.ranReconnectionManager.ReconnectRan(ranName); err != nil {
+                       h.logger.Errorf("#E2TermInitNotificationHandler.Handle - Ran name: %s - connection attempt failure, error: %s", ranName, err)
                        _, ok := err.(*common.ResourceNotFoundError)
                        if !ok {
                                break
@@ -64,5 +77,5 @@ logger.Infof("#E2TermInitNotificationHandler.Handle - Handling E2_TERM_INIT")
                }
        }
 
-       logger.Infof("#E2TermInitNotificationHandler.Handle - Completed handling of E2_TERM_INIT")
+       h.logger.Infof("#E2TermInitNotificationHandler.Handle - Completed handling of E2_TERM_INIT")
 }