X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;f=internal%2Fsdlgoredis%2Fsdlgosentinel.go;h=19468d748dab37e4a1893ab3fe9294d05a70a6d3;hb=2b62c749ada363a2f20fd8ae34f1a66ad12d307d;hp=7af0410caa3d45b9856d31dbac88d6b0788ade15;hpb=977a55ca96d5dba1c7f9273671747eaf9cd6f894;p=ric-plt%2Fsdlgo.git diff --git a/internal/sdlgoredis/sdlgosentinel.go b/internal/sdlgoredis/sdlgosentinel.go index 7af0410..19468d7 100644 --- a/internal/sdlgoredis/sdlgosentinel.go +++ b/internal/sdlgoredis/sdlgosentinel.go @@ -23,7 +23,9 @@ package sdlgoredis import ( + "fmt" "github.com/go-redis/redis/v7" + "strconv" ) type Sentinel struct { @@ -34,6 +36,7 @@ type Sentinel struct { type IredisSentinelClient interface { Master(name string) *redis.StringStringMapCmd Slaves(name string) *redis.SliceCmd + Sentinels(name string) *redis.SliceCmd } type RedisSentinelCreateCb func(cfg *Config, addr string) *Sentinel @@ -54,18 +57,31 @@ func newRedisSentinel(cfg *Config, addr string) *Sentinel { func (s *Sentinel) GetDbState() (*DbState, error) { state := new(DbState) - mState, mErr := s.getMasterDbState() + pState, pErr := s.getPrimaryDbState() rState, rErr := s.getReplicasState() - state.MasterDbState = *mState + sState, sErr := s.getSentinelsState() + state.PrimaryDbState = *pState state.ReplicasDbState = rState - if mErr == nil { + state.SentinelsDbState = sState + + cnt, err := strconv.Atoi(s.Cfg.nodeCnt) + if err != nil { + state.Err = fmt.Errorf("Sentinel DBAAS_NODE_COUNT configuration value '%s' conversion to integer failed", s.Cfg.nodeCnt) + return state, state.Err + } + state.ConfigNodeCnt = cnt + + if pErr != nil { + return state, pErr + } + if rErr != nil { return state, rErr } - return state, mErr + return state, sErr } -func (s *Sentinel) getMasterDbState() (*MasterDbState, error) { - state := new(MasterDbState) +func (s *Sentinel) getPrimaryDbState() (*PrimaryDbState, error) { + state := new(PrimaryDbState) redisVal, redisErr := s.Master(s.Cfg.masterName).Result() if redisErr == nil { state.Fields.Ip = redisVal["ip"] @@ -83,8 +99,8 @@ func (s *Sentinel) getReplicasState() (*ReplicasDbState, error) { redisVal, redisErr := s.Slaves(s.Cfg.masterName).Result() if redisErr == nil { - for _, redisSlave := range redisVal { - replicaState := readReplicaState(redisSlave.([]interface{})) + for _, redisReplica := range redisVal { + replicaState := readReplicaState(redisReplica.([]interface{})) states.States = append(states.States, replicaState) } } @@ -92,19 +108,48 @@ func (s *Sentinel) getReplicasState() (*ReplicasDbState, error) { return states, redisErr } -func readReplicaState(redisSlaves []interface{}) *ReplicaDbState { +func readReplicaState(redisReplicas []interface{}) *ReplicaDbState { state := new(ReplicaDbState) - for i := 0; i < len(redisSlaves); i += 2 { - if redisSlaves[i].(string) == "ip" { - state.Fields.Ip = redisSlaves[i+1].(string) - } else if redisSlaves[i].(string) == "port" { - state.Fields.Port = redisSlaves[i+1].(string) - } else if redisSlaves[i].(string) == "flags" { - state.Fields.Flags = redisSlaves[i+1].(string) - } else if redisSlaves[i].(string) == "role-reported" { - state.Fields.Role = redisSlaves[i+1].(string) - } else if redisSlaves[i].(string) == "master-link-status" { - state.Fields.MasterLinkStatus = redisSlaves[i+1].(string) + for i := 0; i < len(redisReplicas); i += 2 { + if redisReplicas[i].(string) == "ip" { + state.Fields.Ip = redisReplicas[i+1].(string) + } else if redisReplicas[i].(string) == "port" { + state.Fields.Port = redisReplicas[i+1].(string) + } else if redisReplicas[i].(string) == "flags" { + state.Fields.Flags = redisReplicas[i+1].(string) + } else if redisReplicas[i].(string) == "role-reported" { + state.Fields.Role = redisReplicas[i+1].(string) + } else if redisReplicas[i].(string) == "master-link-status" { + state.Fields.PrimaryLinkStatus = redisReplicas[i+1].(string) + } + } + return state +} + +func (s *Sentinel) getSentinelsState() (*SentinelsDbState, error) { + states := new(SentinelsDbState) + states.States = make([]*SentinelDbState, 0) + + redisVal, redisErr := s.Sentinels(s.Cfg.masterName).Result() + if redisErr == nil { + for _, redisSentinel := range redisVal { + sentinelState := readSentinelState(redisSentinel.([]interface{})) + states.States = append(states.States, sentinelState) + } + } + states.Err = redisErr + return states, redisErr +} + +func readSentinelState(redisSentinels []interface{}) *SentinelDbState { + state := new(SentinelDbState) + for i := 0; i < len(redisSentinels); i += 2 { + if redisSentinels[i].(string) == "ip" { + state.Fields.Ip = redisSentinels[i+1].(string) + } else if redisSentinels[i].(string) == "port" { + state.Fields.Port = redisSentinels[i+1].(string) + } else if redisSentinels[i].(string) == "flags" { + state.Fields.Flags = redisSentinels[i+1].(string) } } return state