X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;f=E2Manager%2Fmanagers%2Fran_list_manager.go;h=b6dcbcbbf4ec7fa4dbc3fbfdc6a893ac66f9357d;hb=0fb24ff00209041b316352327e2c73b699943131;hp=d6dbd8e8eb6e3160c14a585a79202b29cfda91fb;hpb=a590417b434ba8e556f1a9b26ff7b6edbb2097ce;p=ric-plt%2Fe2mgr.git diff --git a/E2Manager/managers/ran_list_manager.go b/E2Manager/managers/ran_list_manager.go old mode 100644 new mode 100755 index d6dbd8e..b6dcbcb --- a/E2Manager/managers/ran_list_manager.go +++ b/E2Manager/managers/ran_list_manager.go @@ -1,6 +1,7 @@ // // Copyright 2019 AT&T Intellectual Property // Copyright 2019 Nokia +// Copyright (c) 2020 Samsung Electronics Co., Ltd. All Rights Reserved. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -20,10 +21,12 @@ package managers import ( + "e2mgr/e2managererrors" "e2mgr/logger" "e2mgr/services" "gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/entities" "sync" + "time" ) type ranListManagerInstance struct { @@ -39,7 +42,10 @@ type RanListManager interface { 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 + GetNbIdentity(ranName string) (*entities.NbIdentity, error) + UpdateHealthcheckTimeStampReceived(oldRRanName string) (*entities.NbIdentity, *entities.NbIdentity) + UpdateHealthcheckTimeStampSent(oldRRanName string) (*entities.NbIdentity, *entities.NbIdentity) + UpdateNbIdentities(nodeType entities.Node_Type, oldNbIdentities []*entities.NbIdentity, newNbIdentities []*entities.NbIdentity) error } func NewRanListManager(logger *logger.Logger, rnibDataService services.RNibDataService) RanListManager { @@ -50,12 +56,6 @@ func NewRanListManager(logger *logger.Logger, rnibDataService services.RNibDataS } } -// 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() @@ -92,12 +92,56 @@ func (m *ranListManagerInstance) AddNbIdentity(nodeType entities.Node_Type, nbId } func (m *ranListManagerInstance) UpdateNbIdentityConnectionStatus(nodeType entities.Node_Type, ranName string, connectionStatus entities.ConnectionStatus) error { - //TODO: implement + m.mux.Lock() + defer m.mux.Unlock() + + m.logger.Infof("#ranListManagerInstance.UpdateNbIdentityConnectionStatus - RAN name: %s - updating nodeb identity connection status", ranName) + + oldNbIdentity, ok := m.nbIdentityMap[ranName] + if !ok { + m.logger.Errorf("#ranListManagerInstance.UpdateNbIdentityConnectionStatus - RAN name: %s - nodeb identity not found in nbIdentityMap", ranName) + return e2managererrors.NewInternalError() + } + + newNbIdentity := &entities.NbIdentity{ + GlobalNbId: oldNbIdentity.GlobalNbId, + InventoryName: ranName, + ConnectionStatus: connectionStatus, + HealthCheckTimestampSent: oldNbIdentity.HealthCheckTimestampSent, + HealthCheckTimestampReceived: oldNbIdentity.HealthCheckTimestampReceived, + } + m.nbIdentityMap[ranName] = newNbIdentity + + err := m.rnibDataService.UpdateNbIdentity(nodeType, oldNbIdentity, newNbIdentity) + if err != nil { + m.logger.Errorf("#ranListManagerInstance.UpdateNbIdentityConnectionStatus - RAN name: %s - Failed updating nodeb identity in DB. error: %s", ranName, err) + return err + } + m.logger.Infof("#ranListManagerInstance.UpdateNbIdentityConnectionStatus - RAN name: %s - Successfully updated nodeb identity", ranName) return nil } func (m *ranListManagerInstance) RemoveNbIdentity(nodeType entities.Node_Type, ranName string) error { - //TODO: implement + 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 } @@ -107,5 +151,66 @@ func (m *ranListManagerInstance) GetNbIdentityList() []*entities.NbIdentity { nbIds = append(nbIds, v) } + m.logger.Infof("#ranListManagerInstance.GetNbIdentityList - %d identity returned", len(nbIds)) + return nbIds } + +func (m *ranListManagerInstance) GetNbIdentity(ranName string) (*entities.NbIdentity, error) { + nbIdentity, ok := m.nbIdentityMap[ranName] + if !ok { + m.logger.Infof("#ranListManagerInstance.GetNbIdentity - RAN name: %s - nodeb identity not found", ranName) + return nil , e2managererrors.NewResourceNotFoundError() + } + + m.logger.Infof("#ranListManagerInstance.GetNbIdentity - RAN name: %s - nodeb identity returned", ranName) + + return nbIdentity, nil +} + +func (m *ranListManagerInstance) UpdateHealthcheckTimeStampSent(oldRRanName string) (*entities.NbIdentity, *entities.NbIdentity){ + currentTimeStamp := time.Now().UnixNano() + oldNbIdentity := m.nbIdentityMap[oldRRanName] + + newNbIdentity := &entities.NbIdentity{ + GlobalNbId: oldNbIdentity.GlobalNbId, + InventoryName: oldNbIdentity.InventoryName, + ConnectionStatus: oldNbIdentity.ConnectionStatus, + HealthCheckTimestampSent: currentTimeStamp, + HealthCheckTimestampReceived: oldNbIdentity.HealthCheckTimestampReceived, + } + + m.nbIdentityMap[oldNbIdentity.InventoryName] = newNbIdentity + return oldNbIdentity, newNbIdentity +} + +func (m *ranListManagerInstance) UpdateHealthcheckTimeStampReceived(oldRRanName string) (*entities.NbIdentity, *entities.NbIdentity){ + currentTimeStamp := time.Now().UnixNano() + oldNbIdentity := m.nbIdentityMap[oldRRanName] + + newNbIdentity := &entities.NbIdentity{ + GlobalNbId: oldNbIdentity.GlobalNbId, + InventoryName: oldNbIdentity.InventoryName, + ConnectionStatus: oldNbIdentity.ConnectionStatus, + HealthCheckTimestampSent: oldNbIdentity.HealthCheckTimestampSent, + HealthCheckTimestampReceived: currentTimeStamp, + } + + m.nbIdentityMap[oldNbIdentity.InventoryName] = newNbIdentity + return oldNbIdentity, newNbIdentity +} + +func (m *ranListManagerInstance) UpdateNbIdentities(nodeType entities.Node_Type, oldNbIdentities []*entities.NbIdentity, newNbIdentities []*entities.NbIdentity) error { + m.mux.Lock() + defer m.mux.Unlock() + + err := m.rnibDataService.UpdateNbIdentities(nodeType, oldNbIdentities, newNbIdentities) + + if err != nil { + m.logger.Errorf("#ranListManagerInstance.UpdateNbIdentities not completed for %d nbIdentities of nodetype - %s", len(newNbIdentities), nodeType.String()) + } else{ + m.logger.Infof("#ranListManagerInstance.UpdateNbIdentities completed successfully for %d nbIdentities of nodetype - %s", len(newNbIdentities), nodeType.String()) + } + + return err +}