func()

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
}