From 3cbdaf3d67d20985d0c238942e93bfa3f2cd4e47 Mon Sep 17 00:00:00 2001 From: gifrerenom <lluis.gifre@cttc.es> Date: Mon, 3 Feb 2025 08:20:36 +0000 Subject: [PATCH] NBI component: - Corrected gunicorn-consumed symbol - Extended dump_configuration() to dump configured websocket namespaces - Added missing environment variables in unitary test - Minor code polishing --- src/nbi/.gitlab-ci.yml | 8 +++++++- src/nbi/Dockerfile | 2 +- src/nbi/service/NbiApplication.py | 31 +++++++++++++++++++------------ src/nbi/service/app.py | 2 ++ 4 files changed, 29 insertions(+), 14 deletions(-) diff --git a/src/nbi/.gitlab-ci.yml b/src/nbi/.gitlab-ci.yml index d97fab701..0bcf058fb 100644 --- a/src/nbi/.gitlab-ci.yml +++ b/src/nbi/.gitlab-ci.yml @@ -62,7 +62,13 @@ unit_test nbi: fi script: - docker pull "$CI_REGISTRY_IMAGE/$IMAGE_NAME:$IMAGE_TAG" - - docker run --name $IMAGE_NAME -d -v "$PWD/src/$IMAGE_NAME/tests:/opt/results" --network=teraflowbridge $CI_REGISTRY_IMAGE/$IMAGE_NAME:$IMAGE_TAG + - > + docker run --name $IMAGE_NAME -d -v "$PWD/src/$IMAGE_NAME/tests:/opt/results" + --network=teraflowbridge + --env LOG_LEVEL=DEBUG + --env FLASK_ENV=development + --env IETF_NETWORK_RENDERER=LIBYANG + $CI_REGISTRY_IMAGE/$IMAGE_NAME:$IMAGE_TAG - sleep 5 - docker ps -a - docker logs $IMAGE_NAME diff --git a/src/nbi/Dockerfile b/src/nbi/Dockerfile index 5cddaf117..bd6ce77c7 100644 --- a/src/nbi/Dockerfile +++ b/src/nbi/Dockerfile @@ -90,4 +90,4 @@ COPY src/tests/tools/mock_osm/. tests/tools/mock_osm/ # Start the service #ENTRYPOINT ["gunicorn", "-w", "4", "--worker-class", "eventlet", "-b", "0.0.0.0:8080", "nbi.service:nbi_app"] -ENTRYPOINT ["gunicorn", "-w", "4", "--worker-class", "geventwebsocket.gunicorn.workers.GeventWebSocketWorker", "-b", "0.0.0.0:8080", "nbi.service.app:nbi_app"] +ENTRYPOINT ["gunicorn", "-w", "4", "--worker-class", "geventwebsocket.gunicorn.workers.GeventWebSocketWorker", "-b", "0.0.0.0:8080", "nbi.service.app:app"] diff --git a/src/nbi/service/NbiApplication.py b/src/nbi/service/NbiApplication.py index 16e699810..9d17b8831 100644 --- a/src/nbi/service/NbiApplication.py +++ b/src/nbi/service/NbiApplication.py @@ -35,32 +35,39 @@ class NbiApplication: if base_url is None: base_url = '' self.base_url = base_url - self.app = Flask(__name__) - self.app.after_request(log_request) - self.api = Api(self.app, prefix=base_url) + self._app = Flask(__name__) + self._app.after_request(log_request) + self._api = Api(self._app, prefix=base_url) #websocket_path = '/'.join([base_url.rstrip('/'), 'websocket']) - self.sio = SocketIO(self.app, path=base_url, cors_allowed_origins="*") + self._sio = SocketIO(self._app, path=base_url, cors_allowed_origins="*") def add_rest_api_resource(self, resource_class : Resource, *urls, **kwargs) -> None: - self.api.add_resource(resource_class, *urls, **kwargs) + self._api.add_resource(resource_class, *urls, **kwargs) def add_websocket_namespace(self, namespace_class : Namespace, namespace_url : str) -> None: - self.sio.on_namespace(namespace_class(namespace=namespace_url)) + self._sio.on_namespace(namespace_class(namespace=namespace_url)) def websocket_emit_message( self, event : str, *args : Any, namespace : str = "/", to : Optional[str] = None ) -> None: - self.sio.emit(event, *args, namespace=namespace, to=to) + self._sio.emit(event, *args, namespace=namespace, to=to) + + def get_flask_app(self) -> Flask: + return self._app def dump_configuration(self) -> None: - LOGGER.debug('Configured Resources:') - for resource in self.api.resources: + LOGGER.debug('Configured REST-API Resources:') + for resource in self._api.resources: LOGGER.debug(' - {:s}'.format(str(resource))) - LOGGER.debug('Configured Rules:') - for rule in self.app.url_map.iter_rules(): + LOGGER.debug('Configured Flask Rules:') + for rule in self._app.url_map.iter_rules(): LOGGER.debug(' - {:s}'.format(str(rule))) + LOGGER.debug('Configured WebSocket Namespaces:') + for namespace in self._sio.server.handlers.keys(): + LOGGER.debug(' - {:s}'.format(str(namespace))) + def run_standalone( self, bind_address : Optional[str] = None, bind_port : Optional[int] = None ) -> None: @@ -75,4 +82,4 @@ class NbiApplication: endpoint = '/'.join([endpoint.rstrip('/'), self.base_url]) LOGGER.info('Listening on {:s}...'.format(endpoint)) - self.sio.run(self.app, host=bind_address, port=bind_port) + self._sio.run(self._app, host=bind_address, port=bind_port) diff --git a/src/nbi/service/app.py b/src/nbi/service/app.py index db696efd6..320e7b344 100644 --- a/src/nbi/service/app.py +++ b/src/nbi/service/app.py @@ -107,3 +107,5 @@ if __name__ == '__main__': nbi_app.run_standalone( bind_address=BIND_ADDRESS, bind_port=BIND_PORT ) +else: + app = nbi_app.get_flask_app() -- GitLab