X-Git-Url: https://osm.etsi.org/gitweb/?p=osm%2FNBI.git;a=blobdiff_plain;f=osm_nbi%2Fnbi.py;h=63a6eca3c282748af88f831f141a9eda6a987c7b;hp=46c7c9b5c21bbb78f711e4dd5858819f9ec43348;hb=5c01e193a17fcf730406e39fe7d019e1dee5c64d;hpb=e86317875d395c37b3ded147b554ced8a8115358 diff --git a/osm_nbi/nbi.py b/osm_nbi/nbi.py index 46c7c9b..63a6eca 100644 --- a/osm_nbi/nbi.py +++ b/osm_nbi/nbi.py @@ -27,6 +27,7 @@ import sys from authconn import AuthException from auth import Authenticator from engine import Engine, EngineException +from subscriptions import SubscriptionThread from validation import ValidationError from osm_common.dbbase import DbException from osm_common.fsbase import FsException @@ -37,11 +38,13 @@ from os import environ, path __author__ = "Alfonso Tierno " -# TODO consider to remove and provide version using the static version file __version__ = "0.1.3" -version_date = "Apr 2018" +version_date = "Jan 2019" database_version = '1.0' auth_database_version = '1.0' +nbi_server = None # instance of Server class +subscription_thread = None # instance of SubscriptionThread class + """ North Bound Interface (O: OSM specific; 5,X: SOL005 not implemented yet; O5: SOL005 implemented) @@ -91,7 +94,7 @@ URL: /osm GET POST / 5 X /pdu/v1 - /pdu_descriptor O O + /pdu_descriptors O O / O O O O /admin/v1 @@ -210,6 +213,9 @@ class Server(object): "projects": {"METHODS": ("GET", "POST"), "": {"METHODS": ("GET", "DELETE")} }, + "roles": {"METHODS": ("GET", "POST"), + "": {"METHODS": ("GET", "POST", "DELETE")} + }, "vims": {"METHODS": ("GET", "POST"), "": {"METHODS": ("GET", "DELETE", "PATCH", "PUT")} }, @@ -898,13 +904,6 @@ class Server(object): # raise cherrypy.HTTPError(e.http_code.value, str(e)) -# def validate_password(realm, username, password): -# cherrypy.log("realm "+ str(realm)) -# if username == "admin" and password == "admin": -# return True -# return False - - def _start_service(): """ Callback function called when cherrypy.engine starts @@ -912,6 +911,8 @@ def _start_service(): Set database, storage, message configuration Init database with admin/admin user password """ + global nbi_server + global subscription_thread cherrypy.log.error("Starting osm_nbi") # update general cherrypy configuration update_dict = {} @@ -995,7 +996,19 @@ def _start_service(): cherrypy.tree.apps['/osm'].root.authenticator.start(engine_config) cherrypy.tree.apps['/osm'].root.engine.init_db(target_version=database_version) cherrypy.tree.apps['/osm'].root.authenticator.init_db(target_version=auth_database_version) - # getenv('OSMOPENMANO_TENANT', None) + + # start subscriptions thread: + subscription_thread = SubscriptionThread(config=engine_config, engine=nbi_server.engine) + subscription_thread.start() + # Do not capture except SubscriptionException + + # load and print version. Ignore possible errors, e.g. file not found + try: + with open("{}/version".format(engine_config["/static"]['tools.staticdir.dir'])) as version_file: + version_data = version_file.read() + cherrypy.log.error("Starting OSM NBI Version: {}".format(version_data.replace("\n", " "))) + except Exception: + pass def _stop_service(): @@ -1003,11 +1016,15 @@ def _stop_service(): Callback function called when cherrypy.engine stops TODO: Ending database connections. """ + global subscription_thread + subscription_thread.terminate() + subscription_thread = None cherrypy.tree.apps['/osm'].root.engine.stop() cherrypy.log.error("Stopping osm_nbi") def nbi(config_file): + global nbi_server # conf = { # '/': { # #'request.dispatch': cherrypy.dispatch.MethodDispatcher(), @@ -1025,9 +1042,10 @@ def nbi(config_file): # cherrypy.config.update({'tools.auth_basic.on': True, # 'tools.auth_basic.realm': 'localhost', # 'tools.auth_basic.checkpassword': validate_password}) + nbi_server = Server() cherrypy.engine.subscribe('start', _start_service) cherrypy.engine.subscribe('stop', _stop_service) - cherrypy.quickstart(Server(), '/osm', config_file) + cherrypy.quickstart(nbi_server, '/osm', config_file) def usage():