X-Git-Url: https://osm.etsi.org/gitweb/?p=osm%2Fvim-emu.git;a=blobdiff_plain;f=src%2Femuvim%2Fapi%2Frest%2Frest_api_endpoint.py;h=a980dc901ce292c627173dbcd093a0e049fd73ca;hp=10b6c26fa318ea077ea7467c05a775387fa36092;hb=3e16acbebd2c6669c1bbe5a7e3bb313aa1494e20;hpb=78faf0ec78bffc066105e090646b13faa6a26305 diff --git a/src/emuvim/api/rest/rest_api_endpoint.py b/src/emuvim/api/rest/rest_api_endpoint.py index 10b6c26..a980dc9 100755 --- a/src/emuvim/api/rest/rest_api_endpoint.py +++ b/src/emuvim/api/rest/rest_api_endpoint.py @@ -14,7 +14,7 @@ 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. -Neither the name of the SONATA-NFV [, ANY ADDITIONAL AFFILIATION] +Neither the name of the SONATA-NFV, Paderborn University nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. @@ -30,7 +30,7 @@ import logging import threading from flask import Flask from flask_restful import Api -from gevent.wsgi import WSGIServer +from gevent.pywsgi import WSGIServer # need to import total module to set its global variable dcs import compute @@ -46,7 +46,7 @@ from monitor import MonitorInterfaceAction, MonitorFlowAction, MonitorLinkAction import pkg_resources from os import path -logging.basicConfig(level=logging.INFO) +logging.basicConfig() class RestApiEndpoint(object): @@ -56,10 +56,13 @@ class RestApiEndpoint(object): default command line client. """ - def __init__(self, listenip, port): + def __init__(self, listenip, port, DCnetwork=None): self.ip = listenip self.port = port + # connect this DC network to the rest api endpoint (needed for the networking and monitoring api) + self.connectDCNetwork(DCnetwork) + # setup Flask # find directory of dashboard files dashboard_file = pkg_resources.resource_filename('emuvim.dashboard', "index.html") @@ -124,17 +127,21 @@ class RestApiEndpoint(object): self.__class__.__name__, self.ip, self.port)) def start(self): - thread = threading.Thread(target=self._start_flask, args=()) - thread.daemon = True - thread.start() + self.thread = threading.Thread(target=self._start_flask, args=()) + self.thread.daemon = True + self.thread.start() logging.info("Started API endpoint @ http://%s:%d" % (self.ip, self.port)) + def stop(self): + if self.http_server: + self.http_server.close() + def _start_flask(self): #self.app.run(self.ip, self.port, debug=False, use_reloader=False) #this should be a more production-fit http-server #self.app.logger.setLevel(logging.ERROR) - http_server = WSGIServer((self.ip, self.port), + self.http_server = WSGIServer((self.ip, self.port), self.app, log=open("/dev/null", "w") # This disables HTTP request logs to not mess up the CLI when e.g. the auto-updated dashboard is used ) - http_server.serve_forever() + self.http_server.serve_forever()