class Redis::Client::Connector::Sentinel

def resolve_slave

def resolve_slave
  sentinel_detect do |client|
    if reply = client.call(["sentinel", "slaves", @master])
      slaves = reply.map { |s| s.each_slice(2).to_h }
      slaves.each { |s| s['flags'] = s.fetch('flags').split(',') }
      slaves.reject! { |s| s.fetch('flags').include?('s_down') }
      if slaves.empty?
        raise CannotConnectError, 'No slaves available.'
      else
        slave = slaves.sample
        {
          host: slave.fetch('ip'),
          port: slave.fetch('port')
        }
      end
    end
  end
end