package rNibWriter
import (
+ "e2mgr/configuration"
"encoding/json"
"fmt"
"gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/common"
"github.com/golang/protobuf/proto"
)
-const E2TAddressesKey = "E2TAddresses"
+const (
+ E2TAddressesKey = "E2TAddresses"
+ RanAddedEvent = "ADDED"
+ RanUpdatedEvent = "UPDATED"
+ RanDeletedEvent = "DELETED"
+)
type rNibWriterInstance struct {
- sdl common.ISdlInstance
+ sdl common.ISdlInstance
+ rnibWriterConfig configuration.RnibWriterConfig
}
/*
RemoveE2TInstance(e2tAddress string) error
UpdateGnbCells(nodebInfo *entities.NodebInfo, servedNrCells []*entities.ServedNRCell) error
RemoveServedNrCells(inventoryName string, servedNrCells []*entities.ServedNRCell) error
+ UpdateNodebInfoOnConnectionStatusInversion(nodebInfo *entities.NodebInfo, stateChangeMessageChannel string, event string) error
+ SaveGeneralConfiguration(config *entities.GeneralConfiguration) error
}
/*
GetRNibWriter returns reference to RNibWriter
*/
-func GetRNibWriter(sdl common.ISdlInstance) RNibWriter {
- return &rNibWriterInstance{sdl: sdl}
+func GetRNibWriter(sdl common.ISdlInstance, rnibWriterConfig configuration.RnibWriterConfig) RNibWriter {
+ return &rNibWriterInstance{sdl: sdl, rnibWriterConfig: rnibWriterConfig}
}
-
func (w *rNibWriterInstance) RemoveServedNrCells(inventoryName string, servedNrCells []*entities.ServedNRCell) error {
cellKeysToRemove := buildCellKeysToRemove(inventoryName, servedNrCells)
err := w.sdl.Remove(cellKeysToRemove)
return nil
}
+func (w *rNibWriterInstance) SaveGeneralConfiguration(config *entities.GeneralConfiguration) error {
+
+ err := w.SaveWithKeyAndMarshal(common.BuildGeneralConfigurationKey(), config)
+
+ if err != nil {
+ return common.NewInternalError(err)
+ }
+
+ return nil
+}
+
/*
SaveNodeb saves nodeB entity data in the redis DB according to the specified data model
*/
func (w *rNibWriterInstance) SaveNodeb(nbIdentity *entities.NbIdentity, entity *entities.NodebInfo) error {
isNotEmptyIdentity := isNotEmpty(nbIdentity)
- if isNotEmptyIdentity && entity.GetNodeType() == entities.Node_UNKNOWN {
+ nodeType := entity.GetNodeType()
+
+ if isNotEmptyIdentity && nodeType == entities.Node_UNKNOWN {
return common.NewValidationError(fmt.Sprintf("#rNibWriter.saveNodeB - Unknown responding node type, entity: %v", entity))
}
+
data, err := proto.Marshal(entity)
+
if err != nil {
return common.NewInternalError(err)
}
+
var pairs []interface{}
key, rNibErr := common.ValidateAndBuildNodeBNameKey(nbIdentity.InventoryName)
+
if rNibErr != nil {
return rNibErr
}
+
pairs = append(pairs, key, data)
if isNotEmptyIdentity {
- key, rNibErr = common.ValidateAndBuildNodeBIdKey(entity.GetNodeType().String(), nbIdentity.GlobalNbId.GetPlmnId(), nbIdentity.GlobalNbId.GetNbId())
+
+ key, rNibErr = common.ValidateAndBuildNodeBIdKey(nodeType.String(), nbIdentity.GlobalNbId.GetPlmnId(), nbIdentity.GlobalNbId.GetNbId())
if rNibErr != nil {
return rNibErr
}
return rNibErr
}
}
+
if entity.GetGnb() != nil {
pairs, rNibErr = appendGnbCells(nbIdentity.InventoryName, entity.GetGnb().GetServedNrCells(), pairs)
if rNibErr != nil {
return rNibErr
}
}
- err = w.sdl.Set(pairs)
+
+ if nodeType == entities.Node_ENB {
+ err = w.sdl.SetAndPublish([]string{w.rnibWriterConfig.RanManipulationMessageChannel, fmt.Sprintf("%s_%s", entity.RanName, RanAddedEvent)}, pairs)
+ } else {
+ err = w.sdl.Set(pairs)
+ }
+
if err != nil {
return common.NewInternalError(err)
}
}
nbIdData, err := proto.Marshal(nbIdentity)
+
if err != nil {
return common.NewInternalError(err)
}
- err = w.sdl.AddMember(entity.GetNodeType().String(), nbIdData)
+
+ err = w.sdl.AddMember(nodeType.String(), nbIdData)
+
if err != nil {
return common.NewInternalError(err)
}
return nil
}
+func (w *rNibWriterInstance) SaveWithKeyAndMarshal(key string, entity interface{}) error {
+
+ data, err := json.Marshal(entity)
+
+ if err != nil {
+ return common.NewInternalError(err)
+ }
+
+ var pairs []interface{}
+ pairs = append(pairs, key, data)
+
+ err = w.sdl.Set(pairs)
+
+ if err != nil {
+ return common.NewInternalError(err)
+ }
+
+ return nil
+}
+
+/*
+UpdateNodebInfoOnConnectionStatusInversion...
+*/
+func (w *rNibWriterInstance) UpdateNodebInfoOnConnectionStatusInversion(nodebInfo *entities.NodebInfo, stateChangeMessageChannel string, event string) error {
+
+ pairs, err := buildUpdateNodebInfoPairs(nodebInfo)
+
+ if err != nil {
+ return err
+ }
+
+ err = w.sdl.SetAndPublish([]string{stateChangeMessageChannel, event}, pairs)
+
+ if err != nil {
+ return common.NewInternalError(err)
+ }
+
+ return nil
+}
+
/*
Close the writer
*/