aboutsummaryrefslogtreecommitdiffstats
path: root/doc
diff options
context:
space:
mode:
authorMatthias P. Braendli <matthias.braendli@mpb.li>2017-10-16 14:06:19 +0200
committerMatthias P. Braendli <matthias.braendli@mpb.li>2017-10-16 14:06:19 +0200
commite91ff1f3b5193713f2fef7876db40c4af5cbc01b (patch)
tree5c91bfbf153b09594b4922feba258ea05370a411 /doc
parent7a57fb48c25b0dae4e372b8e522f308c589bb35e (diff)
downloaddabmux-e91ff1f3b5193713f2fef7876db40c4af5cbc01b.tar.gz
dabmux-e91ff1f3b5193713f2fef7876db40c4af5cbc01b.tar.bz2
dabmux-e91ff1f3b5193713f2fef7876db40c4af5cbc01b.zip
Merge state management command into values, adapt munin accordingly
Diffstat (limited to 'doc')
-rwxr-xr-xdoc/stats_dabmux_multi.py26
-rwxr-xr-xdoc/zmq_remote.py48
2 files changed, 53 insertions, 21 deletions
diff --git a/doc/stats_dabmux_multi.py b/doc/stats_dabmux_multi.py
index 664f2f1..ff6f0a4 100755
--- a/doc/stats_dabmux_multi.py
+++ b/doc/stats_dabmux_multi.py
@@ -7,10 +7,13 @@ import sys
import json
import zmq
import os
+import re
config_top = """
"""
+#default data type is GAUGE
+
config_template = """
multigraph buffers_{ident}
graph_title Contribution {ident} buffer
@@ -68,6 +71,19 @@ right.min -90
right.max 0
right.warning -40:0
right.critical -80:0
+
+multigraph state_{ident}
+graph_title State of contribution {ident}
+graph_order state
+graph_args --base 1000 --lower-limit 0 --upper-limit 5
+graph_vlabel Current state of the input
+graph_category dabmux
+graph_info This graph shows the state for the {ident} ZMQ input
+
+state.info Input state
+state.label 0 Unknown, 1 NoData, 2 Unstable, 3 Silent, 4 Streaming
+state.warning 4:4
+state.critical 2:4
"""
ctx = zmq.Context()
@@ -93,6 +109,8 @@ def connect():
return sock
+re_state = re.compile(r"\w+ (\d+)")
+
if len(sys.argv) == 1:
sock = connect()
sock.send("values")
@@ -111,6 +129,14 @@ if len(sys.argv) == 1:
munin_values += "left.value {}\n".format(v['peak_left'])
munin_values += "right.value {}\n".format(v['peak_right'])
+ if 'state' in v:
+ # If ODR-DabMux is v1.3.1-3 or older, it doesn't export state
+ match = re_state.match(v['state'])
+ if match:
+ munin_values += "state.value {}\n".format(match.group(1))
+ else:
+ print("Cannot parse state '{}'".format(v['state']))
+
print(munin_values)
elif len(sys.argv) == 2 and sys.argv[1] == "config":
diff --git a/doc/zmq_remote.py b/doc/zmq_remote.py
index 155390b..47da520 100755
--- a/doc/zmq_remote.py
+++ b/doc/zmq_remote.py
@@ -12,6 +12,9 @@ context = zmq.Context()
sock = context.socket(zmq.REQ)
+poller = zmq.Poller()
+poller.register(sock, zmq.POLLIN)
+
if len(sys.argv) < 2:
print("Usage: program url cmd [args...]")
sys.exit(1)
@@ -22,34 +25,37 @@ message_parts = sys.argv[2:]
# first do a ping test
-print("Send ping")
-sock.send("ping".encode())
-data = sock.recv_multipart()
+print("ping")
+sock.send(b"ping")
-if len(data) != 1:
- print("Received invalid number of parts: {}".format(len(data)))
- for i,part in enumerate(data):
- print(" {}".format(part))
- sys.exit(1)
+socks = dict(poller.poll(1000))
+if socks:
+ if socks.get(sock) == zmq.POLLIN:
-if data[0] != b'ok':
- print("Received invalid ping response: {}".format(data.decode()))
- sys.exit(1)
+ data = sock.recv_multipart()
+ print("Received: {}".format(len(data)))
+ for i,part in enumerate(data):
+ print(" {}".format(part))
+
+ for i, part in enumerate(message_parts):
+ if i == len(message_parts) - 1:
+ f = 0
+ else:
+ f = zmq.SNDMORE
-print("Ping ok, sending request '{}'...".format(" ".join(message_parts)))
+ print("Send {}({}): '{}'".format(i, f, part))
-for i, part in enumerate(message_parts):
- if i == len(message_parts) - 1:
- f = 0
- else:
- f = zmq.SNDMORE
+ sock.send(part.encode(), flags=f)
- sock.send(part.encode(), flags=f)
+ data = sock.recv_multipart()
-data = sock.recv_multipart()
+ print("Received: {}".format(len(data)))
+ for i,part in enumerate(data):
+ print(" RX {}: {}".format(i, part))
-print("Received {} entries:".format(len(data)))
-print(" " + " ".join([d.decode() for d in data]))
+else:
+ print("ZMQ error: timeout")
+ context.destroy(linger=5)
# This is free and unencumbered software released into the public domain.
#