X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;f=internal%2Fsdlgoredis%2Fsdlgosentinel.go;fp=internal%2Fsdlgoredis%2Fsdlgosentinel.go;h=014d4ba565bdde5d2073793512a6eaa402974367;hb=7c256b622c8fd065e91a7e289937d6e692a7eb1d;hp=7af0410caa3d45b9856d31dbac88d6b0788ade15;hpb=977a55ca96d5dba1c7f9273671747eaf9cd6f894;p=ric-plt%2Fsdlgo.git diff --git a/internal/sdlgoredis/sdlgosentinel.go b/internal/sdlgoredis/sdlgosentinel.go index 7af0410..014d4ba 100644 --- a/internal/sdlgoredis/sdlgosentinel.go +++ b/internal/sdlgoredis/sdlgosentinel.go @@ -34,6 +34,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 @@ -56,12 +57,17 @@ func (s *Sentinel) GetDbState() (*DbState, error) { state := new(DbState) mState, mErr := s.getMasterDbState() rState, rErr := s.getReplicasState() + sState, sErr := s.getSentinelsState() state.MasterDbState = *mState state.ReplicasDbState = rState - if mErr == nil { + state.SentinelsDbState = sState + if mErr != nil { + return state, mErr + } + if rErr != nil { return state, rErr } - return state, mErr + return state, sErr } func (s *Sentinel) getMasterDbState() (*MasterDbState, error) { @@ -109,3 +115,32 @@ func readReplicaState(redisSlaves []interface{}) *ReplicaDbState { } 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 +}