Loading src/nbi/.gitlab-ci.yml +7 −1 Original line number Diff line number Diff line Loading @@ -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 Loading src/nbi/Dockerfile +1 −1 Original line number Diff line number Diff line Loading @@ -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"] src/nbi/service/NbiApplication.py +19 −12 Original line number Diff line number Diff line Loading @@ -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: Loading @@ -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) src/nbi/service/app.py +2 −0 Original line number Diff line number Diff line Loading @@ -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() Loading
src/nbi/.gitlab-ci.yml +7 −1 Original line number Diff line number Diff line Loading @@ -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 Loading
src/nbi/Dockerfile +1 −1 Original line number Diff line number Diff line Loading @@ -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"]
src/nbi/service/NbiApplication.py +19 −12 Original line number Diff line number Diff line Loading @@ -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: Loading @@ -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)
src/nbi/service/app.py +2 −0 Original line number Diff line number Diff line Loading @@ -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()