Skip to content

Commit 55dabd5

Browse files
authored
Merge pull request #233 from ecmwf-projects/COPDS-2353-rationalize-logging
Rationalize logging
2 parents f952baa + 53006dd commit 55dabd5

File tree

3 files changed

+43
-9
lines changed

3 files changed

+43
-9
lines changed

cads_processing_api_service/clients.py

Lines changed: 38 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,7 @@ def get_processes(
108108
back : bool | None, optional
109109
Specifies in which sense the list of processes should be traversed, used for pagination.
110110
"""
111+
structlog.contextvars.bind_contextvars(operation="get_processes")
111112
statement = sqlalchemy.select(self.process_table)
112113
sort_key, sort_dir = utils.parse_sortby(sortby.name)
113114
if cursor:
@@ -159,6 +160,9 @@ def get_process(
159160
ogc_api_processes_fastapi.models.ProcessDescription
160161
Process description.
161162
"""
163+
structlog.contextvars.bind_contextvars(
164+
operation="get_process", process_id=process_id
165+
)
162166
catalogue_sessionmaker = db_utils.get_catalogue_sessionmaker(
163167
db_utils.ConnectionMode.read
164168
)
@@ -213,11 +217,16 @@ def post_process_execution(
213217
models.StatusInfo
214218
Submitted job's status information.
215219
"""
220+
structlog.contextvars.bind_contextvars(
221+
**auth_info.model_dump(),
222+
operation="post_process_execution",
223+
process_id=process_id,
224+
execution_content=execution_content.model_dump(),
225+
)
216226
_ = limits.check_rate_limits(
217227
SETTINGS.rate_limits.process_execution.post,
218228
auth_info,
219229
)
220-
structlog.contextvars.bind_contextvars(user_uid=auth_info.user_uid)
221230
request_body = execution_content.model_dump()
222231
portals = (
223232
[p.strip() for p in auth_info.portal_header.split(",")]
@@ -369,6 +378,9 @@ def get_jobs(
369378
models.JobList
370379
List of jobs status information.
371380
"""
381+
structlog.contextvars.bind_contextvars(
382+
**auth_info.model_dump(), operation="get_jobs"
383+
)
372384
_ = limits.check_rate_limits(
373385
SETTINGS.rate_limits.jobs.get,
374386
auth_info,
@@ -488,6 +500,9 @@ def get_job(
488500
models.StatusInfo
489501
Job status information.
490502
"""
503+
structlog.contextvars.bind_contextvars(
504+
**auth_info.model_dump(), job_id=job_id, operation="get_job"
505+
)
491506
_ = limits.check_rate_limits(
492507
SETTINGS.rate_limits.job.get,
493508
auth_info,
@@ -503,6 +518,9 @@ def get_job(
503518
else db_utils.ConnectionMode.read
504519
)
505520
try:
521+
structlog.contextvars.bind_contextvars(
522+
compute_connection_mode=compute_connection_mode
523+
)
506524
compute_sessionmaker = db_utils.get_compute_sessionmaker(
507525
mode=compute_connection_mode
508526
)
@@ -528,8 +546,12 @@ def get_job(
528546
if compute_connection_mode == db_utils.ConnectionMode.write:
529547
raise
530548
else:
549+
compute_connection_mode = db_utils.ConnectionMode.write
550+
structlog.contextvars.bind_contextvars(
551+
compute_connection_mode=compute_connection_mode
552+
)
531553
compute_sessionmaker = db_utils.get_compute_sessionmaker(
532-
mode=db_utils.ConnectionMode.write
554+
mode=compute_connection_mode
533555
)
534556
with compute_sessionmaker() as compute_session:
535557
job = utils.get_job_from_broker_db(
@@ -607,19 +629,22 @@ def get_job_results(
607629
ogc_api_processes_fastapi.models.Results
608630
Job results.
609631
"""
632+
structlog.contextvars.bind_contextvars(
633+
**auth_info.model_dump(), job_id=job_id, operation="get_job_results"
634+
)
610635
_ = limits.check_rate_limits(
611636
SETTINGS.rate_limits.job_results.get,
612637
auth_info,
613638
)
614-
structlog.contextvars.bind_contextvars(
615-
job_id=job_id, user_uid=auth_info.user_uid
616-
)
617639
compute_connection_mode = (
618640
db_utils.ConnectionMode.write
619641
if auth_info.request_origin == "ui"
620642
else db_utils.ConnectionMode.read
621643
)
622644
try:
645+
structlog.contextvars.bind_contextvars(
646+
compute_connection_mode=compute_connection_mode
647+
)
623648
compute_sessionmaker = db_utils.get_compute_sessionmaker(
624649
mode=compute_connection_mode
625650
)
@@ -636,6 +661,10 @@ def get_job_results(
636661
if compute_connection_mode == db_utils.ConnectionMode.write:
637662
raise
638663
else:
664+
compute_connection_mode = db_utils.ConnectionMode.write
665+
structlog.contextvars.bind_contextvars(
666+
compute_connection_mode=compute_connection_mode
667+
)
639668
compute_sessionmaker = db_utils.get_compute_sessionmaker(
640669
mode=db_utils.ConnectionMode.write
641670
)
@@ -671,13 +700,14 @@ def delete_job(
671700
ogc_api_processes_fastapi.models.StatusInfo
672701
Job status information
673702
"""
703+
structlog.contextvars.bind_contextvars(
704+
**auth_info.model_dump(), job_id=job_id, operation="delete_job"
705+
)
706+
logger.info("delete_job")
674707
_ = limits.check_rate_limits(
675708
SETTINGS.rate_limits.job.delete,
676709
auth_info,
677710
)
678-
structlog.contextvars.bind_contextvars(
679-
job_id=job_id, user_id=auth_info.user_uid
680-
)
681711
compute_sessionmaker = db_utils.get_compute_sessionmaker(
682712
mode=db_utils.ConnectionMode.write
683713
)

cads_processing_api_service/utils.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -463,15 +463,19 @@ def get_job_from_broker_db(
463463
"""
464464
try:
465465
job = cads_broker.database.get_request(request_uid=job_id, session=session)
466+
structlog.contextvars.bind_contextvars(job_status=job.status)
466467
if job.status in ("dismissed", "deleted"):
468+
logger.error("job status is dismissed or deleted")
467469
raise ogc_api_processes_fastapi.exceptions.NoSuchJob(
468470
detail=f"job {job_id} {job.status}"
469471
)
470472
except cads_broker.database.NoResultFound:
473+
logger.error("job not found")
471474
raise ogc_api_processes_fastapi.exceptions.NoSuchJob(
472475
detail=f"job {job_id} not found"
473476
)
474477
except cads_broker.database.InvalidRequestID:
478+
logger.error("invalid job id")
475479
raise ogc_api_processes_fastapi.exceptions.NoSuchJob(
476480
detail=f"invalid job id {job_id}"
477481
)

tests/test_30_limits.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ def test_check_rate_limits_for_user() -> None:
3939
cads_processing_api_service.limits.check_rate_limits_for_user(
4040
user_uid, rate_limits
4141
)
42-
assert exc.value.retry_after == 60
42+
assert exc.value.retry_after == pytest.approx(60)
4343

4444
rate_limit_ids = ["2/second"]
4545
rate_limits = [limits.parse(rate_limit_id) for rate_limit_id in rate_limit_ids]

0 commit comments

Comments
 (0)