X-Git-Url: https://osm.etsi.org/gitweb/?a=blobdiff_plain;f=src%2Femuvim%2Fapi%2Fopenstack%2Fchain_api.py;h=21cb65be50e6e8d882dc460730a9d0c7d7b95f2d;hb=refs%2Fchanges%2F72%2F8172%2F2;hp=47af63cae6d56c33dfea5f0acbe447ad46f1e673;hpb=72f09885db3935e77901c3dee132cb176b927c7b;p=osm%2Fvim-emu.git diff --git a/src/emuvim/api/openstack/chain_api.py b/src/emuvim/api/openstack/chain_api.py index 47af63c..21cb65b 100755 --- a/src/emuvim/api/openstack/chain_api.py +++ b/src/emuvim/api/openstack/chain_api.py @@ -27,12 +27,17 @@ import json import logging import copy +# from gevent import monkey +from gevent.pywsgi import WSGIServer + from mininet.node import OVSSwitch from flask import Flask from flask import Response, request from flask_restful import Api, Resource +# monkey.patch_all() + class ChainApi(Resource): """ @@ -65,7 +70,6 @@ class ChainApi(Resource): resource_class_kwargs={'api': self}) self.api.add_resource(QueryTopology, "/v1/topo", resource_class_kwargs={'api': self}) - self.api.add_resource(Shutdown, "/shutdown") @self.app.after_request def add_access_control_header(response): @@ -75,9 +79,18 @@ class ChainApi(Resource): def _start_flask(self): logging.info("Starting %s endpoint @ http://%s:%d" % ("ChainDummyApi", self.ip, self.port)) - if self.app is not None: - self.app.before_request(self.dump_playbook) - self.app.run(self.ip, self.port, debug=True, use_reloader=False) + self.http_server = WSGIServer( + (self.ip, self.port), + self.app, + log=open("/dev/null", "w") # don't show http logs + ) + self.http_server.serve_forever(stop_timeout=1) + logging.info('Stopped %s' % self.__class__.__name__) + + def stop(self): + if self.http_server: + logging.info('Stopping %s' % self.__class__.__name__) + self.http_server.stop(timeout=1) def dump_playbook(self): with self.manage.lock: @@ -90,15 +103,6 @@ class ChainApi(Resource): logfile.write(data + "\n") -class Shutdown(Resource): - def get(self): - logging.debug(("%s is beeing shut down") % (__name__)) - func = request.environ.get('werkzeug.server.shutdown') - if func is None: - raise RuntimeError('Not running with the Werkzeug Server') - func() - - class ChainVersionsList(Resource): ''' Entrypoint to find versions of the chain api.