prometheus-mumble/mprom/server.py

63 lines
1.9 KiB
Python
Raw Normal View History

2016-05-24 04:39:09 +02:00
from __future__ import print_function
import sys
import prometheus_client as node
from contextlib import contextmanager
import argparse, time
import Ice, Murmur
@contextmanager
def ice_connect(host, port):
prxstr = "Meta:tcp -h %s -p %d -t 1000" % (host, port)
ic = Ice.initialize(sys.argv)
base = ic.stringToProxy(prxstr)
meta = Murmur.MetaPrx.checkedCast(base)
if not meta:
print('cannot establish connection', file=sys.stderr)
sys.exit(1)
yield meta
if ic:
ic.destroy()
def main():
parser = argparse.ArgumentParser(description='Prometheus statistics for a Mumble ICE interface')
2016-05-24 16:25:24 +02:00
parser.add_argument('-l', '--listen', help='Port to listen on', default=9123, type=int)
2016-05-24 04:39:09 +02:00
parser.add_argument('-H', '--host', help='Host of the Ice interface', default='127.0.0.1')
2016-05-24 16:25:24 +02:00
parser.add_argument('-p', '--port', help='Port of the Ice interface', default=6502, type=int)
parser.add_argument('-i', '--interval', help='Interval in seconds', default=60, type=int)
2016-05-24 04:39:09 +02:00
args = parser.parse_args()
2016-05-24 16:25:24 +02:00
node.start_http_server(args.listen)
2016-05-24 04:39:09 +02:00
2016-05-24 16:25:36 +02:00
gauges = {
'users': node.Gauge('mumble_users_connected', 'Number of connected users',
['ice_server', 'server_id']),
'uptime': node.Gauge('mumble_uptime', 'Virtual uptime',
['ice_server', 'server_id']),
}
ice_server = '%s:%d' % (ags.host, args.port)
2016-05-24 04:39:09 +02:00
while True:
t1 = time.time()
with ice_connect(args.host, args.port) as meta:
for server in meta.getBootedServers():
2016-05-24 16:25:36 +02:00
labels = {'server_id': server.id(), 'ice_server': ice_server}
gauges['users'].labels(labels).set(len(server.getUsers()))
gauges['uptime'].labels(labels).set(server.getUptime())
2016-05-24 04:39:09 +02:00
time_to_wait = args.interval - (time.time() - t1)
if time_to_wait > 0:
time.sleep(time_to_wait)
return 0
if __name__ == '__main__':
sys.exit(main())