import socket, time, json, base64, sys

HOST = '10.24.8.82'

def read_msg(f):
    line = f.readline()
    if not line: return None
    t = line.strip()
    if t.startswith(b'*'):
        n = int(t[1:]); parts = []
        for _ in range(n):
            hl = f.readline().strip()
            if hl.startswith(b'$'):
                ln = int(hl[1:])
                data = f.read(ln + 2)
                parts.append(data[:-2])
        return parts
    return [t]

s = socket.create_connection((HOST, 6379), 5); s.settimeout(65)
s.sendall(b'PSUBSCRIBE celeryev*\r\n')
f = s.makefile('rb')
deadline = time.time() + 55
events = []
while time.time() < deadline:
    try:
        s.settimeout(max(1, deadline - time.time()))
        m = read_msg(f)
        if not m: continue
        if len(m) >= 4 and m[0] in (b'pmessage', b'message'):
            chan, payload = m[2], m[3]
            try:
                env = json.loads(payload)
                body = base64.b64decode(env['body']).decode(errors='replace')
                ev = json.loads(body)
                events.append((ev.get('type'), ev.get('hostname'), ev.get('uuid'), str(ev.get('args', ''))[:80] if ev.get('args') else str(ev)[:150]))
            except Exception:
                events.append(('raw', chan.decode(errors='replace')[:40], payload[:120].decode(errors='replace'), ''))
    except socket.timeout:
        break

names = {}
for t, h, u, a in events:
    if t and t not in ('raw',):
        names[t] = (h, a)
for t, (h, a) in names.items():
    print(t, '|', h, '|', a)
print('total events:', len(events))
