File: monitorstats.py

package info (click to toggle)
pushpin 1.36.0-2
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 2,752 kB
  • sloc: cpp: 39,464; python: 970; sh: 132; ansic: 56; makefile: 35; php: 27
file content (43 lines) | stat: -rw-r--r-- 1,027 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
import sys
import json
import tnetstring
import zmq

def ensure_str(i):
    if isinstance(i, dict):
        out = {}
        for k, v in i.items():
            out[ensure_str(k)] = ensure_str(v)
        return out
    elif isinstance(i, list):
        out = []
        for v in i:
            out.append(ensure_str(v))
        return out
    elif isinstance(i, bytes):
        return i.decode('utf-8')
    else:
        return i

ctx = zmq.Context()
sock = ctx.socket(zmq.SUB)
sock.connect(sys.argv[1])

if len(sys.argv) >= 3:
    for mtype in sys.argv[2].split(','):
        sock.setsockopt(zmq.SUBSCRIBE, '{} '.format(mtype).encode('utf-8'))
else:
    sock.setsockopt(zmq.SUBSCRIBE, b'')

while True:
    m_raw = sock.recv()
    at = m_raw.find(b' ')
    mtype = ensure_str(m_raw[:at])
    mdata = m_raw[at + 1:]
    if mdata[0] == ord(b'T'):
        m = ensure_str(tnetstring.loads(mdata[1:]))
    elif mdata[0] == ord(b'J'):
        m = json.loads(mdata[1:])
    else:
        m = mdata
    print('{} {}'.format(mtype, m))