aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rwxr-xr-xdoc/stats_dabmux_multi.py8
-rw-r--r--gui/muxconfig.py50
-rwxr-xr-xgui/odr-dabmux-gui.py22
3 files changed, 52 insertions, 28 deletions
diff --git a/doc/stats_dabmux_multi.py b/doc/stats_dabmux_multi.py
index a2587a4..05f52af 100755
--- a/doc/stats_dabmux_multi.py
+++ b/doc/stats_dabmux_multi.py
@@ -101,13 +101,13 @@ if len(sys.argv) == 1:
munin_values = ""
for ident in values:
v = values[ident]['inputstat']
- munin_values += "multigraph buffers_{ident}\n".format(ident=ident)
+ munin_values += "multigraph buffers_{ident}\n".format(ident=ident.replace('-', '_'))
munin_values += "high.value {}\n".format(v['max_fill'])
munin_values += "low.value {}\n".format(v['min_fill'])
- munin_values += "multigraph over_underruns_{ident}\n".format(ident=ident)
+ munin_values += "multigraph over_underruns_{ident}\n".format(ident=ident.replace('-', '_'))
munin_values += "underruns.value {}\n".format(v['num_underruns'])
munin_values += "overruns.value {}\n".format(v['num_overruns'])
- munin_values += "multigraph audio_levels_{ident}\n".format(ident=ident)
+ munin_values += "multigraph audio_levels_{ident}\n".format(ident=ident.replace('-', '_'))
munin_values += "left.value {}\n".format(v['peak_left'])
munin_values += "right.value {}\n".format(v['peak_right'])
@@ -123,7 +123,7 @@ elif len(sys.argv) == 2 and sys.argv[1] == "config":
munin_config = config_top
for conf in config['config']:
- munin_config += config_template.format(ident=conf)
+ munin_config += config_template.format(ident=conf.replace('-', '_'))
print(munin_config)
else:
diff --git a/gui/muxconfig.py b/gui/muxconfig.py
index 4b307fd..35587f4 100644
--- a/gui/muxconfig.py
+++ b/gui/muxconfig.py
@@ -27,7 +27,8 @@ class General(object):
"""Container object for general options"""
def __init__(self, pt):
ptree = pt['general']
- for fieldname in ["nbframes",
+ for fieldname in [
+ "nbframes",
"statsserverport",
"writescca",
"tist",
@@ -44,7 +45,8 @@ class Service(object):
def __init__(self, name, ptree):
self.name = name
- for fieldname in ['id',
+ for fieldname in [
+ "id",
"label",
"shortlabel",
"pty",
@@ -58,7 +60,8 @@ class Subchannel(object):
"""Container object for a subchannel"""
def __init__(self, name, ptree):
self.name = name
- for fieldname in ['type',
+ for fieldname in [
+ "type",
"inputfile",
"zmq-buffer",
"zmq-prebuffering",
@@ -97,20 +100,33 @@ class ConfigurationHandler(object):
self._config = None
self._statistics = None
+ #self._ctx = zmq.Context()
+ #self.sock = zmq.Socket(self._ctx, zmq.REQ)
+ #self.sock.setsockopt(zmq.LINGER, 0)
+ #self.sock.connect("tcp://{}:{}".format(self._host, self._port))
+
+ def zRead(self, key):
self._ctx = zmq.Context()
self.sock = zmq.Socket(self._ctx, zmq.REQ)
+ self.sock.setsockopt(zmq.LINGER, 0)
self.sock.connect("tcp://{}:{}".format(self._host, self._port))
+ self.sock.send(key)
+
+ # use poll for timeouts:
+ poller = zmq.Poller()
+ poller.register(self.sock, zmq.POLLIN)
+ if poller.poll(5*1000): # 5s timeout in milliseconds
+ recv = self.sock.recv()
+ self.sock.close()
+ self._ctx.term()
+ return recv
+ else:
+ raise IOError("Timeout processing ZMQ request")
def load(self):
- """Load the configuration from the multiplexer and
- save it locally"""
- self.sock.send(b'info')
- server_info = self.sock.recv()
-
- self.sock.send(b'getptree')
- config_info = self.sock.recv()
-
- print("Config '%r'" % config_info)
+ """Load the configuration from the multiplexer and save it locally"""
+ server_info = self.zRead(b'info')
+ config_info = self.zRead(b'getptree')
self._server_version = json.loads(server_info)['service']
self._config = json.loads(config_info)
@@ -118,17 +134,13 @@ class ConfigurationHandler(object):
def update_stats(self):
"""Load the statistics from the multiplexer and
save them locally"""
-
- self.sock.send(b'info')
- server_info = self.sock.recv()
-
- self.sock.send(b'values')
- stats_info = self.sock.recv()
+ server_info = self.zRead(b'info')
+ stats_info = self.zRead(b'values')
self._statistics = json.loads(stats_info)['values']
def get_full_configuration(self):
- return json.dumps(self._config, indent=4)
+ return self._config
def set_full_configuration(self, config_json):
self.sock.send(b'setptree', flags=zmq.SNDMORE)
diff --git a/gui/odr-dabmux-gui.py b/gui/odr-dabmux-gui.py
index caa4ea7..85098f8 100755
--- a/gui/odr-dabmux-gui.py
+++ b/gui/odr-dabmux-gui.py
@@ -31,7 +31,7 @@ from muxconfig import *
from bottle import route, run, template, static_file, request
import json
-conf = ConfigurationHandler('localhost')
+import argparse
@route('/config')
def config():
@@ -63,7 +63,7 @@ def config_json_post():
return template('configeditor',
version = conf.get_mux_version(),
- config = conf.get_full_configuration(),
+ config = json.dumps(conf.get_full_configuration(), indent=4),
message = successmessage)
@route('/config.json', method="GET")
@@ -73,8 +73,8 @@ def config_json_get():
conf.load()
- return {'version': conf.get_mux_version(),
- 'config': conf.get_full_configuration()}
+ return { 'version': conf.get_mux_version(),
+ 'config': conf.get_full_configuration() }
@route('/')
@@ -112,5 +112,17 @@ def stats_json():
def send_static(filename):
return static_file(filename, root='./static')
-run(host='localhost', port=8000, debug=True, reloader=True)
+
+if __name__ == '__main__':
+ # Get configuration file in argument
+ parser = argparse.ArgumentParser(description='management server for ODR-DabMux')
+ parser.add_argument('--host', default='127.0.0.1', help='socket host (default: 127.0.0.1)',required=False)
+ parser.add_argument('--port', default='8000', help='socket port (default: 8000)',required=False)
+ parser.add_argument('--mhost', default='127.0.0.1', help='mux host (default: 127.0.0.1)',required=False)
+ parser.add_argument('--mport', default='12720', help='mux port (default: 12720)',required=False)
+ cli_args = parser.parse_args()
+
+ conf = ConfigurationHandler(cli_args.mhost, cli_args.mport)
+
+ run(host=cli_args.host, port=int(cli_args.port), debug=True, reloader=False)