Commit 3cbdaf3d authored by Lluis Gifre Renom's avatar Lluis Gifre Renom
Browse files

NBI component:

- Corrected gunicorn-consumed symbol
- Extended dump_configuration() to dump configured websocket namespaces
- Added missing environment variables in unitary test
- Minor code polishing
parent 9c366d8b
Loading
Loading
Loading
Loading
+7 −1
Original line number Diff line number Diff line
@@ -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
+1 −1
Original line number Diff line number Diff line
@@ -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"]
+19 −12
Original line number Diff line number Diff line
@@ -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)
+2 −0
Original line number Diff line number Diff line
@@ -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()