diff --git a/packages/service-library/requirements/_fastapi.in b/packages/service-library/requirements/_fastapi.in index e11871af331f..1ea0f1c0477d 100644 --- a/packages/service-library/requirements/_fastapi.in +++ b/packages/service-library/requirements/_fastapi.in @@ -7,6 +7,7 @@ fastapi +fastapi-lifespan-manager httpx opentelemetry-instrumentation-fastapi opentelemetry-instrumentation-httpx diff --git a/packages/service-library/requirements/_fastapi.txt b/packages/service-library/requirements/_fastapi.txt index 23d7a0ec7eeb..3c186888478c 100644 --- a/packages/service-library/requirements/_fastapi.txt +++ b/packages/service-library/requirements/_fastapi.txt @@ -23,6 +23,10 @@ deprecated==1.2.17 # opentelemetry-api # opentelemetry-semantic-conventions fastapi==0.115.7 + # via + # -r requirements/_fastapi.in + # fastapi-lifespan-manager +fastapi-lifespan-manager==0.1.4 # via -r requirements/_fastapi.in h11==0.14.0 # via diff --git a/packages/service-library/src/servicelib/fastapi/lifespan_utils.py b/packages/service-library/src/servicelib/fastapi/lifespan_utils.py new file mode 100644 index 000000000000..ee2808078e6c --- /dev/null +++ b/packages/service-library/src/servicelib/fastapi/lifespan_utils.py @@ -0,0 +1,20 @@ +from collections.abc import AsyncIterator +from typing import Protocol + +from fastapi import FastAPI +from fastapi_lifespan_manager import LifespanManager, State + + +class LifespanGenerator(Protocol): + def __call__(self, app: FastAPI) -> AsyncIterator["State"]: + ... + + +def combine_lifespans(*generators: LifespanGenerator) -> LifespanManager: + + manager = LifespanManager() + + for generator in generators: + manager.add(generator) + + return manager diff --git a/packages/service-library/src/servicelib/fastapi/profiler_middleware.py b/packages/service-library/src/servicelib/fastapi/profiler.py similarity index 91% rename from packages/service-library/src/servicelib/fastapi/profiler_middleware.py rename to packages/service-library/src/servicelib/fastapi/profiler.py index 43c46c7ba9d1..cb3e7c5c0840 100644 --- a/packages/service-library/src/servicelib/fastapi/profiler_middleware.py +++ b/packages/service-library/src/servicelib/fastapi/profiler.py @@ -1,5 +1,6 @@ from typing import Any, Final +from fastapi import FastAPI from servicelib.aiohttp import status from servicelib.mimetype_constants import MIMETYPE_APPLICATION_JSON from starlette.requests import Request @@ -13,7 +14,7 @@ ) -def is_last_response(response_headers: dict[bytes, bytes], message: dict[str, Any]): +def _is_last_response(response_headers: dict[bytes, bytes], message: dict[str, Any]): if ( content_type := response_headers.get(b"content-type") ) and content_type == MIMETYPE_APPLICATION_JSON.encode(): @@ -79,7 +80,7 @@ async def _send_wrapper(message): response_headers = dict(message.get("headers")) message["headers"] = check_response_headers(response_headers) elif message["type"] == "http.response.body": - if is_last_response(response_headers, message): + if _is_last_response(response_headers, message): _profiler.stop() profile_text = _profiler.output_text( unicode=True, color=True, show_all=True @@ -96,3 +97,8 @@ async def _send_wrapper(message): finally: _profiler.reset() + + +def initialize_profiler(app: FastAPI) -> None: + # NOTE: this cannot be ran once the application is started + app.add_middleware(ProfilerMiddleware) diff --git a/packages/service-library/src/servicelib/fastapi/prometheus_instrumentation.py b/packages/service-library/src/servicelib/fastapi/prometheus_instrumentation.py index 847585c52fc2..c9b9fb581708 100644 --- a/packages/service-library/src/servicelib/fastapi/prometheus_instrumentation.py +++ b/packages/service-library/src/servicelib/fastapi/prometheus_instrumentation.py @@ -1,28 +1,62 @@ # pylint: disable=protected-access +from collections.abc import AsyncIterator + from fastapi import FastAPI +from fastapi_lifespan_manager import State from prometheus_client import CollectorRegistry from prometheus_fastapi_instrumentator import Instrumentator -def setup_prometheus_instrumentation(app: FastAPI) -> Instrumentator: +def initialize_prometheus_instrumentation(app: FastAPI) -> None: + # NOTE: this cannot be ran once the application is started + # NOTE: use that registry to prevent having a global one app.state.prometheus_registry = registry = CollectorRegistry(auto_describe=True) - instrumentator = Instrumentator( + app.state.prometheus_instrumentator = Instrumentator( should_instrument_requests_inprogress=False, # bug in https://github.com/trallnag/prometheus-fastapi-instrumentator/issues/317 inprogress_labels=False, registry=registry, - ).instrument(app) + ) + app.state.prometheus_instrumentator.instrument(app) + + +def _startup(app: FastAPI) -> None: + assert isinstance(app.state.prometheus_instrumentator, Instrumentator) # nosec + app.state.prometheus_instrumentator.expose(app, include_in_schema=False) + + +def _shutdown(app: FastAPI) -> None: + assert isinstance(app.state.prometheus_registry, CollectorRegistry) # nosec + registry = app.state.prometheus_registry + for collector in list(registry._collector_to_names.keys()): # noqa: SLF001 + registry.unregister(collector) + + +def get_prometheus_instrumentator(app: FastAPI) -> Instrumentator: + assert isinstance(app.state.prometheus_instrumentator, Instrumentator) # nosec + return app.state.prometheus_instrumentator + + +def setup_prometheus_instrumentation(app: FastAPI) -> Instrumentator: + initialize_prometheus_instrumentation(app) async def _on_startup() -> None: - instrumentator.expose(app, include_in_schema=False) + _startup(app) - def _unregister() -> None: - # NOTE: avoid registering collectors multiple times when running unittests consecutively (https://stackoverflow.com/a/62489287) - for collector in list(registry._collector_to_names.keys()): # noqa: SLF001 - registry.unregister(collector) + def _on_shutdown() -> None: + _shutdown(app) app.add_event_handler("startup", _on_startup) - app.add_event_handler("shutdown", _unregister) - return instrumentator + app.add_event_handler("shutdown", _on_shutdown) + + return get_prometheus_instrumentator(app) + + +async def lifespan_prometheus_instrumentation(app: FastAPI) -> AsyncIterator[State]: + # NOTE: requires ``initialize_prometheus_instrumentation`` to be called before the + # lifespan of the applicaiton runs, usually rigth after the ``FastAPI`` instance is created + _startup(app) + yield {} + _shutdown(app) diff --git a/packages/service-library/src/servicelib/fastapi/tracing.py b/packages/service-library/src/servicelib/fastapi/tracing.py index e2cce12c319b..04e20b84e579 100644 --- a/packages/service-library/src/servicelib/fastapi/tracing.py +++ b/packages/service-library/src/servicelib/fastapi/tracing.py @@ -3,8 +3,10 @@ """ import logging +from collections.abc import AsyncIterator from fastapi import FastAPI +from fastapi_lifespan_manager import State from httpx import AsyncClient, Client from opentelemetry import trace from opentelemetry.exporter.otlp.proto.http.trace_exporter import ( @@ -15,6 +17,7 @@ from opentelemetry.sdk.resources import Resource from opentelemetry.sdk.trace import TracerProvider from opentelemetry.sdk.trace.export import BatchSpanProcessor +from servicelib.fastapi.lifespan_utils import LifespanGenerator from servicelib.logging_utils import log_context from settings_library.tracing import TracingSettings from yarl import URL @@ -131,5 +134,15 @@ def setup_tracing( RequestsInstrumentor().instrument() +def get_lifespan_tracing( + tracing_settings: TracingSettings, service_name: str +) -> LifespanGenerator: + async def _(app: FastAPI) -> AsyncIterator[State]: + setup_tracing(app, tracing_settings, service_name) + yield {} + + return _ + + def setup_httpx_client_tracing(client: AsyncClient | Client): HTTPXClientInstrumentor.instrument_client(client) diff --git a/packages/service-library/tests/fastapi/test_lifespan_utils.py b/packages/service-library/tests/fastapi/test_lifespan_utils.py new file mode 100644 index 000000000000..b3619815db88 --- /dev/null +++ b/packages/service-library/tests/fastapi/test_lifespan_utils.py @@ -0,0 +1,40 @@ +from collections.abc import AsyncIterator + +import asgi_lifespan +import pytest +from fastapi import FastAPI +from fastapi_lifespan_manager import State +from servicelib.fastapi.lifespan_utils import combine_lifespans + + +async def test_multiple_lifespan_managers(capsys: pytest.CaptureFixture): + async def database_lifespan(app: FastAPI) -> AsyncIterator[State]: + _ = app + print("setup DB") + yield {} + print("shutdown DB") + + async def cache_lifespan(app: FastAPI) -> AsyncIterator[State]: + _ = app + print("setup CACHE") + yield {} + print("shutdown CACHE") + + app = FastAPI(lifespan=combine_lifespans(database_lifespan, cache_lifespan)) + + capsys.readouterr() + + async with asgi_lifespan.LifespanManager(app): + messages = capsys.readouterr().out + + assert "setup DB" in messages + assert "setup CACHE" in messages + assert "shutdown DB" not in messages + assert "shutdown CACHE" not in messages + + messages = capsys.readouterr().out + + assert "setup DB" not in messages + assert "setup CACHE" not in messages + assert "shutdown DB" in messages + assert "shutdown CACHE" in messages diff --git a/services/agent/requirements/_base.txt b/services/agent/requirements/_base.txt index 30d644e3a42f..b4bb9f796d9a 100644 --- a/services/agent/requirements/_base.txt +++ b/services/agent/requirements/_base.txt @@ -92,6 +92,9 @@ fastapi==0.115.5 # via # -r requirements/../../../packages/service-library/requirements/_fastapi.in # -r requirements/_base.in + # fastapi-lifespan-manager +fastapi-lifespan-manager==0.1.4 + # via -r requirements/../../../packages/service-library/requirements/_fastapi.in faststream==0.5.31 # via -r requirements/../../../packages/service-library/requirements/_base.in frozenlist==1.5.0 @@ -349,6 +352,18 @@ redis==5.2.1 # -r requirements/../../../packages/service-library/requirements/_base.in referencing==0.35.1 # via + # -c requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/models-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/models-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/service-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/service-library/requirements/../../../packages/models-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/service-library/requirements/../../../packages/models-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/service-library/requirements/../../../packages/settings-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/service-library/requirements/../../../packages/settings-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/service-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/settings-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/settings-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../requirements/constraints.txt # jsonschema # jsonschema-specifications requests==2.32.3 diff --git a/services/api-server/requirements/_base.txt b/services/api-server/requirements/_base.txt index 2539c60c7fe7..ccac839c8978 100644 --- a/services/api-server/requirements/_base.txt +++ b/services/api-server/requirements/_base.txt @@ -187,8 +187,11 @@ fastapi==0.115.6 # via # -r requirements/../../../packages/service-library/requirements/_fastapi.in # -r requirements/_base.in + # fastapi-lifespan-manager fastapi-cli==0.0.6 # via fastapi +fastapi-lifespan-manager==0.1.4 + # via -r requirements/../../../packages/service-library/requirements/_fastapi.in fastapi-pagination==0.12.32 # via -r requirements/_base.in faststream==0.5.33 @@ -249,7 +252,6 @@ httpx==0.27.2 # -c requirements/../../../packages/simcore-sdk/requirements/../../../packages/settings-library/requirements/../../../requirements/constraints.txt # -c requirements/../../../packages/simcore-sdk/requirements/../../../requirements/constraints.txt # -c requirements/../../../requirements/constraints.txt - # -c requirements/./constraints.txt # -r requirements/../../../packages/service-library/requirements/_fastapi.in # -r requirements/_base.in # fastapi diff --git a/services/api-server/src/simcore_service_api_server/core/application.py b/services/api-server/src/simcore_service_api_server/core/application.py index 4de017698a6d..19323b4e001e 100644 --- a/services/api-server/src/simcore_service_api_server/core/application.py +++ b/services/api-server/src/simcore_service_api_server/core/application.py @@ -4,7 +4,7 @@ from fastapi_pagination import add_pagination from models_library.basic_types import BootModeEnum from packaging.version import Version -from servicelib.fastapi.profiler_middleware import ProfilerMiddleware +from servicelib.fastapi.profiler import initialize_profiler from servicelib.fastapi.tracing import setup_tracing from servicelib.logging_utils import config_all_loggers @@ -123,7 +123,7 @@ def init_app(settings: ApplicationSettings | None = None) -> FastAPI: ) if settings.API_SERVER_PROFILING: - app.add_middleware(ProfilerMiddleware) + initialize_profiler(app) if app.state.settings.API_SERVER_PROMETHEUS_INSTRUMENTATION_ENABLED: setup_prometheus_instrumentation(app) diff --git a/services/autoscaling/requirements/_base.txt b/services/autoscaling/requirements/_base.txt index 0f13c0e7eaf1..7e342b2ba6f3 100644 --- a/services/autoscaling/requirements/_base.txt +++ b/services/autoscaling/requirements/_base.txt @@ -87,7 +87,32 @@ attrs==24.2.0 # jsonschema # referencing boto3==1.35.36 - # via aiobotocore + # via + # -c requirements/../../../packages/aws-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/aws-library/requirements/../../../packages/models-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/aws-library/requirements/../../../packages/models-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/aws-library/requirements/../../../packages/service-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/aws-library/requirements/../../../packages/service-library/requirements/../../../packages/models-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/aws-library/requirements/../../../packages/service-library/requirements/../../../packages/models-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/aws-library/requirements/../../../packages/service-library/requirements/../../../packages/settings-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/aws-library/requirements/../../../packages/service-library/requirements/../../../packages/settings-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/aws-library/requirements/../../../packages/service-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/aws-library/requirements/../../../packages/settings-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/aws-library/requirements/../../../packages/settings-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/aws-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/models-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/models-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/service-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/service-library/requirements/../../../packages/models-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/service-library/requirements/../../../packages/models-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/service-library/requirements/../../../packages/settings-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/service-library/requirements/../../../packages/settings-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/service-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/settings-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/settings-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../requirements/constraints.txt + # aiobotocore botocore==1.35.36 # via # aiobotocore @@ -165,6 +190,9 @@ fastapi==0.115.6 # via # -r requirements/../../../packages/service-library/requirements/_fastapi.in # -r requirements/_base.in + # fastapi-lifespan-manager +fastapi-lifespan-manager==0.1.4 + # via -r requirements/../../../packages/service-library/requirements/_fastapi.in faststream==0.5.33 # via # -r requirements/../../../packages/aws-library/requirements/../../../packages/service-library/requirements/_base.in @@ -607,6 +635,30 @@ redis==5.2.1 # -r requirements/../../../packages/service-library/requirements/_base.in referencing==0.35.1 # via + # -c requirements/../../../packages/aws-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/aws-library/requirements/../../../packages/models-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/aws-library/requirements/../../../packages/models-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/aws-library/requirements/../../../packages/service-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/aws-library/requirements/../../../packages/service-library/requirements/../../../packages/models-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/aws-library/requirements/../../../packages/service-library/requirements/../../../packages/models-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/aws-library/requirements/../../../packages/service-library/requirements/../../../packages/settings-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/aws-library/requirements/../../../packages/service-library/requirements/../../../packages/settings-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/aws-library/requirements/../../../packages/service-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/aws-library/requirements/../../../packages/settings-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/aws-library/requirements/../../../packages/settings-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/aws-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/models-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/models-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/service-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/service-library/requirements/../../../packages/models-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/service-library/requirements/../../../packages/models-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/service-library/requirements/../../../packages/settings-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/service-library/requirements/../../../packages/settings-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/service-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/settings-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/settings-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../requirements/constraints.txt # jsonschema # jsonschema-specifications requests==2.32.3 diff --git a/services/catalog/requirements/_base.txt b/services/catalog/requirements/_base.txt index e8500375a38b..3bfd3ff9b98c 100644 --- a/services/catalog/requirements/_base.txt +++ b/services/catalog/requirements/_base.txt @@ -106,8 +106,11 @@ fastapi==0.115.6 # via # -r requirements/../../../packages/service-library/requirements/_fastapi.in # -r requirements/_base.in + # fastapi-lifespan-manager fastapi-cli==0.0.6 # via fastapi +fastapi-lifespan-manager==0.1.4 + # via -r requirements/../../../packages/service-library/requirements/_fastapi.in faststream==0.5.33 # via -r requirements/../../../packages/service-library/requirements/_base.in frozenlist==1.5.0 @@ -445,6 +448,20 @@ redis==5.2.1 # aiocache referencing==0.35.1 # via + # -c requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/models-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/models-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/postgres-database/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/postgres-database/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/service-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/service-library/requirements/../../../packages/models-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/service-library/requirements/../../../packages/models-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/service-library/requirements/../../../packages/settings-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/service-library/requirements/../../../packages/settings-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/service-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/settings-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/settings-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../requirements/constraints.txt # jsonschema # jsonschema-specifications requests==2.32.3 diff --git a/services/catalog/src/simcore_service_catalog/core/application.py b/services/catalog/src/simcore_service_catalog/core/application.py index a736891c7369..72ecc8ba0ba4 100644 --- a/services/catalog/src/simcore_service_catalog/core/application.py +++ b/services/catalog/src/simcore_service_catalog/core/application.py @@ -5,7 +5,7 @@ from models_library.basic_types import BootModeEnum from servicelib.fastapi import timing_middleware from servicelib.fastapi.openapi import override_fastapi_openapi_method -from servicelib.fastapi.profiler_middleware import ProfilerMiddleware +from servicelib.fastapi.profiler import initialize_profiler from servicelib.fastapi.prometheus_instrumentation import ( setup_prometheus_instrumentation, ) @@ -61,7 +61,7 @@ def create_app(settings: ApplicationSettings | None = None) -> FastAPI: # MIDDLEWARES if app.state.settings.CATALOG_PROFILING: - app.add_middleware(ProfilerMiddleware) + initialize_profiler(app) if settings.SC_BOOT_MODE != BootModeEnum.PRODUCTION: # middleware to time requests (ONLY for development) diff --git a/services/clusters-keeper/requirements/_base.txt b/services/clusters-keeper/requirements/_base.txt index 9284af99ada9..869f41bbd6c7 100644 --- a/services/clusters-keeper/requirements/_base.txt +++ b/services/clusters-keeper/requirements/_base.txt @@ -85,7 +85,32 @@ attrs==24.2.0 # jsonschema # referencing boto3==1.35.36 - # via aiobotocore + # via + # -c requirements/../../../packages/aws-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/aws-library/requirements/../../../packages/models-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/aws-library/requirements/../../../packages/models-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/aws-library/requirements/../../../packages/service-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/aws-library/requirements/../../../packages/service-library/requirements/../../../packages/models-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/aws-library/requirements/../../../packages/service-library/requirements/../../../packages/models-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/aws-library/requirements/../../../packages/service-library/requirements/../../../packages/settings-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/aws-library/requirements/../../../packages/service-library/requirements/../../../packages/settings-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/aws-library/requirements/../../../packages/service-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/aws-library/requirements/../../../packages/settings-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/aws-library/requirements/../../../packages/settings-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/aws-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/models-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/models-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/service-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/service-library/requirements/../../../packages/models-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/service-library/requirements/../../../packages/models-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/service-library/requirements/../../../packages/settings-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/service-library/requirements/../../../packages/settings-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/service-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/settings-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/settings-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../requirements/constraints.txt + # aiobotocore botocore==1.35.36 # via # aiobotocore @@ -163,6 +188,9 @@ fastapi==0.115.6 # via # -r requirements/../../../packages/service-library/requirements/_fastapi.in # -r requirements/_base.in + # fastapi-lifespan-manager +fastapi-lifespan-manager==0.1.4 + # via -r requirements/../../../packages/service-library/requirements/_fastapi.in faststream==0.5.33 # via # -r requirements/../../../packages/aws-library/requirements/../../../packages/service-library/requirements/_base.in @@ -605,6 +633,30 @@ redis==5.2.1 # -r requirements/../../../packages/service-library/requirements/_base.in referencing==0.35.1 # via + # -c requirements/../../../packages/aws-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/aws-library/requirements/../../../packages/models-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/aws-library/requirements/../../../packages/models-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/aws-library/requirements/../../../packages/service-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/aws-library/requirements/../../../packages/service-library/requirements/../../../packages/models-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/aws-library/requirements/../../../packages/service-library/requirements/../../../packages/models-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/aws-library/requirements/../../../packages/service-library/requirements/../../../packages/settings-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/aws-library/requirements/../../../packages/service-library/requirements/../../../packages/settings-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/aws-library/requirements/../../../packages/service-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/aws-library/requirements/../../../packages/settings-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/aws-library/requirements/../../../packages/settings-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/aws-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/models-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/models-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/service-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/service-library/requirements/../../../packages/models-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/service-library/requirements/../../../packages/models-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/service-library/requirements/../../../packages/settings-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/service-library/requirements/../../../packages/settings-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/service-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/settings-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/settings-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../requirements/constraints.txt # jsonschema # jsonschema-specifications requests==2.32.3 diff --git a/services/dask-sidecar/requirements/_base.txt b/services/dask-sidecar/requirements/_base.txt index 7ba73695252c..8bef9cdda226 100644 --- a/services/dask-sidecar/requirements/_base.txt +++ b/services/dask-sidecar/requirements/_base.txt @@ -442,6 +442,24 @@ redis==5.2.1 # -r requirements/../../../packages/service-library/requirements/_base.in referencing==0.35.1 # via + # -c requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/dask-task-models-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/dask-task-models-library/requirements/../../../packages/models-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/dask-task-models-library/requirements/../../../packages/models-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/dask-task-models-library/requirements/../../../packages/settings-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/dask-task-models-library/requirements/../../../packages/settings-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/dask-task-models-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/models-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/models-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/service-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/service-library/requirements/../../../packages/models-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/service-library/requirements/../../../packages/models-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/service-library/requirements/../../../packages/settings-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/service-library/requirements/../../../packages/settings-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/service-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/settings-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/settings-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../requirements/constraints.txt # jsonschema # jsonschema-specifications repro-zipfile==0.3.1 diff --git a/services/datcore-adapter/requirements/_base.txt b/services/datcore-adapter/requirements/_base.txt index eef071269caa..6e221cd0a67d 100644 --- a/services/datcore-adapter/requirements/_base.txt +++ b/services/datcore-adapter/requirements/_base.txt @@ -53,7 +53,20 @@ attrs==23.2.0 # jsonschema # referencing boto3==1.34.75 - # via -r requirements/_base.in + # via + # -c requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/models-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/models-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/service-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/service-library/requirements/../../../packages/models-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/service-library/requirements/../../../packages/models-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/service-library/requirements/../../../packages/settings-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/service-library/requirements/../../../packages/settings-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/service-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/settings-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/settings-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../requirements/constraints.txt + # -r requirements/_base.in botocore==1.34.75 # via # boto3 @@ -97,7 +110,10 @@ fastapi==0.115.5 # via # -r requirements/../../../packages/service-library/requirements/_fastapi.in # -r requirements/_base.in + # fastapi-lifespan-manager # prometheus-fastapi-instrumentator +fastapi-lifespan-manager==0.1.4 + # via -r requirements/../../../packages/service-library/requirements/_fastapi.in fastapi-pagination==0.12.31 # via -r requirements/_base.in faststream==0.5.31 @@ -369,6 +385,18 @@ redis==5.2.1 # -r requirements/../../../packages/service-library/requirements/_base.in referencing==0.29.3 # via + # -c requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/models-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/models-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/service-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/service-library/requirements/../../../packages/models-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/service-library/requirements/../../../packages/models-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/service-library/requirements/../../../packages/settings-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/service-library/requirements/../../../packages/settings-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/service-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/settings-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/settings-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../requirements/constraints.txt # jsonschema # jsonschema-specifications requests==2.32.3 diff --git a/services/director-v2/requirements/_base.txt b/services/director-v2/requirements/_base.txt index 4f4bfb4730a0..849294433571 100644 --- a/services/director-v2/requirements/_base.txt +++ b/services/director-v2/requirements/_base.txt @@ -190,9 +190,12 @@ fastapi==0.115.5 # via # -r requirements/../../../packages/service-library/requirements/_fastapi.in # -r requirements/_base.in + # fastapi-lifespan-manager # prometheus-fastapi-instrumentator fastapi-cli==0.0.5 # via fastapi +fastapi-lifespan-manager==0.1.4 + # via -r requirements/../../../packages/service-library/requirements/_fastapi.in faststream==0.5.31 # via # -r requirements/../../../packages/service-library/requirements/_base.in @@ -802,6 +805,40 @@ redis==5.2.1 # aiocache referencing==0.29.3 # via + # -c requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/dask-task-models-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/dask-task-models-library/requirements/../../../packages/models-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/dask-task-models-library/requirements/../../../packages/models-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/dask-task-models-library/requirements/../../../packages/settings-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/dask-task-models-library/requirements/../../../packages/settings-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/dask-task-models-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/models-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/models-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/postgres-database/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/postgres-database/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/service-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/service-library/requirements/../../../packages/models-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/service-library/requirements/../../../packages/models-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/service-library/requirements/../../../packages/settings-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/service-library/requirements/../../../packages/settings-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/service-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/settings-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/settings-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/simcore-sdk/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/simcore-sdk/requirements/../../../packages/models-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/simcore-sdk/requirements/../../../packages/models-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/simcore-sdk/requirements/../../../packages/postgres-database/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/simcore-sdk/requirements/../../../packages/postgres-database/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/simcore-sdk/requirements/../../../packages/service-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/simcore-sdk/requirements/../../../packages/service-library/requirements/../../../packages/models-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/simcore-sdk/requirements/../../../packages/service-library/requirements/../../../packages/models-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/simcore-sdk/requirements/../../../packages/service-library/requirements/../../../packages/settings-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/simcore-sdk/requirements/../../../packages/service-library/requirements/../../../packages/settings-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/simcore-sdk/requirements/../../../packages/service-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/simcore-sdk/requirements/../../../packages/settings-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/simcore-sdk/requirements/../../../packages/settings-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/simcore-sdk/requirements/../../../requirements/constraints.txt + # -c requirements/../../../requirements/constraints.txt # jsonschema # jsonschema-specifications requests==2.32.3 diff --git a/services/director-v2/src/simcore_service_director_v2/core/application.py b/services/director-v2/src/simcore_service_director_v2/core/application.py index eb6fe5d64fd3..acb2abe4b695 100644 --- a/services/director-v2/src/simcore_service_director_v2/core/application.py +++ b/services/director-v2/src/simcore_service_director_v2/core/application.py @@ -6,7 +6,7 @@ get_common_oas_options, override_fastapi_openapi_method, ) -from servicelib.fastapi.profiler_middleware import ProfilerMiddleware +from servicelib.fastapi.profiler import initialize_profiler from servicelib.fastapi.tracing import setup_tracing from servicelib.logging_utils import config_all_loggers @@ -204,7 +204,7 @@ def init_app(settings: AppSettings | None = None) -> FastAPI: instrumentation.setup(app) if settings.DIRECTOR_V2_PROFILING: - app.add_middleware(ProfilerMiddleware) + initialize_profiler(app) # setup app -- app.add_event_handler("startup", on_startup) diff --git a/services/director/requirements/_base.txt b/services/director/requirements/_base.txt index b151fdf46392..e5f0aaa40b92 100644 --- a/services/director/requirements/_base.txt +++ b/services/director/requirements/_base.txt @@ -95,9 +95,12 @@ fastapi==0.115.5 # via # -r requirements/../../../packages/service-library/requirements/_fastapi.in # -r requirements/_base.in + # fastapi-lifespan-manager # prometheus-fastapi-instrumentator fastapi-cli==0.0.5 # via fastapi +fastapi-lifespan-manager==0.1.4 + # via -r requirements/../../../packages/service-library/requirements/_fastapi.in faststream==0.5.31 # via -r requirements/../../../packages/service-library/requirements/_base.in frozenlist==1.5.0 @@ -392,6 +395,18 @@ redis==5.2.1 # -r requirements/../../../packages/service-library/requirements/_base.in referencing==0.29.3 # via + # -c requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/models-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/models-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/service-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/service-library/requirements/../../../packages/models-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/service-library/requirements/../../../packages/models-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/service-library/requirements/../../../packages/settings-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/service-library/requirements/../../../packages/settings-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/service-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/settings-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/settings-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../requirements/constraints.txt # jsonschema # jsonschema-specifications requests==2.32.3 diff --git a/services/dynamic-scheduler/requirements/_base.txt b/services/dynamic-scheduler/requirements/_base.txt index b9827f8175e1..90db0013db18 100644 --- a/services/dynamic-scheduler/requirements/_base.txt +++ b/services/dynamic-scheduler/requirements/_base.txt @@ -109,7 +109,10 @@ fastapi==0.115.5 # via # -r requirements/../../../packages/service-library/requirements/_fastapi.in # -r requirements/_base.in + # fastapi-lifespan-manager # nicegui +fastapi-lifespan-manager==0.1.4 + # via -r requirements/../../../packages/service-library/requirements/_fastapi.in faststream==0.5.31 # via -r requirements/../../../packages/service-library/requirements/_base.in frozenlist==1.5.0 @@ -456,6 +459,20 @@ redis==5.2.1 # -r requirements/../../../packages/service-library/requirements/_base.in referencing==0.35.1 # via + # -c requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/models-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/models-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/postgres-database/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/postgres-database/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/service-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/service-library/requirements/../../../packages/models-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/service-library/requirements/../../../packages/models-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/service-library/requirements/../../../packages/settings-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/service-library/requirements/../../../packages/settings-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/service-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/settings-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/settings-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../requirements/constraints.txt # jsonschema # jsonschema-specifications requests==2.32.3 diff --git a/services/dynamic-scheduler/src/simcore_service_dynamic_scheduler/api/frontend/__init__.py b/services/dynamic-scheduler/src/simcore_service_dynamic_scheduler/api/frontend/__init__.py index 7f991346a4b9..71c3aa2c8627 100644 --- a/services/dynamic-scheduler/src/simcore_service_dynamic_scheduler/api/frontend/__init__.py +++ b/services/dynamic-scheduler/src/simcore_service_dynamic_scheduler/api/frontend/__init__.py @@ -1,3 +1,3 @@ -from ._setup import setup_frontend +from ._setup import initialize_frontend -__all__: tuple[str, ...] = ("setup_frontend",) +__all__: tuple[str, ...] = ("initialize_frontend",) diff --git a/services/dynamic-scheduler/src/simcore_service_dynamic_scheduler/api/frontend/_setup.py b/services/dynamic-scheduler/src/simcore_service_dynamic_scheduler/api/frontend/_setup.py index 50bb82fc0f30..d56da5f43f4f 100644 --- a/services/dynamic-scheduler/src/simcore_service_dynamic_scheduler/api/frontend/_setup.py +++ b/services/dynamic-scheduler/src/simcore_service_dynamic_scheduler/api/frontend/_setup.py @@ -6,7 +6,7 @@ from .routes import router -def setup_frontend(app: FastAPI) -> None: +def initialize_frontend(app: FastAPI) -> None: settings: ApplicationSettings = app.state.settings nicegui.app.include_router(router) diff --git a/services/dynamic-scheduler/src/simcore_service_dynamic_scheduler/api/rest/routes.py b/services/dynamic-scheduler/src/simcore_service_dynamic_scheduler/api/rest/routes.py index 8c1d3e21ed8f..9d0b45de9811 100644 --- a/services/dynamic-scheduler/src/simcore_service_dynamic_scheduler/api/rest/routes.py +++ b/services/dynamic-scheduler/src/simcore_service_dynamic_scheduler/api/rest/routes.py @@ -8,7 +8,7 @@ from . import _health, _meta -def setup_rest_api(app: FastAPI): +def initialize_rest_api(app: FastAPI) -> None: app.include_router(_health.router) api_router = APIRouter(prefix=f"/{API_VTAG}") diff --git a/services/dynamic-scheduler/src/simcore_service_dynamic_scheduler/api/rpc/routes.py b/services/dynamic-scheduler/src/simcore_service_dynamic_scheduler/api/rpc/routes.py index 77c544e53542..2a2f4a3afd3f 100644 --- a/services/dynamic-scheduler/src/simcore_service_dynamic_scheduler/api/rpc/routes.py +++ b/services/dynamic-scheduler/src/simcore_service_dynamic_scheduler/api/rpc/routes.py @@ -1,4 +1,7 @@ +from collections.abc import AsyncIterator + from fastapi import FastAPI +from fastapi_lifespan_manager import State from models_library.api_schemas_dynamic_scheduler import DYNAMIC_SCHEDULER_RPC_NAMESPACE from servicelib.rabbitmq import RPCRouter @@ -10,12 +13,9 @@ ] -def setup_rpc_api_routes(app: FastAPI) -> None: - async def startup() -> None: - rpc_server = get_rabbitmq_rpc_server(app) - for router in ROUTERS: - await rpc_server.register_router( - router, DYNAMIC_SCHEDULER_RPC_NAMESPACE, app - ) +async def lifespan_rpc_api_routes(app: FastAPI) -> AsyncIterator[State]: + rpc_server = get_rabbitmq_rpc_server(app) + for router in ROUTERS: + await rpc_server.register_router(router, DYNAMIC_SCHEDULER_RPC_NAMESPACE, app) - app.add_event_handler("startup", startup) + yield {} diff --git a/services/dynamic-scheduler/src/simcore_service_dynamic_scheduler/core/application.py b/services/dynamic-scheduler/src/simcore_service_dynamic_scheduler/core/application.py index 7cbcb7355a90..a7f54a1411cb 100644 --- a/services/dynamic-scheduler/src/simcore_service_dynamic_scheduler/core/application.py +++ b/services/dynamic-scheduler/src/simcore_service_dynamic_scheduler/core/application.py @@ -1,10 +1,15 @@ +from collections.abc import AsyncIterator + from fastapi import FastAPI +from fastapi_lifespan_manager import State +from servicelib.fastapi.lifespan_utils import LifespanGenerator, combine_lifespans from servicelib.fastapi.openapi import override_fastapi_openapi_method -from servicelib.fastapi.profiler_middleware import ProfilerMiddleware +from servicelib.fastapi.profiler import initialize_profiler from servicelib.fastapi.prometheus_instrumentation import ( - setup_prometheus_instrumentation, + initialize_prometheus_instrumentation, + lifespan_prometheus_instrumentation, ) -from servicelib.fastapi.tracing import setup_tracing +from servicelib.fastapi.tracing import get_lifespan_tracing from .._meta import ( API_VERSION, @@ -15,23 +20,50 @@ PROJECT_NAME, SUMMARY, ) -from ..api.frontend import setup_frontend -from ..api.rest.routes import setup_rest_api -from ..api.rpc.routes import setup_rpc_api_routes -from ..services.deferred_manager import setup_deferred_manager -from ..services.director_v0 import setup_director_v0 -from ..services.director_v2 import setup_director_v2 -from ..services.notifier import setup_notifier -from ..services.rabbitmq import setup_rabbitmq -from ..services.redis import setup_redis -from ..services.service_tracker import setup_service_tracker -from ..services.status_monitor import setup_status_monitor +from ..api.frontend import initialize_frontend +from ..api.rest.routes import initialize_rest_api +from ..api.rpc.routes import lifespan_rpc_api_routes +from ..services.deferred_manager import lifespan_deferred_manager +from ..services.director_v0 import lifespan_director_v0 +from ..services.director_v2 import lifespan_director_v2 +from ..services.notifier import get_notifier_lifespans +from ..services.rabbitmq import lifespan_rabbitmq +from ..services.redis import lifespan_redis +from ..services.service_tracker import lifespan_service_tracker +from ..services.status_monitor import lifespan_status_monitor from .settings import ApplicationSettings +async def _lifespan_banner(app: FastAPI) -> AsyncIterator[State]: + _ = app + print(APP_STARTED_BANNER_MSG, flush=True) # noqa: T201 + yield {} + print(APP_FINISHED_BANNER_MSG, flush=True) # noqa: T201 + + def create_app(settings: ApplicationSettings | None = None) -> FastAPI: app_settings = settings or ApplicationSettings.create_from_envs() + lifespans: list[LifespanGenerator] = [ + lifespan_director_v2, + lifespan_director_v0, + lifespan_rabbitmq, + lifespan_rpc_api_routes, + lifespan_redis, + *get_notifier_lifespans(), + lifespan_service_tracker, + lifespan_deferred_manager, + lifespan_status_monitor, + ] + + if app_settings.DYNAMIC_SCHEDULER_PROMETHEUS_INSTRUMENTATION_ENABLED: + lifespans.append(lifespan_prometheus_instrumentation) + + if app_settings.DYNAMIC_SCHEDULER_TRACING: + lifespans.append( + get_lifespan_tracing(app_settings.DYNAMIC_SCHEDULER_TRACING, APP_NAME) + ) + app = FastAPI( title=f"{PROJECT_NAME} web API", description=SUMMARY, @@ -40,7 +72,8 @@ def create_app(settings: ApplicationSettings | None = None) -> FastAPI: docs_url=( "/doc" if app_settings.DYNAMIC_SCHEDULER_SWAGGER_API_DOC_ENABLED else None ), - redoc_url=None, # default disabled, see below + redoc_url=None, + lifespan=combine_lifespans(*lifespans, _lifespan_banner), ) override_fastapi_openapi_method(app) @@ -48,48 +81,13 @@ def create_app(settings: ApplicationSettings | None = None) -> FastAPI: app.state.settings = app_settings assert app.state.settings.API_VERSION == API_VERSION # nosec - if app.state.settings.DYNAMIC_SCHEDULER_PROMETHEUS_INSTRUMENTATION_ENABLED: - setup_prometheus_instrumentation(app) - - if app.state.settings.DYNAMIC_SCHEDULER_PROFILING: - app.add_middleware(ProfilerMiddleware) - if app.state.settings.DYNAMIC_SCHEDULER_TRACING: - setup_tracing( - app, - app.state.settings.DYNAMIC_SCHEDULER_TRACING, - APP_NAME, - ) - - # PLUGINS SETUP - - setup_director_v2(app) - setup_director_v0(app) - - setup_rabbitmq(app) - setup_rpc_api_routes(app) - - setup_redis(app) - - setup_notifier(app) - - setup_service_tracker(app) - setup_deferred_manager(app) - setup_status_monitor(app) - - setup_rest_api(app) - setup_frontend(app) - - # ERROR HANDLERS - # ... add here ... + initialize_rest_api(app) - # EVENTS - async def _on_startup() -> None: - print(APP_STARTED_BANNER_MSG, flush=True) # noqa: T201 + initialize_prometheus_instrumentation(app) - async def _on_shutdown() -> None: - print(APP_FINISHED_BANNER_MSG, flush=True) # noqa: T201 + initialize_frontend(app) - app.add_event_handler("startup", _on_startup) - app.add_event_handler("shutdown", _on_shutdown) + if app_settings.DYNAMIC_SCHEDULER_PROFILING: + initialize_profiler(app) return app diff --git a/services/dynamic-scheduler/src/simcore_service_dynamic_scheduler/services/deferred_manager.py b/services/dynamic-scheduler/src/simcore_service_dynamic_scheduler/services/deferred_manager.py index 8544c0f38e6f..65cf20bd20d3 100644 --- a/services/dynamic-scheduler/src/simcore_service_dynamic_scheduler/services/deferred_manager.py +++ b/services/dynamic-scheduler/src/simcore_service_dynamic_scheduler/services/deferred_manager.py @@ -1,4 +1,7 @@ +from collections.abc import AsyncIterator + from fastapi import FastAPI +from fastapi_lifespan_manager import State from servicelib.deferred_tasks import DeferredManager from settings_library.rabbit import RabbitSettings from settings_library.redis import RedisDatabase @@ -6,19 +9,15 @@ from .redis import get_redis_client -def setup_deferred_manager(app: FastAPI) -> None: - async def on_startup() -> None: - rabbit_settings: RabbitSettings = app.state.settings.DYNAMIC_SCHEDULER_RABBITMQ +async def lifespan_deferred_manager(app: FastAPI) -> AsyncIterator[State]: + rabbit_settings: RabbitSettings = app.state.settings.DYNAMIC_SCHEDULER_RABBITMQ - redis_client_sdk = get_redis_client(app, RedisDatabase.DEFERRED_TASKS) - app.state.deferred_manager = manager = DeferredManager( - rabbit_settings, redis_client_sdk, globals_context={"app": app} - ) - await manager.setup() + redis_client_sdk = get_redis_client(app, RedisDatabase.DEFERRED_TASKS) + app.state.deferred_manager = manager = DeferredManager( + rabbit_settings, redis_client_sdk, globals_context={"app": app} + ) + await manager.setup() - async def on_shutdown() -> None: - manager: DeferredManager = app.state.deferred_manager - await manager.shutdown() + yield {} - app.add_event_handler("startup", on_startup) - app.add_event_handler("shutdown", on_shutdown) + await manager.shutdown() diff --git a/services/dynamic-scheduler/src/simcore_service_dynamic_scheduler/services/director_v0/__init__.py b/services/dynamic-scheduler/src/simcore_service_dynamic_scheduler/services/director_v0/__init__.py index 46b11bfba38f..85beb7073524 100644 --- a/services/dynamic-scheduler/src/simcore_service_dynamic_scheduler/services/director_v0/__init__.py +++ b/services/dynamic-scheduler/src/simcore_service_dynamic_scheduler/services/director_v0/__init__.py @@ -1,7 +1,7 @@ from ._public_client import DirectorV0PublicClient -from ._setup import setup_director_v0 +from ._setup import lifespan_director_v0 __all__: tuple[str, ...] = ( "DirectorV0PublicClient", - "setup_director_v0", + "lifespan_director_v0", ) diff --git a/services/dynamic-scheduler/src/simcore_service_dynamic_scheduler/services/director_v0/_setup.py b/services/dynamic-scheduler/src/simcore_service_dynamic_scheduler/services/director_v0/_setup.py index b58b272a2216..90e48e9b3f50 100644 --- a/services/dynamic-scheduler/src/simcore_service_dynamic_scheduler/services/director_v0/_setup.py +++ b/services/dynamic-scheduler/src/simcore_service_dynamic_scheduler/services/director_v0/_setup.py @@ -1,21 +1,22 @@ +from collections.abc import AsyncIterator + from fastapi import FastAPI +from fastapi_lifespan_manager import State from ._public_client import DirectorV0PublicClient from ._thin_client import DirectorV0ThinClient -def setup_director_v0(app: FastAPI) -> None: - async def _on_startup() -> None: - thin_client = DirectorV0ThinClient(app) - thin_client.set_to_app_state(app) - thin_client.attach_lifespan_to(app) +async def lifespan_director_v0(app: FastAPI) -> AsyncIterator[State]: + + thin_client = DirectorV0ThinClient(app) + thin_client.set_to_app_state(app) + thin_client.attach_lifespan_to(app) - public_client = DirectorV0PublicClient(app) - public_client.set_to_app_state(app) + public_client = DirectorV0PublicClient(app) + public_client.set_to_app_state(app) - async def _on_shutdown() -> None: - DirectorV0PublicClient.pop_from_app_state(app) - DirectorV0ThinClient.pop_from_app_state(app) + yield {} - app.add_event_handler("startup", _on_startup) - app.add_event_handler("shutdown", _on_shutdown) + DirectorV0PublicClient.pop_from_app_state(app) + DirectorV0ThinClient.pop_from_app_state(app) diff --git a/services/dynamic-scheduler/src/simcore_service_dynamic_scheduler/services/director_v2/__init__.py b/services/dynamic-scheduler/src/simcore_service_dynamic_scheduler/services/director_v2/__init__.py index 6d76547f3f2a..25216a03f2f8 100644 --- a/services/dynamic-scheduler/src/simcore_service_dynamic_scheduler/services/director_v2/__init__.py +++ b/services/dynamic-scheduler/src/simcore_service_dynamic_scheduler/services/director_v2/__init__.py @@ -1,6 +1,6 @@ -from ._public_client import DirectorV2Client, setup_director_v2 +from ._public_client import DirectorV2Client, lifespan_director_v2 __all__: tuple[str, ...] = ( "DirectorV2Client", - "setup_director_v2", + "lifespan_director_v2", ) diff --git a/services/dynamic-scheduler/src/simcore_service_dynamic_scheduler/services/director_v2/_public_client.py b/services/dynamic-scheduler/src/simcore_service_dynamic_scheduler/services/director_v2/_public_client.py index 57481f04a11a..c771923cb054 100644 --- a/services/dynamic-scheduler/src/simcore_service_dynamic_scheduler/services/director_v2/_public_client.py +++ b/services/dynamic-scheduler/src/simcore_service_dynamic_scheduler/services/director_v2/_public_client.py @@ -1,7 +1,9 @@ import datetime +from collections.abc import AsyncIterator from typing import Any from fastapi import FastAPI, status +from fastapi_lifespan_manager import State from models_library.api_schemas_directorv2.dynamic_services import ( DynamicServiceGet, GetProjectInactivityResponse, @@ -141,6 +143,8 @@ async def update_projects_networks(self, *, project_id: ProjectID) -> None: await self.thin_client.patch_projects_networks(project_id=project_id) -def setup_director_v2(app: FastAPI) -> None: +async def lifespan_director_v2(app: FastAPI) -> AsyncIterator[State]: public_client = DirectorV2Client(app) public_client.set_to_app_state(app) + + yield {} diff --git a/services/dynamic-scheduler/src/simcore_service_dynamic_scheduler/services/notifier/__init__.py b/services/dynamic-scheduler/src/simcore_service_dynamic_scheduler/services/notifier/__init__.py index 8cd33e12808f..e5e1609440b4 100644 --- a/services/dynamic-scheduler/src/simcore_service_dynamic_scheduler/services/notifier/__init__.py +++ b/services/dynamic-scheduler/src/simcore_service_dynamic_scheduler/services/notifier/__init__.py @@ -1,7 +1,7 @@ from ._notifier import notify_service_status_change -from ._setup import setup_notifier +from ._setup import get_notifier_lifespans __all__: tuple[str, ...] = ( - "setup_notifier", + "get_notifier_lifespans", "notify_service_status_change", ) diff --git a/services/dynamic-scheduler/src/simcore_service_dynamic_scheduler/services/notifier/_notifier.py b/services/dynamic-scheduler/src/simcore_service_dynamic_scheduler/services/notifier/_notifier.py index 0b8690a96766..c869a368ab21 100644 --- a/services/dynamic-scheduler/src/simcore_service_dynamic_scheduler/services/notifier/_notifier.py +++ b/services/dynamic-scheduler/src/simcore_service_dynamic_scheduler/services/notifier/_notifier.py @@ -1,8 +1,10 @@ import contextlib +from collections.abc import AsyncIterator import socketio # type: ignore[import-untyped] from fastapi import FastAPI from fastapi.encoders import jsonable_encoder +from fastapi_lifespan_manager import State from models_library.api_schemas_directorv2.dynamic_services import DynamicServiceGet from models_library.api_schemas_dynamic_scheduler.socketio import ( SOCKET_IO_SERVICE_STATUS_EVENT, @@ -37,19 +39,17 @@ async def notify_service_status_change( await notifier.notify_service_status(user_id=user_id, status=status) -def setup(app: FastAPI): - async def _on_startup() -> None: - assert app.state.external_socketio # nosec +async def lifespan(app: FastAPI) -> AsyncIterator[State]: - notifier = Notifier( - sio_manager=app.state.external_socketio, - ) - notifier.set_to_app_state(app) - assert Notifier.get_from_app_state(app) == notifier # nosec + assert app.state.external_socketio # nosec + + notifier = Notifier( + sio_manager=app.state.external_socketio, + ) + notifier.set_to_app_state(app) + assert Notifier.get_from_app_state(app) == notifier # nosec - async def _on_shutdown() -> None: - with contextlib.suppress(AttributeError): - Notifier.pop_from_app_state(app) + yield {} - app.add_event_handler("startup", _on_startup) - app.add_event_handler("shutdown", _on_shutdown) + with contextlib.suppress(AttributeError): + Notifier.pop_from_app_state(app) diff --git a/services/dynamic-scheduler/src/simcore_service_dynamic_scheduler/services/notifier/_setup.py b/services/dynamic-scheduler/src/simcore_service_dynamic_scheduler/services/notifier/_setup.py index 1542afa8a87d..659eff665c66 100644 --- a/services/dynamic-scheduler/src/simcore_service_dynamic_scheduler/services/notifier/_setup.py +++ b/services/dynamic-scheduler/src/simcore_service_dynamic_scheduler/services/notifier/_setup.py @@ -1,8 +1,7 @@ -from fastapi import FastAPI +from servicelib.fastapi.lifespan_utils import LifespanGenerator from . import _notifier, _socketio -def setup_notifier(app: FastAPI): - _socketio.setup(app) - _notifier.setup(app) +def get_notifier_lifespans() -> list[LifespanGenerator]: + return [_socketio.lifespan, _notifier.lifespan] diff --git a/services/dynamic-scheduler/src/simcore_service_dynamic_scheduler/services/notifier/_socketio.py b/services/dynamic-scheduler/src/simcore_service_dynamic_scheduler/services/notifier/_socketio.py index 2f0abfbd3af1..f34f6b87f093 100644 --- a/services/dynamic-scheduler/src/simcore_service_dynamic_scheduler/services/notifier/_socketio.py +++ b/services/dynamic-scheduler/src/simcore_service_dynamic_scheduler/services/notifier/_socketio.py @@ -1,7 +1,9 @@ import logging +from collections.abc import AsyncIterator import socketio # type: ignore[import-untyped] from fastapi import FastAPI +from fastapi_lifespan_manager import State from servicelib.socketio_utils import cleanup_socketio_async_pubsub_manager from ...core.settings import ApplicationSettings @@ -9,24 +11,19 @@ _logger = logging.getLogger(__name__) -def setup(app: FastAPI): +async def lifespan(app: FastAPI) -> AsyncIterator[State]: settings: ApplicationSettings = app.state.settings - async def _on_startup() -> None: - assert app.state.rabbitmq_client # nosec + assert app.state.rabbitmq_client # nosec - # Connect to the as an external process in write-only mode - # SEE https://python-socketio.readthedocs.io/en/stable/server.html#emitting-from-external-processes - assert settings.DYNAMIC_SCHEDULER_RABBITMQ # nosec - app.state.external_socketio = socketio.AsyncAioPikaManager( - url=settings.DYNAMIC_SCHEDULER_RABBITMQ.dsn, logger=_logger, write_only=True - ) + # Connect to the as an external process in write-only mode + # SEE https://python-socketio.readthedocs.io/en/stable/server.html#emitting-from-external-processes + assert settings.DYNAMIC_SCHEDULER_RABBITMQ # nosec + app.state.external_socketio = socketio.AsyncAioPikaManager( + url=settings.DYNAMIC_SCHEDULER_RABBITMQ.dsn, logger=_logger, write_only=True + ) - async def _on_shutdown() -> None: - if external_socketio := getattr(app.state, "external_socketio"): # noqa: B009 - await cleanup_socketio_async_pubsub_manager( - server_manager=external_socketio - ) + yield {} - app.add_event_handler("startup", _on_startup) - app.add_event_handler("shutdown", _on_shutdown) + if external_socketio := getattr(app.state, "external_socketio"): # noqa: B009 + await cleanup_socketio_async_pubsub_manager(server_manager=external_socketio) diff --git a/services/dynamic-scheduler/src/simcore_service_dynamic_scheduler/services/rabbitmq.py b/services/dynamic-scheduler/src/simcore_service_dynamic_scheduler/services/rabbitmq.py index b7b3d30425c5..4f555b8e5f58 100644 --- a/services/dynamic-scheduler/src/simcore_service_dynamic_scheduler/services/rabbitmq.py +++ b/services/dynamic-scheduler/src/simcore_service_dynamic_scheduler/services/rabbitmq.py @@ -1,6 +1,8 @@ +from collections.abc import AsyncIterator from typing import cast from fastapi import FastAPI +from fastapi_lifespan_manager import State from models_library.rabbitmq_messages import RabbitMessageBase from servicelib.rabbitmq import ( RabbitMQClient, @@ -10,34 +12,26 @@ from settings_library.rabbit import RabbitSettings -def setup_rabbitmq(app: FastAPI) -> None: +async def lifespan_rabbitmq(app: FastAPI) -> AsyncIterator[State]: settings: RabbitSettings = app.state.settings.DYNAMIC_SCHEDULER_RABBITMQ - app.state.rabbitmq_client = None - app.state.rabbitmq_rpc_server = None - - async def _on_startup() -> None: - await wait_till_rabbitmq_responsive(settings.dsn) - - app.state.rabbitmq_client = RabbitMQClient( - client_name="dynamic_scheduler", settings=settings - ) - app.state.rabbitmq_rpc_client = await RabbitMQRPCClient.create( - client_name="dynamic_scheduler_rpc_client", settings=settings - ) - app.state.rabbitmq_rpc_server = await RabbitMQRPCClient.create( - client_name="dynamic_scheduler_rpc_server", settings=settings - ) - - async def _on_shutdown() -> None: - if app.state.rabbitmq_client: - await app.state.rabbitmq_client.close() - if app.state.rabbitmq_rpc_client: - await app.state.rabbitmq_rpc_client.close() - if app.state.rabbitmq_rpc_server: - await app.state.rabbitmq_rpc_server.close() - - app.add_event_handler("startup", _on_startup) - app.add_event_handler("shutdown", _on_shutdown) + + await wait_till_rabbitmq_responsive(settings.dsn) + + app.state.rabbitmq_client = RabbitMQClient( + client_name="dynamic_scheduler", settings=settings + ) + app.state.rabbitmq_rpc_client = await RabbitMQRPCClient.create( + client_name="dynamic_scheduler_rpc_client", settings=settings + ) + app.state.rabbitmq_rpc_server = await RabbitMQRPCClient.create( + client_name="dynamic_scheduler_rpc_server", settings=settings + ) + + yield {} + + await app.state.rabbitmq_client.close() + await app.state.rabbitmq_rpc_client.close() + await app.state.rabbitmq_rpc_server.close() def get_rabbitmq_client(app: FastAPI) -> RabbitMQClient: diff --git a/services/dynamic-scheduler/src/simcore_service_dynamic_scheduler/services/redis.py b/services/dynamic-scheduler/src/simcore_service_dynamic_scheduler/services/redis.py index c6f98d9e49e9..2640218bee73 100644 --- a/services/dynamic-scheduler/src/simcore_service_dynamic_scheduler/services/redis.py +++ b/services/dynamic-scheduler/src/simcore_service_dynamic_scheduler/services/redis.py @@ -1,6 +1,8 @@ +from collections.abc import AsyncIterator from typing import Final from fastapi import FastAPI +from fastapi_lifespan_manager import State from servicelib.redis import RedisClientSDK, RedisClientsManager, RedisManagerDBConfig from settings_library.redis import RedisDatabase, RedisSettings @@ -18,30 +20,22 @@ _ALL_REDIS_DATABASES: Final[set[RedisDatabase]] = _DECODE_DBS | _BINARY_DBS -def setup_redis(app: FastAPI) -> None: +async def lifespan_redis(app: FastAPI) -> AsyncIterator[State]: settings: RedisSettings = app.state.settings.DYNAMIC_SCHEDULER_REDIS - async def on_startup() -> None: - app.state.redis_clients_manager = manager = RedisClientsManager( - { - RedisManagerDBConfig(database=x, decode_responses=False) - for x in _BINARY_DBS - } - | { - RedisManagerDBConfig(database=x, decode_responses=True) - for x in _DECODE_DBS - }, - settings, - client_name=APP_NAME, - ) - await manager.setup() - - async def on_shutdown() -> None: - manager: RedisClientsManager = app.state.redis_clients_manager - await manager.shutdown() - - app.add_event_handler("startup", on_startup) - app.add_event_handler("shutdown", on_shutdown) + app.state.redis_clients_manager = manager = RedisClientsManager( + {RedisManagerDBConfig(database=x, decode_responses=False) for x in _BINARY_DBS} + | { + RedisManagerDBConfig(database=x, decode_responses=True) for x in _DECODE_DBS + }, + settings, + client_name=APP_NAME, + ) + await manager.setup() + + yield {} + + await manager.shutdown() def get_redis_client(app: FastAPI, database: RedisDatabase) -> RedisClientSDK: diff --git a/services/dynamic-scheduler/src/simcore_service_dynamic_scheduler/services/service_tracker/__init__.py b/services/dynamic-scheduler/src/simcore_service_dynamic_scheduler/services/service_tracker/__init__.py index e4cf7e50705c..58141505a6de 100644 --- a/services/dynamic-scheduler/src/simcore_service_dynamic_scheduler/services/service_tracker/__init__.py +++ b/services/dynamic-scheduler/src/simcore_service_dynamic_scheduler/services/service_tracker/__init__.py @@ -13,12 +13,13 @@ should_notify_frontend_for_service, ) from ._models import TrackedServiceModel -from ._setup import setup_service_tracker +from ._setup import lifespan_service_tracker __all__: tuple[str, ...] = ( "get_all_tracked_services", "get_tracked_service", "get_user_id_for_service", + "lifespan_service_tracker", "NORMAL_RATE_POLL_INTERVAL", "remove_tracked_service", "set_frontend_notified_for_service", @@ -27,7 +28,6 @@ "set_request_as_stopped", "set_service_scheduled_to_run", "set_service_status_task_uid", - "setup_service_tracker", "should_notify_frontend_for_service", "TrackedServiceModel", ) diff --git a/services/dynamic-scheduler/src/simcore_service_dynamic_scheduler/services/service_tracker/_setup.py b/services/dynamic-scheduler/src/simcore_service_dynamic_scheduler/services/service_tracker/_setup.py index 40a47bb8becc..45da842e9850 100644 --- a/services/dynamic-scheduler/src/simcore_service_dynamic_scheduler/services/service_tracker/_setup.py +++ b/services/dynamic-scheduler/src/simcore_service_dynamic_scheduler/services/service_tracker/_setup.py @@ -1,17 +1,18 @@ +from collections.abc import AsyncIterator + from fastapi import FastAPI +from fastapi_lifespan_manager import State from settings_library.redis import RedisDatabase from ..redis import get_redis_client from ._tracker import Tracker -def setup_service_tracker(app: FastAPI) -> None: - async def on_startup() -> None: - app.state.service_tracker = Tracker( - get_redis_client(app, RedisDatabase.DYNAMIC_SERVICES) - ) - - app.add_event_handler("startup", on_startup) +async def lifespan_service_tracker(app: FastAPI) -> AsyncIterator[State]: + app.state.service_tracker = Tracker( + get_redis_client(app, RedisDatabase.DYNAMIC_SERVICES) + ) + yield {} def get_tracker(app: FastAPI) -> Tracker: diff --git a/services/dynamic-scheduler/src/simcore_service_dynamic_scheduler/services/status_monitor/__init__.py b/services/dynamic-scheduler/src/simcore_service_dynamic_scheduler/services/status_monitor/__init__.py index 263451243252..86c116f704d9 100644 --- a/services/dynamic-scheduler/src/simcore_service_dynamic_scheduler/services/status_monitor/__init__.py +++ b/services/dynamic-scheduler/src/simcore_service_dynamic_scheduler/services/status_monitor/__init__.py @@ -1,3 +1,3 @@ -from ._setup import setup_status_monitor +from ._setup import lifespan_status_monitor -__all__: tuple[str, ...] = ("setup_status_monitor",) +__all__: tuple[str, ...] = ("lifespan_status_monitor",) diff --git a/services/dynamic-scheduler/src/simcore_service_dynamic_scheduler/services/status_monitor/_setup.py b/services/dynamic-scheduler/src/simcore_service_dynamic_scheduler/services/status_monitor/_setup.py index 8f9601464bcb..177300d1b83a 100644 --- a/services/dynamic-scheduler/src/simcore_service_dynamic_scheduler/services/status_monitor/_setup.py +++ b/services/dynamic-scheduler/src/simcore_service_dynamic_scheduler/services/status_monitor/_setup.py @@ -1,26 +1,24 @@ +from collections.abc import AsyncIterator from datetime import timedelta from typing import Final from fastapi import FastAPI +from fastapi_lifespan_manager import State from ._monitor import Monitor _STATUS_WORKER_DEFAULT_INTERVAL: Final[timedelta] = timedelta(seconds=1) -def setup_status_monitor(app: FastAPI) -> None: - async def on_startup() -> None: - app.state.status_monitor = monitor = Monitor( - app, status_worker_interval=_STATUS_WORKER_DEFAULT_INTERVAL - ) - await monitor.setup() +async def lifespan_status_monitor(app: FastAPI) -> AsyncIterator[State]: + app.state.status_monitor = monitor = Monitor( + app, status_worker_interval=_STATUS_WORKER_DEFAULT_INTERVAL + ) + await monitor.setup() - async def on_shutdown() -> None: - monitor: Monitor = app.state.status_monitor - await monitor.shutdown() + yield {} - app.add_event_handler("startup", on_startup) - app.add_event_handler("shutdown", on_shutdown) + await monitor.shutdown() def get_monitor(app: FastAPI) -> Monitor: diff --git a/services/dynamic-scheduler/tests/conftest.py b/services/dynamic-scheduler/tests/conftest.py index 1c4760a16599..3e39bd327c9c 100644 --- a/services/dynamic-scheduler/tests/conftest.py +++ b/services/dynamic-scheduler/tests/conftest.py @@ -85,34 +85,34 @@ def app_environment( @pytest.fixture -def disable_rabbitmq_setup(mocker: MockerFixture) -> None: - mocker.patch(f"{_PATH_APPLICATION}.setup_rabbitmq") - mocker.patch(f"{_PATH_APPLICATION}.setup_rpc_api_routes") +def disable_rabbitmq_lifespan(mocker: MockerFixture) -> None: + mocker.patch(f"{_PATH_APPLICATION}.lifespan_rabbitmq") + mocker.patch(f"{_PATH_APPLICATION}.lifespan_rpc_api_routes") @pytest.fixture -def disable_redis_setup(mocker: MockerFixture) -> None: - mocker.patch(f"{_PATH_APPLICATION}.setup_redis") +def disable_redis_lifespan(mocker: MockerFixture) -> None: + mocker.patch(f"{_PATH_APPLICATION}.lifespan_redis") @pytest.fixture -def disable_service_tracker_setup(mocker: MockerFixture) -> None: - mocker.patch(f"{_PATH_APPLICATION}.setup_service_tracker") +def disable_service_tracker_lifespan(mocker: MockerFixture) -> None: + mocker.patch(f"{_PATH_APPLICATION}.lifespan_service_tracker") @pytest.fixture -def disable_deferred_manager_setup(mocker: MockerFixture) -> None: - mocker.patch(f"{_PATH_APPLICATION}.setup_deferred_manager") +def disable_deferred_manager_lifespan(mocker: MockerFixture) -> None: + mocker.patch(f"{_PATH_APPLICATION}.lifespan_deferred_manager") @pytest.fixture -def disable_notifier_setup(mocker: MockerFixture) -> None: - mocker.patch(f"{_PATH_APPLICATION}.setup_notifier") +def disable_notifier_lifespan(mocker: MockerFixture) -> None: + mocker.patch(f"{_PATH_APPLICATION}.get_notifier_lifespans") @pytest.fixture -def disable_status_monitor_setup(mocker: MockerFixture) -> None: - mocker.patch(f"{_PATH_APPLICATION}.setup_status_monitor") +def disable_status_monitor_lifespan(mocker: MockerFixture) -> None: + mocker.patch(f"{_PATH_APPLICATION}.lifespan_status_monitor") MAX_TIME_FOR_APP_TO_STARTUP: Final[float] = 10 diff --git a/services/dynamic-scheduler/tests/unit/api_rest/conftest.py b/services/dynamic-scheduler/tests/unit/api_rest/conftest.py index c3d585b00af2..d7fbda477ffb 100644 --- a/services/dynamic-scheduler/tests/unit/api_rest/conftest.py +++ b/services/dynamic-scheduler/tests/unit/api_rest/conftest.py @@ -11,12 +11,12 @@ @pytest.fixture def app_environment( - disable_rabbitmq_setup: None, - disable_redis_setup: None, - disable_service_tracker_setup: None, - disable_deferred_manager_setup: None, - disable_notifier_setup: None, - disable_status_monitor_setup: None, + disable_rabbitmq_lifespan: None, + disable_redis_lifespan: None, + disable_service_tracker_lifespan: None, + disable_deferred_manager_lifespan: None, + disable_notifier_lifespan: None, + disable_status_monitor_lifespan: None, app_environment: EnvVarsDict, ) -> EnvVarsDict: return app_environment diff --git a/services/dynamic-scheduler/tests/unit/service_tracker/test__api.py b/services/dynamic-scheduler/tests/unit/service_tracker/test__api.py index ab89f54e8616..b8d385089f31 100644 --- a/services/dynamic-scheduler/tests/unit/service_tracker/test__api.py +++ b/services/dynamic-scheduler/tests/unit/service_tracker/test__api.py @@ -52,10 +52,10 @@ @pytest.fixture def app_environment( - disable_rabbitmq_setup: None, - disable_deferred_manager_setup: None, - disable_notifier_setup: None, - disable_status_monitor_setup: None, + disable_rabbitmq_lifespan: None, + disable_deferred_manager_lifespan: None, + disable_notifier_lifespan: None, + disable_status_monitor_lifespan: None, app_environment: EnvVarsDict, redis_service: RedisSettings, remove_redis_data: None, diff --git a/services/dynamic-scheduler/tests/unit/service_tracker/test__tracker.py b/services/dynamic-scheduler/tests/unit/service_tracker/test__tracker.py index f1c29a3d3f75..8ad52fd1f9ce 100644 --- a/services/dynamic-scheduler/tests/unit/service_tracker/test__tracker.py +++ b/services/dynamic-scheduler/tests/unit/service_tracker/test__tracker.py @@ -36,9 +36,9 @@ def disable_monitor_task(mocker: MockerFixture) -> None: @pytest.fixture def app_environment( disable_monitor_task: None, - disable_rabbitmq_setup: None, - disable_deferred_manager_setup: None, - disable_notifier_setup: None, + disable_rabbitmq_lifespan: None, + disable_deferred_manager_lifespan: None, + disable_notifier_lifespan: None, app_environment: EnvVarsDict, redis_service: RedisSettings, remove_redis_data: None, diff --git a/services/dynamic-scheduler/tests/unit/test_services_director_v0.py b/services/dynamic-scheduler/tests/unit/test_services_director_v0.py index 0c2db384c25c..9ad42924d542 100644 --- a/services/dynamic-scheduler/tests/unit/test_services_director_v0.py +++ b/services/dynamic-scheduler/tests/unit/test_services_director_v0.py @@ -21,12 +21,12 @@ @pytest.fixture def app_environment( - disable_redis_setup: None, - disable_rabbitmq_setup: None, - disable_service_tracker_setup: None, - disable_deferred_manager_setup: None, - disable_notifier_setup: None, - disable_status_monitor_setup: None, + disable_redis_lifespan: None, + disable_rabbitmq_lifespan: None, + disable_service_tracker_lifespan: None, + disable_deferred_manager_lifespan: None, + disable_notifier_lifespan: None, + disable_status_monitor_lifespan: None, app_environment: EnvVarsDict, ) -> EnvVarsDict: return app_environment diff --git a/services/dynamic-scheduler/tests/unit/test_services_rabbitmq.py b/services/dynamic-scheduler/tests/unit/test_services_rabbitmq.py index eadb7c9ee038..12c355162c05 100644 --- a/services/dynamic-scheduler/tests/unit/test_services_rabbitmq.py +++ b/services/dynamic-scheduler/tests/unit/test_services_rabbitmq.py @@ -20,11 +20,11 @@ @pytest.fixture def app_environment( - disable_redis_setup: None, - disable_service_tracker_setup: None, - disable_deferred_manager_setup: None, - disable_notifier_setup: None, - disable_status_monitor_setup: None, + disable_redis_lifespan: None, + disable_service_tracker_lifespan: None, + disable_deferred_manager_lifespan: None, + disable_notifier_lifespan: None, + disable_status_monitor_lifespan: None, app_environment: EnvVarsDict, rabbit_service: RabbitSettings, ) -> EnvVarsDict: diff --git a/services/dynamic-scheduler/tests/unit/test_services_redis.py b/services/dynamic-scheduler/tests/unit/test_services_redis.py index 059a17aeb0fc..be4952fbea6e 100644 --- a/services/dynamic-scheduler/tests/unit/test_services_redis.py +++ b/services/dynamic-scheduler/tests/unit/test_services_redis.py @@ -15,10 +15,10 @@ @pytest.fixture def app_environment( - disable_rabbitmq_setup: None, - disable_deferred_manager_setup: None, - disable_notifier_setup: None, - disable_status_monitor_setup: None, + disable_rabbitmq_lifespan: None, + disable_deferred_manager_lifespan: None, + disable_notifier_lifespan: None, + disable_status_monitor_lifespan: None, app_environment: EnvVarsDict, redis_service: RedisSettings, ) -> EnvVarsDict: diff --git a/services/dynamic-sidecar/requirements/_base.txt b/services/dynamic-sidecar/requirements/_base.txt index f1ff88057671..614193f285df 100644 --- a/services/dynamic-sidecar/requirements/_base.txt +++ b/services/dynamic-sidecar/requirements/_base.txt @@ -156,6 +156,9 @@ fastapi==0.115.5 # via # -r requirements/../../../packages/service-library/requirements/_fastapi.in # -r requirements/_base.in + # fastapi-lifespan-manager +fastapi-lifespan-manager==0.1.4 + # via -r requirements/../../../packages/service-library/requirements/_fastapi.in faststream==0.5.31 # via # -r requirements/../../../packages/service-library/requirements/_base.in @@ -626,6 +629,34 @@ redis==5.2.1 # -r requirements/../../../packages/simcore-sdk/requirements/../../../packages/service-library/requirements/_base.in referencing==0.35.1 # via + # -c requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/models-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/models-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/postgres-database/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/postgres-database/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/service-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/service-library/requirements/../../../packages/models-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/service-library/requirements/../../../packages/models-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/service-library/requirements/../../../packages/settings-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/service-library/requirements/../../../packages/settings-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/service-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/settings-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/settings-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/simcore-sdk/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/simcore-sdk/requirements/../../../packages/models-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/simcore-sdk/requirements/../../../packages/models-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/simcore-sdk/requirements/../../../packages/postgres-database/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/simcore-sdk/requirements/../../../packages/postgres-database/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/simcore-sdk/requirements/../../../packages/service-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/simcore-sdk/requirements/../../../packages/service-library/requirements/../../../packages/models-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/simcore-sdk/requirements/../../../packages/service-library/requirements/../../../packages/models-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/simcore-sdk/requirements/../../../packages/service-library/requirements/../../../packages/settings-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/simcore-sdk/requirements/../../../packages/service-library/requirements/../../../packages/settings-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/simcore-sdk/requirements/../../../packages/service-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/simcore-sdk/requirements/../../../packages/settings-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/simcore-sdk/requirements/../../../packages/settings-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/simcore-sdk/requirements/../../../requirements/constraints.txt + # -c requirements/../../../requirements/constraints.txt # jsonschema # jsonschema-specifications requests==2.32.3 diff --git a/services/efs-guardian/requirements/_base.txt b/services/efs-guardian/requirements/_base.txt index 4d9bd5f7fc39..0b41961a9cfe 100644 --- a/services/efs-guardian/requirements/_base.txt +++ b/services/efs-guardian/requirements/_base.txt @@ -93,7 +93,34 @@ attrs==24.2.0 # jsonschema # referencing boto3==1.35.36 - # via aiobotocore + # via + # -c requirements/../../../packages/aws-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/aws-library/requirements/../../../packages/models-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/aws-library/requirements/../../../packages/models-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/aws-library/requirements/../../../packages/service-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/aws-library/requirements/../../../packages/service-library/requirements/../../../packages/models-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/aws-library/requirements/../../../packages/service-library/requirements/../../../packages/models-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/aws-library/requirements/../../../packages/service-library/requirements/../../../packages/settings-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/aws-library/requirements/../../../packages/service-library/requirements/../../../packages/settings-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/aws-library/requirements/../../../packages/service-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/aws-library/requirements/../../../packages/settings-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/aws-library/requirements/../../../packages/settings-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/aws-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/models-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/models-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/postgres-database/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/postgres-database/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/service-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/service-library/requirements/../../../packages/models-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/service-library/requirements/../../../packages/models-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/service-library/requirements/../../../packages/settings-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/service-library/requirements/../../../packages/settings-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/service-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/settings-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/settings-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../requirements/constraints.txt + # aiobotocore botocore==1.35.36 # via # aiobotocore @@ -154,7 +181,10 @@ fastapi==0.115.5 # via # -r requirements/../../../packages/service-library/requirements/_fastapi.in # -r requirements/_base.in + # fastapi-lifespan-manager # prometheus-fastapi-instrumentator +fastapi-lifespan-manager==0.1.4 + # via -r requirements/../../../packages/service-library/requirements/_fastapi.in faststream==0.5.31 # via # -r requirements/../../../packages/aws-library/requirements/../../../packages/service-library/requirements/_base.in @@ -586,6 +616,32 @@ redis==5.2.1 # -r requirements/../../../packages/service-library/requirements/_base.in referencing==0.29.3 # via + # -c requirements/../../../packages/aws-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/aws-library/requirements/../../../packages/models-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/aws-library/requirements/../../../packages/models-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/aws-library/requirements/../../../packages/service-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/aws-library/requirements/../../../packages/service-library/requirements/../../../packages/models-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/aws-library/requirements/../../../packages/service-library/requirements/../../../packages/models-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/aws-library/requirements/../../../packages/service-library/requirements/../../../packages/settings-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/aws-library/requirements/../../../packages/service-library/requirements/../../../packages/settings-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/aws-library/requirements/../../../packages/service-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/aws-library/requirements/../../../packages/settings-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/aws-library/requirements/../../../packages/settings-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/aws-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/models-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/models-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/postgres-database/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/postgres-database/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/service-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/service-library/requirements/../../../packages/models-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/service-library/requirements/../../../packages/models-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/service-library/requirements/../../../packages/settings-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/service-library/requirements/../../../packages/settings-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/service-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/settings-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/settings-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../requirements/constraints.txt # jsonschema # jsonschema-specifications requests==2.32.3 diff --git a/services/invitations/requirements/_base.txt b/services/invitations/requirements/_base.txt index 515fe9c9567d..2522f21fbe5f 100644 --- a/services/invitations/requirements/_base.txt +++ b/services/invitations/requirements/_base.txt @@ -108,6 +108,9 @@ fastapi==0.115.5 # via # -r requirements/../../../packages/service-library/requirements/_fastapi.in # -r requirements/_base.in + # fastapi-lifespan-manager +fastapi-lifespan-manager==0.1.4 + # via -r requirements/../../../packages/service-library/requirements/_fastapi.in faststream==0.5.31 # via -r requirements/../../../packages/service-library/requirements/_base.in frozenlist==1.5.0 @@ -371,6 +374,18 @@ redis==5.2.1 # -r requirements/../../../packages/service-library/requirements/_base.in referencing==0.35.1 # via + # -c requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/models-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/models-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/service-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/service-library/requirements/../../../packages/models-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/service-library/requirements/../../../packages/models-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/service-library/requirements/../../../packages/settings-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/service-library/requirements/../../../packages/settings-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/service-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/settings-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/settings-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../requirements/constraints.txt # jsonschema # jsonschema-specifications requests==2.32.3 diff --git a/services/payments/requirements/_base.txt b/services/payments/requirements/_base.txt index a3a8b15b9d70..e2a3b2a31f55 100644 --- a/services/payments/requirements/_base.txt +++ b/services/payments/requirements/_base.txt @@ -124,6 +124,9 @@ fastapi==0.115.5 # via # -r requirements/../../../packages/service-library/requirements/_fastapi.in # -r requirements/_base.in + # fastapi-lifespan-manager +fastapi-lifespan-manager==0.1.4 + # via -r requirements/../../../packages/service-library/requirements/_fastapi.in faststream==0.5.31 # via -r requirements/../../../packages/service-library/requirements/_base.in frozenlist==1.5.0 @@ -462,6 +465,20 @@ redis==5.2.1 # -r requirements/../../../packages/service-library/requirements/_base.in referencing==0.35.1 # via + # -c requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/models-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/models-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/postgres-database/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/postgres-database/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/service-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/service-library/requirements/../../../packages/models-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/service-library/requirements/../../../packages/models-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/service-library/requirements/../../../packages/settings-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/service-library/requirements/../../../packages/settings-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/service-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/settings-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/settings-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../requirements/constraints.txt # jsonschema # jsonschema-specifications requests==2.32.3 diff --git a/services/resource-usage-tracker/requirements/_base.txt b/services/resource-usage-tracker/requirements/_base.txt index b20058f6992e..dda85299ef45 100644 --- a/services/resource-usage-tracker/requirements/_base.txt +++ b/services/resource-usage-tracker/requirements/_base.txt @@ -93,7 +93,34 @@ attrs==23.2.0 # jsonschema # referencing boto3==1.34.131 - # via aiobotocore + # via + # -c requirements/../../../packages/aws-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/aws-library/requirements/../../../packages/models-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/aws-library/requirements/../../../packages/models-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/aws-library/requirements/../../../packages/service-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/aws-library/requirements/../../../packages/service-library/requirements/../../../packages/models-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/aws-library/requirements/../../../packages/service-library/requirements/../../../packages/models-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/aws-library/requirements/../../../packages/service-library/requirements/../../../packages/settings-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/aws-library/requirements/../../../packages/service-library/requirements/../../../packages/settings-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/aws-library/requirements/../../../packages/service-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/aws-library/requirements/../../../packages/settings-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/aws-library/requirements/../../../packages/settings-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/aws-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/models-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/models-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/postgres-database/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/postgres-database/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/service-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/service-library/requirements/../../../packages/models-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/service-library/requirements/../../../packages/models-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/service-library/requirements/../../../packages/settings-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/service-library/requirements/../../../packages/settings-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/service-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/settings-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/settings-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../requirements/constraints.txt + # aiobotocore botocore==1.34.131 # via # aiobotocore @@ -160,7 +187,10 @@ fastapi==0.115.5 # via # -r requirements/../../../packages/service-library/requirements/_fastapi.in # -r requirements/_base.in + # fastapi-lifespan-manager # prometheus-fastapi-instrumentator +fastapi-lifespan-manager==0.1.4 + # via -r requirements/../../../packages/service-library/requirements/_fastapi.in faststream==0.5.31 # via # -r requirements/../../../packages/aws-library/requirements/../../../packages/service-library/requirements/_base.in @@ -626,6 +656,32 @@ redis==5.2.1 # -r requirements/../../../packages/service-library/requirements/_base.in referencing==0.29.3 # via + # -c requirements/../../../packages/aws-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/aws-library/requirements/../../../packages/models-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/aws-library/requirements/../../../packages/models-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/aws-library/requirements/../../../packages/service-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/aws-library/requirements/../../../packages/service-library/requirements/../../../packages/models-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/aws-library/requirements/../../../packages/service-library/requirements/../../../packages/models-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/aws-library/requirements/../../../packages/service-library/requirements/../../../packages/settings-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/aws-library/requirements/../../../packages/service-library/requirements/../../../packages/settings-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/aws-library/requirements/../../../packages/service-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/aws-library/requirements/../../../packages/settings-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/aws-library/requirements/../../../packages/settings-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/aws-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/models-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/models-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/postgres-database/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/postgres-database/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/service-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/service-library/requirements/../../../packages/models-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/service-library/requirements/../../../packages/models-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/service-library/requirements/../../../packages/settings-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/service-library/requirements/../../../packages/settings-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/service-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/settings-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/settings-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../requirements/constraints.txt # jsonschema # jsonschema-specifications regex==2023.12.25 diff --git a/services/storage/requirements/_base.txt b/services/storage/requirements/_base.txt index df1f0513a0e9..5b4260654e90 100644 --- a/services/storage/requirements/_base.txt +++ b/services/storage/requirements/_base.txt @@ -102,7 +102,34 @@ attrs==23.2.0 # jsonschema # referencing boto3==1.34.131 - # via aiobotocore + # via + # -c requirements/../../../packages/aws-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/aws-library/requirements/../../../packages/models-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/aws-library/requirements/../../../packages/models-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/aws-library/requirements/../../../packages/service-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/aws-library/requirements/../../../packages/service-library/requirements/../../../packages/models-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/aws-library/requirements/../../../packages/service-library/requirements/../../../packages/models-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/aws-library/requirements/../../../packages/service-library/requirements/../../../packages/settings-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/aws-library/requirements/../../../packages/service-library/requirements/../../../packages/settings-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/aws-library/requirements/../../../packages/service-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/aws-library/requirements/../../../packages/settings-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/aws-library/requirements/../../../packages/settings-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/aws-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/models-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/models-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/postgres-database/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/postgres-database/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/service-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/service-library/requirements/../../../packages/models-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/service-library/requirements/../../../packages/models-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/service-library/requirements/../../../packages/settings-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/service-library/requirements/../../../packages/settings-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/service-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/settings-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/settings-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../requirements/constraints.txt + # aiobotocore botocore==1.34.131 # via # aiobotocore @@ -584,6 +611,32 @@ redis==5.2.1 # -r requirements/../../../packages/service-library/requirements/_base.in referencing==0.29.3 # via + # -c requirements/../../../packages/aws-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/aws-library/requirements/../../../packages/models-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/aws-library/requirements/../../../packages/models-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/aws-library/requirements/../../../packages/service-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/aws-library/requirements/../../../packages/service-library/requirements/../../../packages/models-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/aws-library/requirements/../../../packages/service-library/requirements/../../../packages/models-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/aws-library/requirements/../../../packages/service-library/requirements/../../../packages/settings-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/aws-library/requirements/../../../packages/service-library/requirements/../../../packages/settings-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/aws-library/requirements/../../../packages/service-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/aws-library/requirements/../../../packages/settings-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/aws-library/requirements/../../../packages/settings-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/aws-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/models-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/models-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/postgres-database/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/postgres-database/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/service-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/service-library/requirements/../../../packages/models-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/service-library/requirements/../../../packages/models-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/service-library/requirements/../../../packages/settings-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/service-library/requirements/../../../packages/settings-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/service-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/settings-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../packages/settings-library/requirements/../../../requirements/constraints.txt + # -c requirements/../../../requirements/constraints.txt # jsonschema # jsonschema-specifications requests==2.32.2