diff --git a/src/rubrix/server/server.py b/src/rubrix/server/server.py index 069137f419..0e266bd5b6 100644 --- a/src/rubrix/server/server.py +++ b/src/rubrix/server/server.py @@ -20,11 +20,11 @@ import os from pathlib import Path +import elasticsearch +from brotli_asgi import BrotliMiddleware from fastapi import FastAPI from fastapi.middleware.cors import CORSMiddleware -from brotli_asgi import BrotliMiddleware - -from pydantic import ValidationError +from pydantic import ConfigError, ValidationError from rubrix import __version__ as rubrix_version from rubrix.server.commons.errors import ( @@ -35,7 +35,9 @@ from rubrix.server.commons.static_rewrite import RewriteStaticFiles from rubrix.server.datasets.dao import DatasetsDAO, create_datasets_dao from rubrix.server.security import auth -from rubrix.server.tasks.commons.dao.dao import DatasetRecordsDAO, dataset_records_dao +from rubrix.server.tasks.commons.dao.dao import DatasetRecordsDAO + +from .commons.settings import settings from .commons.settings import settings as api_settings from .routes import api_router @@ -86,11 +88,19 @@ def configure_app_statics(app: FastAPI): def configure_app_startup(app: FastAPI): @app.on_event("startup") async def configure_elasticsearch(): - es_wrapper = create_es_wrapper() - datasets: DatasetsDAO = create_datasets_dao(es=es_wrapper) - dataset_records: DatasetRecordsDAO = dataset_records_dao(es=es_wrapper) - datasets.init() - dataset_records.init() + try: + es_wrapper = create_es_wrapper() + dataset_records: DatasetRecordsDAO = DatasetRecordsDAO(es_wrapper) + datasets: DatasetsDAO = DatasetsDAO.get_instance(es_wrapper) + datasets.init() + dataset_records.init() + except elasticsearch.exceptions.ConnectionError as error: + raise ConfigError( + f"Your Elasticsearch endpoint at {settings.elasticsearch} is not available or not responding." + "\nPlease make sure your Elasticsearch instance is launched and correctly running and you have the necessary access permissions. " + "Once you have verified this, restart the Rubrix server." + f"\nError detail: [{error}]" + ) def configure_app_security(app: FastAPI):