Skip to content
9 changes: 6 additions & 3 deletions packages/service-library/src/servicelib/fastapi/tracing.py
Original file line number Diff line number Diff line change
Expand Up @@ -101,7 +101,6 @@ def _startup(tracing_settings: TracingSettings, service_name: str) -> None:
span_processor = BatchSpanProcessor(otlp_exporter)
global_tracer_provider.add_span_processor(span_processor)

FastAPIInstrumentor().instrument()
if HAS_AIOPG:
with log_context(
_logger,
Expand Down Expand Up @@ -181,14 +180,18 @@ def _shutdown() -> None:
_logger.exception("Failed to uninstrument RequestsInstrumentor")


def initialize_fastapi_app_tracing(app: FastAPI):
FastAPIInstrumentor.instrument_app(app)


def setup_httpx_client_tracing(client: AsyncClient | Client):
HTTPXClientInstrumentor.instrument_client(client)


def setup_tracing(
app: FastAPI, tracing_settings: TracingSettings, service_name: str
) -> None:

# NOTE: This does not instrument the app itself. Call setup_fastapi_app_tracing to do that.
_startup(tracing_settings=tracing_settings, service_name=service_name)

def _on_shutdown() -> None:
Expand All @@ -200,7 +203,7 @@ def _on_shutdown() -> None:
def get_tracing_instrumentation_lifespan(
tracing_settings: TracingSettings, service_name: str
):

# NOTE: This lifespan does not instrument the app itself. Call setup_fastapi_app_tracing to do that.
_startup(tracing_settings=tracing_settings, service_name=service_name)

async def tracing_instrumentation_lifespan(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,10 @@
get_common_oas_options,
override_fastapi_openapi_method,
)
from servicelib.fastapi.tracing import setup_tracing
from servicelib.fastapi.tracing import (
initialize_fastapi_app_tracing,
setup_tracing,
)
from servicelib.logging_utils import config_all_loggers

from .._meta import (
Expand Down Expand Up @@ -66,6 +69,9 @@ def create_app() -> FastAPI:
setup_rest_api(app)
setup_rpc_api_routes(app)

if settings.AGENT_TRACING:
initialize_fastapi_app_tracing(app)

async def _on_startup() -> None:
print(APP_STARTED_BANNER_MSG, flush=True) # noqa: T201

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,10 @@
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_fastapi_app_tracing,
setup_tracing,
)
from servicelib.logging_utils import config_all_loggers

from .. import exceptions
Expand Down Expand Up @@ -93,6 +96,9 @@ def init_app(settings: ApplicationSettings | None = None) -> FastAPI:
if app.state.settings.API_SERVER_PROMETHEUS_INSTRUMENTATION_ENABLED:
setup_prometheus_instrumentation(app)

if settings.API_SERVER_TRACING:
initialize_fastapi_app_tracing(app)

if settings.API_SERVER_WEBSERVER:
webserver.setup(
app,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,10 @@
import logging

from fastapi import FastAPI
from servicelib.fastapi.tracing import setup_tracing
from servicelib.fastapi.tracing import (
initialize_fastapi_app_tracing,
setup_tracing,
)

from .._meta import (
API_VERSION,
Expand Down Expand Up @@ -71,6 +74,9 @@ def create_app(settings: ApplicationSettings) -> FastAPI:
setup_ssm(app)
setup_redis(app)

if app.state.settings.AUTOSCALING_TRACING:
initialize_fastapi_app_tracing(app)

setup_auto_scaler_background_task(app)
setup_buffer_machines_pool_task(app)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,10 @@
setup_prometheus_instrumentation,
)
from servicelib.fastapi.openapi import override_fastapi_openapi_method
from servicelib.fastapi.tracing import setup_tracing
from servicelib.fastapi.tracing import (
initialize_fastapi_app_tracing,
setup_tracing,
)
from starlette.middleware.base import BaseHTTPMiddleware

from .._meta import (
Expand Down Expand Up @@ -68,6 +71,9 @@ def create_app() -> FastAPI:
if settings.CATALOG_PROMETHEUS_INSTRUMENTATION_ENABLED:
setup_prometheus_instrumentation(app)

if settings.CATALOG_TRACING:
initialize_fastapi_app_tracing(app)

if settings.SC_BOOT_MODE != BootModeEnum.PRODUCTION:
# middleware to time requests (ONLY for development)
app.add_middleware(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,10 @@
from servicelib.fastapi.monitoring import (
setup_prometheus_instrumentation,
)
from servicelib.fastapi.tracing import setup_tracing
from servicelib.fastapi.tracing import (
initialize_fastapi_app_tracing,
setup_tracing,
)

from .._meta import (
API_VERSION,
Expand Down Expand Up @@ -76,6 +79,8 @@ def create_app(settings: ApplicationSettings) -> FastAPI:
setup_redis(app)
setup_clusters_management(app)

if app.state.settings.CLUSTERS_KEEPER_TRACING:
initialize_fastapi_app_tracing(app)
# ERROR HANDLERS

# EVENTS
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,10 @@
setup_prometheus_instrumentation,
)
from servicelib.fastapi.openapi import override_fastapi_openapi_method
from servicelib.fastapi.tracing import setup_tracing
from servicelib.fastapi.tracing import (
initialize_fastapi_app_tracing,
setup_tracing,
)
from starlette.middleware.base import BaseHTTPMiddleware

from .._meta import API_VERSION, API_VTAG, APP_NAME
Expand Down Expand Up @@ -76,6 +79,9 @@ def create_app(settings: ApplicationSettings) -> FastAPI:
)
app.add_middleware(GZipMiddleware)

if app.state.settings.DATCORE_ADAPTER_TRACING:
initialize_fastapi_app_tracing(app)

# events
app.add_event_handler("startup", on_startup)
app.add_event_handler("startup", create_start_app_handler(app))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,10 @@
override_fastapi_openapi_method,
)
from servicelib.fastapi.profiler import initialize_profiler
from servicelib.fastapi.tracing import setup_tracing
from servicelib.fastapi.tracing import (
initialize_fastapi_app_tracing,
setup_tracing,
)
from servicelib.logging_utils import config_all_loggers

from .._meta import API_VERSION, API_VTAG, APP_NAME, PROJECT_NAME, SUMMARY
Expand Down Expand Up @@ -174,6 +177,9 @@ def init_app(settings: AppSettings | None = None) -> FastAPI:

db.setup(app, settings.POSTGRES)

if settings.DIRECTOR_V2_TRACING:
initialize_fastapi_app_tracing(app)

if settings.DYNAMIC_SERVICES.DIRECTOR_V2_DYNAMIC_SERVICES_ENABLED:
dynamic_services.setup(app, tracing_settings=settings.DIRECTOR_V2_TRACING)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,10 @@
from fastapi import FastAPI
from servicelib.async_utils import cancel_sequential_workers
from servicelib.fastapi.client_session import setup_client_session
from servicelib.fastapi.tracing import setup_tracing
from servicelib.fastapi.tracing import (
initialize_fastapi_app_tracing,
setup_tracing,
)

from .._meta import (
API_VERSION,
Expand Down Expand Up @@ -62,6 +65,9 @@ def create_app(settings: ApplicationSettings) -> FastAPI:
)
setup_registry(app)

if app.state.settings.DIRECTOR_TRACING:
initialize_fastapi_app_tracing(app)

# ERROR HANDLERS

# EVENTS
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
)
from servicelib.fastapi.openapi import override_fastapi_openapi_method
from servicelib.fastapi.profiler import initialize_profiler
from servicelib.fastapi.tracing import initialize_fastapi_app_tracing

from .._meta import API_VERSION, API_VTAG, PROJECT_NAME, SUMMARY
from ..api.frontend import initialize_frontend
Expand Down Expand Up @@ -42,4 +43,7 @@ def create_app(settings: ApplicationSettings | None = None) -> FastAPI:
if app_settings.DYNAMIC_SCHEDULER_PROFILING:
initialize_profiler(app)

if app_settings.DYNAMIC_SCHEDULER_TRACING:
initialize_fastapi_app_tracing(app)

return app
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,10 @@
get_common_oas_options,
override_fastapi_openapi_method,
)
from servicelib.fastapi.tracing import setup_tracing
from servicelib.fastapi.tracing import (
initialize_fastapi_app_tracing,
setup_tracing,
)
from servicelib.logging_utils import config_all_loggers
from simcore_sdk.node_ports_common.exceptions import NodeNotFound

Expand Down Expand Up @@ -196,6 +199,9 @@ def create_app():
if application_settings.are_prometheus_metrics_enabled:
setup_prometheus_metrics(app)

if application_settings.DYNAMIC_SIDECAR_TRACING:
initialize_fastapi_app_tracing(app)

# ERROR HANDLERS ------------
app.add_exception_handler(
NodeNotFound,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,10 @@
import logging

from fastapi import FastAPI
from servicelib.fastapi.tracing import setup_tracing
from servicelib.fastapi.tracing import (
initialize_fastapi_app_tracing,
setup_tracing,
)

from .._meta import (
API_VERSION,
Expand Down Expand Up @@ -59,6 +62,9 @@ def create_app(settings: ApplicationSettings | None = None) -> FastAPI:

setup_fire_and_forget(app)

if app.state.settings.EFS_GUARDIAN_TRACING:
initialize_fastapi_app_tracing(app)

# EVENTS
async def _on_startup() -> None:
print(APP_STARTED_BANNER_MSG, flush=True) # noqa: T201
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,10 @@
setup_prometheus_instrumentation,
)
from servicelib.fastapi.openapi import override_fastapi_openapi_method
from servicelib.fastapi.tracing import setup_tracing
from servicelib.fastapi.tracing import (
initialize_fastapi_app_tracing,
setup_tracing,
)

from .._meta import (
API_VERSION,
Expand Down Expand Up @@ -35,14 +38,18 @@ def create_app(settings: ApplicationSettings | None = None) -> FastAPI:
app.state.settings = settings or ApplicationSettings() # type: ignore[call-arg]
assert app.state.settings.API_VERSION == API_VERSION # nosec

if app.state.settings.INVITATIONS_TRACING:
setup_tracing(app, app.state.settings.INVITATIONS_TRACING, APP_NAME)

# PLUGINS SETUP
setup_api_routes(app)

if app.state.settings.INVITATIONS_TRACING:
setup_tracing(app, app.state.settings.INVITATIONS_TRACING, APP_NAME)
if app.state.settings.INVITATIONS_PROMETHEUS_INSTRUMENTATION_ENABLED:
setup_prometheus_instrumentation(app)

if app.state.settings.INVITATIONS_TRACING:
initialize_fastapi_app_tracing(app)

# ERROR HANDLERS
exceptions_handlers.setup(app)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,10 @@
get_common_oas_options,
override_fastapi_openapi_method,
)
from servicelib.fastapi.tracing import setup_tracing
from servicelib.fastapi.tracing import (
initialize_fastapi_app_tracing,
setup_tracing,
)
from servicelib.logging_utils import config_all_loggers

from .._meta import API_VTAG, APP_NAME, SUMMARY, VERSION
Expand Down Expand Up @@ -57,4 +60,7 @@ def create_app() -> FastAPI:
if settings.NOTIFICATIONS_PROMETHEUS_INSTRUMENTATION_ENABLED:
initialize_prometheus_instrumentation(app)

if settings.NOTIFICATIONS_TRACING:
initialize_fastapi_app_tracing(app)

return app
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,10 @@
setup_prometheus_instrumentation,
)
from servicelib.fastapi.openapi import override_fastapi_openapi_method
from servicelib.fastapi.tracing import setup_tracing
from servicelib.fastapi.tracing import (
initialize_fastapi_app_tracing,
setup_tracing,
)

from .._meta import (
API_VERSION,
Expand Down Expand Up @@ -74,6 +77,9 @@ 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:
initialize_fastapi_app_tracing(app)

# ERROR HANDLERS
# ... add here ...

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,10 @@

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_fastapi_app_tracing,
setup_tracing,
)

from .._meta import (
API_VERSION,
Expand Down Expand Up @@ -72,6 +75,9 @@ def create_app(settings: ApplicationSettings) -> FastAPI:

setup_process_message_running_service(app) # Requires Rabbit

if app.state.settings.RESOURCE_USAGE_TRACKER_TRACING:
initialize_fastapi_app_tracing(app)

# ERROR HANDLERS
setup_exception_handlers(app)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,10 @@
)
from servicelib.fastapi.openapi import override_fastapi_openapi_method
from servicelib.fastapi.profiler import ProfilerMiddleware
from servicelib.fastapi.tracing import setup_tracing
from servicelib.fastapi.tracing import (
initialize_fastapi_app_tracing,
setup_tracing,
)
from starlette.middleware.base import BaseHTTPMiddleware

from .._meta import (
Expand Down Expand Up @@ -117,6 +120,9 @@ def create_app(settings: ApplicationSettings) -> FastAPI: # noqa: C901
if settings.STORAGE_MONITORING_ENABLED:
setup_prometheus_instrumentation(app)

if settings.STORAGE_TRACING:
initialize_fastapi_app_tracing(app)

async def _on_startup() -> None:
if settings.STORAGE_WORKER_MODE:
print(APP_WORKER_STARTED_BANNER_MSG, flush=True) # noqa: T201
Expand Down
Loading