X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;f=E2Manager%2Fconfiguration%2Fconfiguration.go;h=f539c5d91407156be06ec034f5bdb2826e89af6c;hb=05c890a91a4cd043df7367d4dea35c083241bb2e;hp=06a8a11eb4eda54c3fc26009557d45539dc69685;hpb=f846c5987cd35da745534e26ac3a22bdcf8b030a;p=ric-plt%2Fe2mgr.git diff --git a/E2Manager/configuration/configuration.go b/E2Manager/configuration/configuration.go index 06a8a11..f539c5d 100644 --- a/E2Manager/configuration/configuration.go +++ b/E2Manager/configuration/configuration.go @@ -17,12 +17,13 @@ // This source code is part of the near-RT RIC (RAN Intelligent Controller) // platform project (RICP). - package configuration import ( + "errors" "fmt" "github.com/spf13/viper" + "strconv" ) type Configuration struct { @@ -37,16 +38,22 @@ type Configuration struct { MaxMsgSize int } RoutingManager struct { - BaseUrl string + BaseUrl string } + NotificationResponseBuffer int BigRedButtonTimeoutSec int - MaxConnectionAttempts int MaxRnibConnectionAttempts int RnibRetryIntervalMs int - KeepAliveResponseTimeoutMs int + KeepAliveResponseTimeoutMs int KeepAliveDelayMs int E2TInstanceDeletionTimeoutMs int + GlobalRicId struct { + RicId string + Mcc string + Mnc string + } + StateChangeMessageChannel string } func ParseConfiguration() *Configuration { @@ -68,12 +75,13 @@ func ParseConfiguration() *Configuration { config.populateRoutingManagerConfig(viper.Sub("routingManager")) config.NotificationResponseBuffer = viper.GetInt("notificationResponseBuffer") config.BigRedButtonTimeoutSec = viper.GetInt("bigRedButtonTimeoutSec") - config.MaxConnectionAttempts = viper.GetInt("maxConnectionAttempts") config.MaxRnibConnectionAttempts = viper.GetInt("maxRnibConnectionAttempts") config.RnibRetryIntervalMs = viper.GetInt("rnibRetryIntervalMs") config.KeepAliveResponseTimeoutMs = viper.GetInt("keepAliveResponseTimeoutMs") config.KeepAliveDelayMs = viper.GetInt("KeepAliveDelayMs") config.E2TInstanceDeletionTimeoutMs = viper.GetInt("e2tInstanceDeletionTimeoutMs") + config.populateGlobalRicIdConfig(viper.Sub("globalRicId")) + config.StateChangeMessageChannel = viper.GetString("stateChangeMessageChannel") return &config } @@ -105,3 +113,128 @@ func (c *Configuration) populateRoutingManagerConfig(rmConfig *viper.Viper) { } c.RoutingManager.BaseUrl = rmConfig.GetString("baseUrl") } + +func (c *Configuration) populateGlobalRicIdConfig(globalRicIdConfig *viper.Viper) { + err := validateGlobalRicIdConfig(globalRicIdConfig) + if err != nil { + panic(err.Error()) + } + c.GlobalRicId.RicId = globalRicIdConfig.GetString("ricId") + c.GlobalRicId.Mcc = globalRicIdConfig.GetString("mcc") + c.GlobalRicId.Mnc = globalRicIdConfig.GetString("mnc") +} + +func validateGlobalRicIdConfig(globalRicIdConfig *viper.Viper) error { + if globalRicIdConfig == nil { + return errors.New("#configuration.validateGlobalRicIdConfig - failed to populate Global RicId configuration: The entry 'globalRicId' not found\n") + } + + err := validateRicId(globalRicIdConfig.GetString("ricId")) + + if err != nil { + return err + } + + err = validateMcc(globalRicIdConfig.GetString("mcc")) + + if err != nil { + return err + } + + err = validateMnc(globalRicIdConfig.GetString("mnc")) + + if err != nil { + return err + } + + + return nil +} + +func validateMcc(mcc string) error { + + if len(mcc) == 0{ + return errors.New("#configuration.validateMcc - mcc is missing or empty\n") + } + + if len(mcc) != 3{ + return errors.New("#configuration.validateMcc - mcc is not 3 digits\n") + } + + mccInt, err := strconv.Atoi(mcc) + + if err != nil{ + return errors.New("#configuration.validateMcc - mcc is not a number\n") + } + + if mccInt < 0 { + return errors.New("#configuration.validateMcc - mcc is negative\n") + } + return nil +} + +func validateMnc(mnc string) error { + + if len(mnc) == 0{ + return errors.New("#configuration.validateMnc - mnc is missing or empty\n") + } + + if len(mnc) < 2 || len(mnc) >3 { + return errors.New("#configuration.validateMnc - mnc is not 2 or 3 digits\n") + } + + mncAsInt, err := strconv.Atoi(mnc) + + if err != nil{ + return errors.New("#configuration.validateMnc - mnc is not a number\n") + } + + if mncAsInt < 0 { + return errors.New("#configuration.validateMnc - mnc is negative\n") + } + + return nil +} + +func validateRicId(ricId string) error{ + + if len(ricId) == 0{ + return errors.New("#configuration.validateRicId - ricId is missing or empty\n") + } + + if len(ricId) != 5 { + return errors.New("#configuration.validateRicId - ricId length should be 5 hex characters\n") + } + + _, err := strconv.ParseUint(ricId, 16, 64) + if err != nil { + return errors.New("#configuration.validateRicId - ricId is not hex number\n") + } + + return nil +} + + +func (c *Configuration) String() string { + return fmt.Sprintf("{logging.logLevel: %s, http.port: %d, rmr: { port: %d, maxMsgSize: %d}, routingManager.baseUrl: %s, "+ + "notificationResponseBuffer: %d, bigRedButtonTimeoutSec: %d, maxRnibConnectionAttempts: %d, "+ + "rnibRetryIntervalMs: %d, keepAliveResponseTimeoutMs: %d, keepAliveDelayMs: %d, e2tInstanceDeletionTimeoutMs: %d, "+ + "globalRicId: { ricId: %s, mcc: %s, mnc: %s}, StateChangeMessageChannel: %s", + c.Logging.LogLevel, + c.Http.Port, + c.Rmr.Port, + c.Rmr.MaxMsgSize, + c.RoutingManager.BaseUrl, + c.NotificationResponseBuffer, + c.BigRedButtonTimeoutSec, + c.MaxRnibConnectionAttempts, + c.RnibRetryIntervalMs, + c.KeepAliveResponseTimeoutMs, + c.KeepAliveDelayMs, + c.E2TInstanceDeletionTimeoutMs, + c.GlobalRicId.RicId, + c.GlobalRicId.Mcc, + c.GlobalRicId.Mnc, + c.StateChangeMessageChannel, + ) +}