Skip to content

Commit 5c81e4a

Browse files
committed
instrument httx clients in director-v2
1 parent 7aba213 commit 5c81e4a

File tree

6 files changed

+73
-40
lines changed

6 files changed

+73
-40
lines changed

services/director-v2/src/simcore_service_director_v2/core/application.py

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -149,19 +149,22 @@ def init_app(settings: AppSettings | None = None) -> FastAPI:
149149

150150
substitutions.setup(app)
151151

152+
if settings.DIRECTOR_V2_TRACING:
153+
setup_tracing(app, app.state.settings.DIRECTOR_V2_TRACING, APP_NAME)
154+
152155
if settings.DIRECTOR_V0.DIRECTOR_V0_ENABLED:
153-
director_v0.setup(app, settings.DIRECTOR_V0)
156+
director_v0.setup(app, settings)
154157

155158
if settings.DIRECTOR_V2_STORAGE:
156-
storage.setup(app, settings.DIRECTOR_V2_STORAGE)
159+
storage.setup(app, settings)
157160

158161
if settings.DIRECTOR_V2_CATALOG:
159-
catalog.setup(app, settings.DIRECTOR_V2_CATALOG)
162+
catalog.setup(app, settings)
160163

161164
db.setup(app, settings.POSTGRES)
162165

163166
if settings.DYNAMIC_SERVICES.DIRECTOR_V2_DYNAMIC_SERVICES_ENABLED:
164-
dynamic_services.setup(app)
167+
dynamic_services.setup(app, settings)
165168

166169
dynamic_scheduler_enabled = settings.DYNAMIC_SERVICES.DYNAMIC_SIDECAR and (
167170
settings.DYNAMIC_SERVICES.DYNAMIC_SCHEDULER
@@ -192,8 +195,6 @@ def init_app(settings: AppSettings | None = None) -> FastAPI:
192195

193196
if settings.DIRECTOR_V2_PROMETHEUS_INSTRUMENTATION_ENABLED:
194197
instrumentation.setup(app)
195-
if settings.DIRECTOR_V2_TRACING:
196-
setup_tracing(app, app.state.settings.DIRECTOR_V2_TRACING, APP_NAME)
197198

198199
if settings.DIRECTOR_V2_PROFILING:
199200
app.add_middleware(ProfilerMiddleware)

services/director-v2/src/simcore_service_director_v2/modules/catalog.py

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -9,26 +9,35 @@
99
from models_library.services_resources import ServiceResourcesDict
1010
from models_library.users import UserID
1111
from pydantic import parse_obj_as
12+
from servicelib.fastapi.tracing import setup_httpx_client_tracing
1213
from settings_library.catalog import CatalogSettings
1314

15+
from ..core.settings import AppSettings
1416
from ..utils.client_decorators import handle_errors, handle_retry
1517

1618
logger = logging.getLogger(__name__)
1719

1820

19-
def setup(app: FastAPI, settings: CatalogSettings) -> None:
20-
if not settings:
21-
settings = CatalogSettings()
21+
def setup(app: FastAPI, settings: AppSettings) -> None:
22+
catalog_settings = settings.DIRECTOR_V2_CATALOG
23+
tracing_settings = settings.DIRECTOR_V2_TRACING
24+
25+
if not catalog_settings:
26+
catalog_settings = CatalogSettings()
2227

2328
async def on_startup() -> None:
29+
client = httpx.AsyncClient(
30+
base_url=f"{catalog_settings.api_base_url}",
31+
timeout=app.state.settings.CLIENT_REQUEST.HTTP_CLIENT_REQUEST_TOTAL_TIMEOUT,
32+
)
33+
if tracing_settings:
34+
setup_httpx_client_tracing(client=client)
35+
2436
CatalogClient.create(
2537
app,
26-
client=httpx.AsyncClient(
27-
base_url=f"{settings.api_base_url}",
28-
timeout=app.state.settings.CLIENT_REQUEST.HTTP_CLIENT_REQUEST_TOTAL_TIMEOUT,
29-
),
38+
client=client,
3039
)
31-
logger.debug("created client for catalog: %s", settings.api_base_url)
40+
logger.debug("created client for catalog: %s", catalog_settings.api_base_url)
3241

3342
# Here we currently do not ensure the catalog is up on start
3443
# This will need to be assessed.

services/director-v2/src/simcore_service_director_v2/modules/director_v0.py

Lines changed: 19 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,4 @@
1-
""" Module that takes care of communications with director v0 service
2-
3-
4-
"""
1+
"""Module that takes care of communications with director v0 service"""
52

63
import logging
74
import urllib.parse
@@ -20,9 +17,10 @@
2017
from models_library.service_settings_labels import SimcoreServiceLabels
2118
from models_library.services import ServiceKey, ServiceKeyVersion, ServiceVersion
2219
from models_library.users import UserID
20+
from servicelib.fastapi.tracing import setup_httpx_client_tracing
2321
from servicelib.logging_utils import log_decorator
2422

25-
from ..core.settings import DirectorV0Settings
23+
from ..core.settings import AppSettings, DirectorV0Settings
2624
from ..utils.client_decorators import handle_errors, handle_retry
2725
from ..utils.clients import unenvelope_or_raise_error
2826

@@ -31,25 +29,32 @@
3129
# Module's setup logic ---------------------------------------------
3230

3331

34-
def setup(app: FastAPI, settings: DirectorV0Settings | None):
35-
if not settings:
36-
settings = DirectorV0Settings()
32+
def setup(app: FastAPI, settings: AppSettings):
33+
director_v0_settings = settings.DIRECTOR_V0
34+
tracing_settings = settings.DIRECTOR_V2_TRACING
35+
if not director_v0_settings:
36+
director_v0_settings = DirectorV0Settings()
3737

3838
def on_startup() -> None:
39+
client = httpx.AsyncClient(
40+
base_url=f"{director_v0_settings.endpoint}",
41+
timeout=app.state.settings.CLIENT_REQUEST.HTTP_CLIENT_REQUEST_TOTAL_TIMEOUT,
42+
)
43+
if tracing_settings:
44+
setup_httpx_client_tracing(client=client)
3945
DirectorV0Client.create(
4046
app,
41-
client=httpx.AsyncClient(
42-
base_url=f"{settings.endpoint}",
43-
timeout=app.state.settings.CLIENT_REQUEST.HTTP_CLIENT_REQUEST_TOTAL_TIMEOUT,
44-
),
47+
client=client,
48+
)
49+
logger.debug(
50+
"created client for director-v0: %s", director_v0_settings.endpoint
4551
)
46-
logger.debug("created client for director-v0: %s", settings.endpoint)
4752

4853
async def on_shutdown() -> None:
4954
client = DirectorV0Client.instance(app).client
5055
await client.aclose()
5156
del client
52-
logger.debug("delete client for director-v0: %s", settings.endpoint)
57+
logger.debug("delete client for director-v0: %s", director_v0_settings.endpoint)
5358

5459
app.add_event_handler("startup", on_startup)
5560
app.add_event_handler("shutdown", on_shutdown)

services/director-v2/src/simcore_service_director_v2/modules/dynamic_services.py

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,19 +8,26 @@
88

99
import httpx
1010
from fastapi import FastAPI
11+
from servicelib.fastapi.tracing import setup_httpx_client_tracing
1112

13+
from ..core.settings import AppSettings
1214
from ..utils.client_decorators import handle_errors, handle_retry
1315

1416
logger = logging.getLogger(__name__)
1517

1618

17-
def setup(app: FastAPI) -> None:
19+
def setup(app: FastAPI, settings: AppSettings) -> None:
20+
tracing_settings = settings.DIRECTOR_V2_TRACING
21+
1822
def on_startup() -> None:
23+
client = httpx.AsyncClient(
24+
timeout=app.state.settings.CLIENT_REQUEST.HTTP_CLIENT_REQUEST_TOTAL_TIMEOUT
25+
)
26+
if tracing_settings:
27+
setup_httpx_client_tracing(client=client)
1928
ServicesClient.create(
2029
app,
21-
client=httpx.AsyncClient(
22-
timeout=app.state.settings.CLIENT_REQUEST.HTTP_CLIENT_REQUEST_TOTAL_TIMEOUT
23-
),
30+
client=client,
2431
)
2532

2633
async def on_shutdown() -> None:

services/director-v2/src/simcore_service_director_v2/modules/resource_usage_tracker_client.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
from models_library.services import ServiceKey, ServiceVersion
2525
from models_library.wallets import WalletID
2626
from pydantic import parse_obj_as
27+
from servicelib.fastapi.tracing import setup_httpx_client_tracing
2728

2829
from ..core.errors import PricingPlanUnitNotFoundError
2930
from ..core.settings import AppSettings
@@ -41,6 +42,8 @@ def create(cls, settings: AppSettings) -> "ResourceUsageTrackerClient":
4142
client = httpx.AsyncClient(
4243
base_url=settings.DIRECTOR_V2_RESOURCE_USAGE_TRACKER.api_base_url,
4344
)
45+
if settings.DIRECTOR_V2_TRACING:
46+
setup_httpx_client_tracing(client=client)
4447
exit_stack = contextlib.AsyncExitStack()
4548

4649
return cls(client=client, exit_stack=exit_stack)

services/director-v2/src/simcore_service_director_v2/modules/storage.py

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -8,13 +8,15 @@
88
import httpx
99
from fastapi import FastAPI, HTTPException
1010
from models_library.users import UserID
11+
from servicelib.fastapi.tracing import setup_httpx_client_tracing
1112
from servicelib.logging_utils import log_decorator
1213
from settings_library.s3 import S3Settings
1314
from settings_library.storage import StorageSettings
1415

1516
# Module's business logic ---------------------------------------------
1617
from starlette import status
1718

19+
from ..core.settings import AppSettings
1820
from ..utils.client_decorators import handle_errors, handle_retry
1921
from ..utils.clients import unenvelope_or_raise_error
2022

@@ -23,19 +25,25 @@
2325
# Module's setup logic ---------------------------------------------
2426

2527

26-
def setup(app: FastAPI, settings: StorageSettings):
27-
if not settings:
28-
settings = StorageSettings()
28+
def setup(app: FastAPI, settings: AppSettings):
29+
storage_settings = settings.DIRECTOR_V2_STORAGE
30+
tracing_settings = settings.DIRECTOR_V2_TRACING
31+
32+
if not storage_settings:
33+
storage_settings = StorageSettings()
2934

3035
def on_startup() -> None:
36+
client = httpx.AsyncClient(
37+
base_url=f"{storage_settings.api_base_url}",
38+
timeout=app.state.settings.CLIENT_REQUEST.HTTP_CLIENT_REQUEST_TOTAL_TIMEOUT,
39+
)
40+
if tracing_settings:
41+
setup_httpx_client_tracing(client=client)
3142
StorageClient.create(
3243
app,
33-
client=httpx.AsyncClient(
34-
base_url=f"{settings.api_base_url}",
35-
timeout=app.state.settings.CLIENT_REQUEST.HTTP_CLIENT_REQUEST_TOTAL_TIMEOUT,
36-
),
44+
client=client,
3745
)
38-
logger.debug("created client for storage: %s", settings.api_base_url)
46+
logger.debug("created client for storage: %s", storage_settings.api_base_url)
3947

4048
async def on_shutdown() -> None:
4149
client = StorageClient.instance(app).client

0 commit comments

Comments
 (0)