in internal/redismetrics/redismetrics.go [124:169]
func (r *RedisMetrics) replicationModeActive(ctx context.Context) bool {
replication := r.db.Info(ctx, "replication")
log.CtxLogger(ctx).Debugf("replication: %v", replication)
lines := strings.Split(replication.String(), "\n")
var err error
var currentRole string
for _, line := range lines {
if strings.Contains(line, role) {
switch {
case strings.Contains(line, redisMain):
log.CtxLogger(ctx).Debugf("Redis is running as main role.")
currentRole = main
case strings.Contains(line, redisWorker):
log.CtxLogger(ctx).Debugf("Redis is running as worker role.")
currentRole = worker
default:
log.CtxLogger(ctx).Debugf("Redis is running as an unknown role. Returning false by default.")
return false
}
}
}
var numWorkers int
for _, line := range lines {
line = strings.TrimSpace(line)
switch currentRole {
case main:
if strings.Contains(line, connectedWorkers) {
connectedWorkers := strings.TrimPrefix(line, connectedWorkers)
numWorkers, err = strconv.Atoi(connectedWorkers)
if err != nil {
log.CtxLogger(ctx).Debugf("Failed to parse info about connected workers: %v", err)
return false
}
if numWorkers > 0 {
return true
}
return false
}
case worker:
if strings.Contains(line, linkStatus) {
return strings.Contains(line, up)
}
}
}
return false
}