import socket, time, json, base64, uuid

HOST = '10.24.8.82'
PORT = 6379

def connect():
    s = socket.create_connection((HOST, PORT), 5); s.settimeout(4)
    return s

def cmd(s, *a, wait=0.6):
    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(wait)
    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')

def envelope(payload_dict, routing_key, reply_to, ticket):
    body = base64.b64encode(json.dumps(payload_dict).encode()).decode()
    env = {
        "body": body,
        "content-encoding": "utf-8",
        "content-type": "application/json",
        "headers": {},
        "properties": {
            "correlation_id": ticket,
            "reply_to": reply_to,
            "delivery_mode": 2,
            "delivery_info": {"exchange": "", "routing_key": routing_key},
            "priority": 0,
            "body_encoding": "base64",
            "delivery_tag": str(uuid.uuid4()),
        },
    }
    return json.dumps(env)

s = connect()
print('select db1:', cmd(s, 'SELECT', '1').strip())

worker = 'celery@recon24.cprod.zorg.sh'
pidbox_q = worker + '.celery.pidbox'

for method in ['ping', 'registered', 'stats', 'conf']:
    ticket = 'rt-' + method
    reply_q = 'rtreply.' + method
    payload = {"method": method, "arguments": [], "destination": [worker]}
    env = envelope(payload, pidbox_q, reply_q, ticket)
    r = cmd(s, 'LPUSH', pidbox_q, env)
    print(method, '->', r.strip()[:30])

time.sleep(4)
for method in ['ping', 'registered', 'stats', 'conf']:
    reply_q = 'rtreply.' + method
    r = cmd(s, 'LRANGE', reply_q, '0', '-1', wait=1.2)
    if len(r.strip()) > 10:
        print('==== REPLY', method, '====')
        try:
            items = r.split('\r\n')
            # decode base64 bodies in envelope(s)
            import re
            for m in re.finditer(r'"body": "([A-Za-z0-9+/=]+)"', r.replace('\\"', '"')):
                try:
                    dec = base64.b64decode(m.group(1)).decode(errors='replace')
                    print(dec[:2500])
                except Exception:
                    pass
        except Exception as e:
            print('raw:', r[:800])
    else:
        print('reply', method, ': empty')
s.close()
