diff --git a/bin/kwapi-forwarder b/bin/kwapi-forwarder new file mode 100644 index 0000000..e0c2c55 --- /dev/null +++ b/bin/kwapi-forwarder @@ -0,0 +1,77 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# +# Author: François Rossigneux +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. + +import signal +import sys + +from oslo.config import cfg +import zmq + +from kwapi.openstack.common import log + +forwarder_opts = [ + cfg.MultiStrOpt('probes_endpoint', + required=True, + ), + cfg.StrOpt('forwarder_endpoint', + required=True, + ), +] + +cfg.CONF.register_opts(forwarder_opts) + + +def forwarder(): + """Listens probes_endpoints and forwards messages to the plugins.""" + LOG = log.getLogger('kwapi') + LOG.info('Collector listenig to %s' % cfg.CONF.probes_endpoint) + context = zmq.Context.instance() + frontend = context.socket(zmq.XPUB) + frontend.bind(cfg.CONF.forwarder_endpoint) + backend = context.socket(zmq.XSUB) + for endpoint in cfg.CONF.probes_endpoint: + backend.connect(endpoint) + poll = zmq.Poller() + poll.register(frontend, zmq.POLLIN) + poll.register(backend, zmq.POLLIN) + while True: + items = dict(poll.poll(1000)) + if items.get(backend) == zmq.POLLIN: + msg = backend.recv_multipart() + frontend.send_multipart(msg) + elif items.get(frontend) == zmq.POLLIN: + msg = frontend.recv() + backend.send(msg) + + +def signal_handler(signum, frame): + """Intercepts TERM signal.""" + if signum is signal.SIGTERM: + raise KeyboardInterrupt + + +if __name__ == '__main__': + cfg.CONF(sys.argv[1:], + project='kwapi', + default_config_files=['/etc/kwapi/forwarder.conf'] + ) + log.setup('kwapi') + signal.signal(signal.SIGTERM, signal_handler) + try: + forwarder() + except KeyboardInterrupt: + pass diff --git a/bin/kwapi-rrd b/bin/kwapi-rrd index 7be2ab1..5e73182 100755 --- a/bin/kwapi-rrd +++ b/bin/kwapi-rrd @@ -35,6 +35,5 @@ if __name__ == '__main__': project='kwapi', default_config_files=['/etc/kwapi/rrd.conf']) log.setup('kwapi') - root = app.make_app() root.run(host='0.0.0.0', port=cfg.CONF.rrd_port) diff --git a/etc/kwapi/api.conf b/etc/kwapi/api.conf index 76cff7f..70fdb9c 100644 --- a/etc/kwapi/api.conf +++ b/etc/kwapi/api.conf @@ -2,17 +2,17 @@ [DEFAULT] -# ACL -acl_enabled = true -policy_file = /etc/kwapi/policy.json +# Communication +api_port = 5000 +probes_endpoint = ipc:///tmp/kwapi-forwarder # Signature signature_checking = true driver_metering_secret = Change This Or Be Hacked -# Communication -api_port = 5000 -probes_endpoint = ipc:///tmp/kwapi +# ACL +acl_enabled = true +policy_file = /etc/kwapi/policy.json # Timers cleaning_interval = 300 diff --git a/etc/kwapi/drivers.conf b/etc/kwapi/drivers.conf index f05d960..7e46569 100644 --- a/etc/kwapi/drivers.conf +++ b/etc/kwapi/drivers.conf @@ -3,7 +3,7 @@ [DEFAULT] # Communication -probes_endpoint = ipc:///tmp/kwapi +probes_endpoint = ipc:///tmp/kwapi-drivers # Signature enable_signing = true diff --git a/etc/kwapi/forwarder.conf b/etc/kwapi/forwarder.conf new file mode 100644 index 0000000..cad0f24 --- /dev/null +++ b/etc/kwapi/forwarder.conf @@ -0,0 +1,11 @@ +# Kwapi config file + +[DEFAULT] + +# Communication +forwarder_endpoint = ipc:///tmp/kwapi-forwarder +probes_endpoint = ipc:///tmp/kwapi-drivers + +# Log files +log_file = /tmp/kwapi-forwarder.log +verbose = true diff --git a/etc/kwapi/rrd.conf b/etc/kwapi/rrd.conf index 93b24b7..3e633b7 100644 --- a/etc/kwapi/rrd.conf +++ b/etc/kwapi/rrd.conf @@ -4,7 +4,7 @@ # Communication rrd_port = 8080 -probes_endpoint = ipc:///tmp/kwapi +probes_endpoint = ipc:///tmp/kwapi-forwarder # Signature signature_checking = true diff --git a/setup.py b/setup.py index 6f8c25a..68feca9 100755 --- a/setup.py +++ b/setup.py @@ -55,6 +55,7 @@ setuptools.setup( package_data={'kwapi.plugins.rrd': ['templates/*', 'static/*']}, scripts=['bin/kwapi-api', + 'bin/kwapi-forwarder', 'bin/kwapi-drivers', 'bin/kwapi-rrd'],