summaryrefslogtreecommitdiffstats
path: root/doc/stats_dabmux_multi.py
blob: bd6b9b1541dcebe92258201327fc1e52eec1e6d1 (plain)
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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
#!/usr/bin/env python2
#
# present statistics from dabmux Stats Server
# to munin

import sys
import json
import socket

config_template_top = """
multigraph zmq_inbuf
graph_title {title}
graph_order high low underruns overruns
graph_args --base 1000
graph_vlabel max/min buffer size bytes during last ${{graph_period}}
graph_category dabmux
graph_info This graph shows the high and low buffer sizes for ZMQ inputs

high.info Max buffer size
high.label Bytes
high.min 0
low.info Min buffer size
low.label Bytes
low.min 0
underruns.info Number of underruns
underruns.label Occurrencies
underruns.min 0
overruns.info Number of overruns
overruns.label Occurrencies
overruns.min 0

"""

config_template_individual = """
multigraph zmq_inbuf.id_{ident}

graph_title Contribution {ident} buffer
graph_order high low
graph_args --base 1000
graph_vlabel max/min buffer size bytes during last ${{graph_period}}
graph_category dabmux
graph_info This graph shows the high and low buffer sizes for the {ident} ZMQ input

high.info Max buffer size
high.label Bytes
high.min 0
high.warning 1:
low.info Min buffer size
low.label Bytes
low.min 0
low.warning 1:
underruns.info Number of underruns
underruns.label Occurrencies
underruns.min 0
underruns.warning 1:
overruns.info Number of overruns
overruns.label Occurrencies
overruns.min 0
overruns.warning 1:
"""

#TODO enable
#if not os.environ.get("MUNIN_CAP_MULTIGRAPH"):
#    print("This needs munin version 1.4 at least")
#    sys.exit(1)

def connect():
    """Create a connection to the dabmux stats server

    returns: the socket"""

    sock = socket.socket()
    sock.connect(("localhost", 12720))

    version = json.loads(sock.recv(256))

    if not version['service'].startswith("CRC-DabMux"):
        sys.stderr.write("Wrong version\n")
        sys.exit(1)

    return sock

def get_id_from_uri(uri):
    proto, _, port = uri.partition('://*:')
    return "zmq-" + proto + "-" + port

if len(sys.argv) == 1:
    sock = connect()
    sock.send("values\n")
    values = json.loads(sock.recv(256))['values']

    munin_values = ""
    for ident in values:
        v = values[ident]['inputstat']
        munin_values += "multigraph zmq_inbuf.id_{ident}\n".format(ident=get_id_from_uri(ident))
        munin_values += "high.value {}\n".format(v['max_fill'])
        munin_values += "low.value {}\n".format(v['min_fill'])
        munin_values += "underruns.value {}\n".format(v['num_underruns'])
        munin_values += "overruns.value {}\n".format(v['num_overruns'])

    print(munin_values)

elif len(sys.argv) == 2 and sys.argv[1] == "config":
    sock = connect()

    sock.send("config\n")

    config = json.loads(sock.recv(256))

    munin_config = config_template_top.format(title="dabmux ZMQ input buffers")

    for conf in config['config']:
        munin_config += config_template_individual.format(ident=get_id_from_uri(conf))

    print(munin_config)