diff --git a/packages/service-library/src/servicelib/fastapi/tracing.py b/packages/service-library/src/servicelib/fastapi/tracing.py index 04e20b84e579..e26cc367064c 100644 --- a/packages/service-library/src/servicelib/fastapi/tracing.py +++ b/packages/service-library/src/servicelib/fastapi/tracing.py @@ -3,10 +3,8 @@ """ 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 ( @@ -17,7 +15,6 @@ 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 @@ -64,7 +61,7 @@ HAS_REQUESTS = False -def setup_tracing( +def initialize_tracing( app: FastAPI, tracing_settings: TracingSettings, service_name: str ) -> None: if ( @@ -134,15 +131,5 @@ 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_tracing.py b/packages/service-library/tests/fastapi/test_tracing.py index 412b59b116d0..a7a1afb4ba78 100644 --- a/packages/service-library/tests/fastapi/test_tracing.py +++ b/packages/service-library/tests/fastapi/test_tracing.py @@ -11,7 +11,7 @@ import pytest from fastapi import FastAPI from pydantic import ValidationError -from servicelib.fastapi.tracing import setup_tracing +from servicelib.fastapi.tracing import initialize_tracing from settings_library.tracing import TracingSettings @@ -54,13 +54,13 @@ async def test_valid_tracing_settings( uninstrument_opentelemetry: Iterator[None], ): tracing_settings = TracingSettings() - setup_tracing( + initialize_tracing( mocked_app, tracing_settings=tracing_settings, service_name="Mock-Openetlemetry-Pytest", ) # idempotency - setup_tracing( + initialize_tracing( mocked_app, tracing_settings=tracing_settings, service_name="Mock-Openetlemetry-Pytest", @@ -92,7 +92,7 @@ async def test_invalid_tracing_settings( app = mocked_app with pytest.raises((BaseException, ValidationError, TypeError)): # noqa: PT012 tracing_settings = TracingSettings() - setup_tracing( + initialize_tracing( app, tracing_settings=tracing_settings, service_name="Mock-Openetlemetry-Pytest", @@ -146,13 +146,13 @@ async def test_tracing_setup_package_detection( importlib.import_module(package_name) # tracing_settings = TracingSettings() - setup_tracing( + initialize_tracing( mocked_app, tracing_settings=tracing_settings, service_name="Mock-Openetlemetry-Pytest", ) # idempotency - setup_tracing( + initialize_tracing( mocked_app, tracing_settings=tracing_settings, service_name="Mock-Openetlemetry-Pytest", diff --git a/services/agent/src/simcore_service_agent/core/application.py b/services/agent/src/simcore_service_agent/core/application.py index b0cfa8720e42..b4a5ce8cd48a 100644 --- a/services/agent/src/simcore_service_agent/core/application.py +++ b/services/agent/src/simcore_service_agent/core/application.py @@ -5,7 +5,7 @@ get_common_oas_options, override_fastapi_openapi_method, ) -from servicelib.fastapi.tracing import setup_tracing +from servicelib.fastapi.tracing import initialize_tracing from servicelib.logging_utils import config_all_loggers from .._meta import ( @@ -64,7 +64,7 @@ def create_app() -> FastAPI: setup_rpc_api_routes(app) if settings.AGENT_TRACING: - setup_tracing(app, settings.AGENT_TRACING, APP_NAME) + initialize_tracing(app, settings.AGENT_TRACING, APP_NAME) async def _on_startup() -> None: print(APP_STARTED_BANNER_MSG, flush=True) # noqa: T201 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 19323b4e001e..cde8280313ac 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 @@ -5,7 +5,7 @@ from models_library.basic_types import BootModeEnum from packaging.version import Version from servicelib.fastapi.profiler import initialize_profiler -from servicelib.fastapi.tracing import setup_tracing +from servicelib.fastapi.tracing import initialize_tracing from servicelib.logging_utils import config_all_loggers from .. import exceptions @@ -84,7 +84,7 @@ def init_app(settings: ApplicationSettings | None = None) -> FastAPI: setup_rabbitmq(app) if settings.API_SERVER_TRACING: - setup_tracing(app, settings.API_SERVER_TRACING, APP_NAME) + initialize_tracing(app, settings.API_SERVER_TRACING, APP_NAME) if settings.API_SERVER_WEBSERVER: webserver.setup( diff --git a/services/autoscaling/src/simcore_service_autoscaling/core/application.py b/services/autoscaling/src/simcore_service_autoscaling/core/application.py index 6261232bce5a..f70a8be583c2 100644 --- a/services/autoscaling/src/simcore_service_autoscaling/core/application.py +++ b/services/autoscaling/src/simcore_service_autoscaling/core/application.py @@ -1,7 +1,7 @@ import logging from fastapi import FastAPI -from servicelib.fastapi.tracing import setup_tracing +from servicelib.fastapi.tracing import initialize_tracing from .._meta import ( API_VERSION, @@ -71,7 +71,7 @@ def create_app(settings: ApplicationSettings) -> FastAPI: setup_auto_scaler_background_task(app) setup_buffer_machines_pool_task(app) if app.state.settings.AUTOSCALING_TRACING: - setup_tracing(app, app.state.settings.AUTOSCALING_TRACING, APP_NAME) + initialize_tracing(app, app.state.settings.AUTOSCALING_TRACING, APP_NAME) # ERROR HANDLERS diff --git a/services/catalog/src/simcore_service_catalog/core/application.py b/services/catalog/src/simcore_service_catalog/core/application.py index 72ecc8ba0ba4..95a2a836c5d8 100644 --- a/services/catalog/src/simcore_service_catalog/core/application.py +++ b/services/catalog/src/simcore_service_catalog/core/application.py @@ -9,7 +9,7 @@ from servicelib.fastapi.prometheus_instrumentation import ( setup_prometheus_instrumentation, ) -from servicelib.fastapi.tracing import setup_tracing +from servicelib.fastapi.tracing import initialize_tracing from starlette.middleware.base import BaseHTTPMiddleware from .._meta import API_VERSION, API_VTAG, APP_NAME, PROJECT_NAME, SUMMARY @@ -47,7 +47,7 @@ def create_app(settings: ApplicationSettings | None = None) -> FastAPI: app.state.settings = settings if settings.CATALOG_TRACING: - setup_tracing(app, settings.CATALOG_TRACING, APP_NAME) + initialize_tracing(app, settings.CATALOG_TRACING, APP_NAME) # STARTUP-EVENT app.add_event_handler("startup", create_on_startup(app)) diff --git a/services/clusters-keeper/src/simcore_service_clusters_keeper/core/application.py b/services/clusters-keeper/src/simcore_service_clusters_keeper/core/application.py index ac3955a3f253..ad354a2c8b13 100644 --- a/services/clusters-keeper/src/simcore_service_clusters_keeper/core/application.py +++ b/services/clusters-keeper/src/simcore_service_clusters_keeper/core/application.py @@ -4,7 +4,7 @@ from servicelib.fastapi.prometheus_instrumentation import ( setup_prometheus_instrumentation, ) -from servicelib.fastapi.tracing import setup_tracing +from servicelib.fastapi.tracing import initialize_tracing from .._meta import ( API_VERSION, @@ -45,7 +45,7 @@ def create_app(settings: ApplicationSettings) -> FastAPI: if app.state.settings.CLUSTERS_KEEPER_PROMETHEUS_INSTRUMENTATION_ENABLED: setup_prometheus_instrumentation(app) if app.state.settings.CLUSTERS_KEEPER_TRACING: - setup_tracing( + initialize_tracing( app, app.state.settings.CLUSTERS_KEEPER_TRACING, APP_NAME, diff --git a/services/datcore-adapter/src/simcore_service_datcore_adapter/core/application.py b/services/datcore-adapter/src/simcore_service_datcore_adapter/core/application.py index d653dc6a090b..9b037edacbdc 100644 --- a/services/datcore-adapter/src/simcore_service_datcore_adapter/core/application.py +++ b/services/datcore-adapter/src/simcore_service_datcore_adapter/core/application.py @@ -6,7 +6,7 @@ from servicelib.fastapi.prometheus_instrumentation import ( setup_prometheus_instrumentation, ) -from servicelib.fastapi.tracing import setup_tracing +from servicelib.fastapi.tracing import initialize_tracing from servicelib.logging_utils import config_all_loggers from .._meta import API_VERSION, API_VTAG, APP_NAME @@ -70,7 +70,7 @@ def create_app(settings: ApplicationSettings | None = None) -> FastAPI: if app.state.settings.DATCORE_ADAPTER_PROMETHEUS_INSTRUMENTATION_ENABLED: setup_prometheus_instrumentation(app) if app.state.settings.DATCORE_ADAPTER_TRACING: - setup_tracing( + initialize_tracing( app, app.state.settings.DATCORE_ADAPTER_TRACING, APP_NAME, 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 acb2abe4b695..c53c841183e4 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 @@ -7,7 +7,7 @@ override_fastapi_openapi_method, ) from servicelib.fastapi.profiler import initialize_profiler -from servicelib.fastapi.tracing import setup_tracing +from servicelib.fastapi.tracing import initialize_tracing from servicelib.logging_utils import config_all_loggers from .._meta import API_VERSION, API_VTAG, APP_NAME, PROJECT_NAME, SUMMARY @@ -145,7 +145,7 @@ def init_app(settings: AppSettings | None = None) -> FastAPI: substitutions.setup(app) if settings.DIRECTOR_V2_TRACING: - setup_tracing(app, settings.DIRECTOR_V2_TRACING, APP_NAME) + initialize_tracing(app, settings.DIRECTOR_V2_TRACING, APP_NAME) if settings.DIRECTOR_V0.DIRECTOR_ENABLED: director_v0.setup( diff --git a/services/director/src/simcore_service_director/core/application.py b/services/director/src/simcore_service_director/core/application.py index 86031f0d935e..252bb25f0615 100644 --- a/services/director/src/simcore_service_director/core/application.py +++ b/services/director/src/simcore_service_director/core/application.py @@ -3,7 +3,7 @@ from fastapi import FastAPI from servicelib.async_utils import cancel_sequential_workers -from servicelib.fastapi.tracing import setup_tracing +from servicelib.fastapi.tracing import initialize_tracing from .._meta import ( API_VERSION, @@ -51,7 +51,7 @@ def create_app(settings: ApplicationSettings) -> FastAPI: setup_api_routes(app) if app.state.settings.DIRECTOR_TRACING: - setup_tracing(app, app.state.settings.DIRECTOR_TRACING, APP_NAME) + initialize_tracing(app, app.state.settings.DIRECTOR_TRACING, APP_NAME) # replace by httpx client setup_client_session(app) 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 a7f54a1411cb..f2bde3bfd88b 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 @@ -9,7 +9,7 @@ initialize_prometheus_instrumentation, lifespan_prometheus_instrumentation, ) -from servicelib.fastapi.tracing import get_lifespan_tracing +from servicelib.fastapi.tracing import initialize_tracing from .._meta import ( API_VERSION, @@ -59,11 +59,6 @@ def create_app(settings: ApplicationSettings | None = None) -> FastAPI: 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, @@ -87,6 +82,9 @@ def create_app(settings: ApplicationSettings | None = None) -> FastAPI: initialize_frontend(app) + if app_settings.DYNAMIC_SCHEDULER_TRACING: + initialize_tracing(app, app_settings.DYNAMIC_SCHEDULER_TRACING, APP_NAME) + if app_settings.DYNAMIC_SCHEDULER_PROFILING: initialize_profiler(app) diff --git a/services/dynamic-sidecar/src/simcore_service_dynamic_sidecar/core/application.py b/services/dynamic-sidecar/src/simcore_service_dynamic_sidecar/core/application.py index 58c5495563fc..22e8c4729ede 100644 --- a/services/dynamic-sidecar/src/simcore_service_dynamic_sidecar/core/application.py +++ b/services/dynamic-sidecar/src/simcore_service_dynamic_sidecar/core/application.py @@ -9,7 +9,7 @@ get_common_oas_options, override_fastapi_openapi_method, ) -from servicelib.fastapi.tracing import setup_tracing +from servicelib.fastapi.tracing import initialize_tracing from servicelib.logging_utils import config_all_loggers from simcore_sdk.node_ports_common.exceptions import NodeNotFound @@ -193,7 +193,9 @@ def create_app(): setup_prometheus_metrics(app) if application_settings.DYNAMIC_SIDECAR_TRACING: - setup_tracing(app, application_settings.DYNAMIC_SIDECAR_TRACING, PROJECT_NAME) + initialize_tracing( + app, application_settings.DYNAMIC_SIDECAR_TRACING, PROJECT_NAME + ) # ERROR HANDLERS ------------ app.add_exception_handler( diff --git a/services/efs-guardian/src/simcore_service_efs_guardian/core/application.py b/services/efs-guardian/src/simcore_service_efs_guardian/core/application.py index 217a3d0a1bdd..956a3c891de3 100644 --- a/services/efs-guardian/src/simcore_service_efs_guardian/core/application.py +++ b/services/efs-guardian/src/simcore_service_efs_guardian/core/application.py @@ -1,7 +1,7 @@ import logging from fastapi import FastAPI -from servicelib.fastapi.tracing import setup_tracing +from servicelib.fastapi.tracing import initialize_tracing from .._meta import ( API_VERSION, @@ -43,7 +43,7 @@ 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.EFS_GUARDIAN_TRACING: - setup_tracing(app, app.state.settings.EFS_GUARDIAN_TRACING, APP_NAME) + initialize_tracing(app, app.state.settings.EFS_GUARDIAN_TRACING, APP_NAME) # PLUGINS SETUP setup_rabbitmq(app) diff --git a/services/invitations/src/simcore_service_invitations/core/application.py b/services/invitations/src/simcore_service_invitations/core/application.py index 98b798862c1e..b3f96c07a820 100644 --- a/services/invitations/src/simcore_service_invitations/core/application.py +++ b/services/invitations/src/simcore_service_invitations/core/application.py @@ -3,7 +3,7 @@ from servicelib.fastapi.prometheus_instrumentation import ( setup_prometheus_instrumentation, ) -from servicelib.fastapi.tracing import setup_tracing +from servicelib.fastapi.tracing import initialize_tracing from .._meta import ( API_VERSION, @@ -41,7 +41,7 @@ def create_app(settings: ApplicationSettings | None = None) -> FastAPI: if app.state.settings.INVITATIONS_PROMETHEUS_INSTRUMENTATION_ENABLED: setup_prometheus_instrumentation(app) if app.state.settings.INVITATIONS_TRACING: - setup_tracing(app, app.state.settings.INVITATIONS_TRACING, APP_NAME) + initialize_tracing(app, app.state.settings.INVITATIONS_TRACING, APP_NAME) # ERROR HANDLERS exceptions_handlers.setup(app) diff --git a/services/payments/src/simcore_service_payments/core/application.py b/services/payments/src/simcore_service_payments/core/application.py index c85c7f91420d..6bfaf9b2dec0 100644 --- a/services/payments/src/simcore_service_payments/core/application.py +++ b/services/payments/src/simcore_service_payments/core/application.py @@ -3,7 +3,7 @@ from servicelib.fastapi.prometheus_instrumentation import ( setup_prometheus_instrumentation, ) -from servicelib.fastapi.tracing import setup_tracing +from servicelib.fastapi.tracing import initialize_tracing from .._meta import ( API_VERSION, @@ -71,7 +71,7 @@ def create_app(settings: ApplicationSettings | None = None) -> FastAPI: if app.state.settings.PAYMENTS_PROMETHEUS_INSTRUMENTATION_ENABLED: setup_prometheus_instrumentation(app) if app.state.settings.PAYMENTS_TRACING: - setup_tracing(app, app.state.settings.PAYMENTS_TRACING, APP_NAME) + initialize_tracing(app, app.state.settings.PAYMENTS_TRACING, APP_NAME) # ERROR HANDLERS # ... add here ... diff --git a/services/resource-usage-tracker/src/simcore_service_resource_usage_tracker/core/application.py b/services/resource-usage-tracker/src/simcore_service_resource_usage_tracker/core/application.py index 7299703a6bd4..ca07c55f20c3 100644 --- a/services/resource-usage-tracker/src/simcore_service_resource_usage_tracker/core/application.py +++ b/services/resource-usage-tracker/src/simcore_service_resource_usage_tracker/core/application.py @@ -2,7 +2,7 @@ from fastapi import FastAPI from servicelib.fastapi.openapi import override_fastapi_openapi_method -from servicelib.fastapi.tracing import setup_tracing +from servicelib.fastapi.tracing import initialize_tracing from .._meta import ( API_VERSION, @@ -67,7 +67,7 @@ def create_app(settings: ApplicationSettings) -> FastAPI: setup_process_message_running_service(app) # Requires Rabbit if app.state.settings.RESOURCE_USAGE_TRACKER_TRACING: - setup_tracing( + initialize_tracing( app, app.state.settings.RESOURCE_USAGE_TRACKER_TRACING, app.state.settings.APP_NAME,