Skip to content

Commit ebbab7c

Browse files
authored
Merge pull request #235 from ecmwf-projects/COPDS-2353-better-logs
Enhance logs
2 parents 55dabd5 + 83e05fe commit ebbab7c

File tree

7 files changed

+36
-20
lines changed

7 files changed

+36
-20
lines changed

cads_processing_api_service/clients.py

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,8 @@ 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")
111+
structlog.contextvars.bind_contextvars(client_endpoint="get_processes")
112+
logger.info("get_processes")
112113
statement = sqlalchemy.select(self.process_table)
113114
sort_key, sort_dir = utils.parse_sortby(sortby.name)
114115
if cursor:
@@ -161,8 +162,9 @@ def get_process(
161162
Process description.
162163
"""
163164
structlog.contextvars.bind_contextvars(
164-
operation="get_process", process_id=process_id
165+
client_endpoint="get_process", process_id=process_id
165166
)
167+
logger.info("get_process")
166168
catalogue_sessionmaker = db_utils.get_catalogue_sessionmaker(
167169
db_utils.ConnectionMode.read
168170
)
@@ -219,10 +221,11 @@ def post_process_execution(
219221
"""
220222
structlog.contextvars.bind_contextvars(
221223
**auth_info.model_dump(),
222-
operation="post_process_execution",
224+
client_endpoint="post_process_execution",
223225
process_id=process_id,
224226
execution_content=execution_content.model_dump(),
225227
)
228+
logger.info("post_process_execution")
226229
_ = limits.check_rate_limits(
227230
SETTINGS.rate_limits.process_execution.post,
228231
auth_info,
@@ -379,8 +382,9 @@ def get_jobs(
379382
List of jobs status information.
380383
"""
381384
structlog.contextvars.bind_contextvars(
382-
**auth_info.model_dump(), operation="get_jobs"
385+
**auth_info.model_dump(), client_endpoint="get_jobs"
383386
)
387+
logger.info("get_jobs")
384388
_ = limits.check_rate_limits(
385389
SETTINGS.rate_limits.jobs.get,
386390
auth_info,
@@ -501,8 +505,9 @@ def get_job(
501505
Job status information.
502506
"""
503507
structlog.contextvars.bind_contextvars(
504-
**auth_info.model_dump(), job_id=job_id, operation="get_job"
508+
**auth_info.model_dump(), job_id=job_id, client_endpoint="get_job"
505509
)
510+
logger.info("get_job")
506511
_ = limits.check_rate_limits(
507512
SETTINGS.rate_limits.job.get,
508513
auth_info,
@@ -630,8 +635,9 @@ def get_job_results(
630635
Job results.
631636
"""
632637
structlog.contextvars.bind_contextvars(
633-
**auth_info.model_dump(), job_id=job_id, operation="get_job_results"
638+
**auth_info.model_dump(), job_id=job_id, client_endpoint="get_job_results"
634639
)
640+
logger.info("get_job_results")
635641
_ = limits.check_rate_limits(
636642
SETTINGS.rate_limits.job_results.get,
637643
auth_info,

cads_processing_api_service/costing.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,8 @@
2828

2929

3030
class RequestOrigin(str, enum.Enum):
31-
api: str = "api"
32-
ui: str = "ui"
31+
api = "api"
32+
ui = "ui"
3333

3434

3535
def estimate_cost(

cads_processing_api_service/exceptions.py

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,14 @@ class RateLimitExceeded(ogc_api_processes_fastapi.exceptions.OGCAPIException):
6363
retry_after: int = 0
6464

6565

66+
def find_last_context_line(lines: list[str]) -> int:
67+
index = 0
68+
for i, line in enumerate(lines):
69+
if "result = context.run(func, *args)" in line:
70+
index = len(lines) - i - 1
71+
return index
72+
73+
6674
def format_exception_content(
6775
exc: ogc_api_processes_fastapi.exceptions.OGCAPIException,
6876
request: fastapi.Request | None = None,
@@ -201,9 +209,11 @@ def general_exception_handler(
201209
-------
202210
fastapi.responses.JSONResponse
203211
"""
212+
exc_traceback = list(traceback.TracebackException.from_exception(exc).format())
213+
last_context_line = find_last_context_line(list(exc_traceback))
204214
logger.error(
205215
"internal server error",
206-
exception="".join(traceback.TracebackException.from_exception(exc).format()),
216+
exception="".join(exc_traceback[-last_context_line:]),
207217
)
208218
out = fastapi.responses.JSONResponse(
209219
status_code=fastapi.status.HTTP_500_INTERNAL_SERVER_ERROR,

cads_processing_api_service/limits.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,8 +41,8 @@ def check_rate_limits_for_user(
4141
for rate_limit in rate_limits_exceeded
4242
]
4343
expiry = storage.get_expiry(user_uid)
44-
time_to_wait = max(
45-
[reset_time - expiry for reset_time in rate_limiters_reset_time]
44+
time_to_wait = round(
45+
max([reset_time - expiry for reset_time in rate_limiters_reset_time])
4646
)
4747
raise exceptions.RateLimitExceeded(
4848
detail=f"Rate limit exceeded. Please wait {time_to_wait} seconds.",

cads_processing_api_service/main.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@ async def initialize_logger(
9393
) -> Any:
9494
structlog.contextvars.clear_contextvars()
9595
trace_id = str(uuid.uuid4())
96-
structlog.contextvars.bind_contextvars(trace_id=trace_id)
96+
structlog.contextvars.bind_contextvars(trace_id=trace_id, request=request.url.path)
9797
response = await call_next(request)
9898
return response
9999

cads_processing_api_service/models.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -32,10 +32,10 @@ class AuthInfo(pydantic.BaseModel):
3232

3333

3434
class StatusCode(str, enum.Enum):
35-
accepted: str = "accepted"
36-
running: str = "running"
37-
successful: str = "successful"
38-
failed: str = "failed"
35+
accepted = "accepted"
36+
running = "running"
37+
successful = "successful"
38+
failed = "failed"
3939

4040

4141
class StatusInfoMetadata(pydantic.BaseModel):

cads_processing_api_service/utils.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -44,13 +44,13 @@
4444

4545

4646
class ProcessSortCriterion(str, enum.Enum):
47-
resource_uid_asc: str = "id"
48-
resource_uid_desc: str = "-id"
47+
resource_uid_asc = "id"
48+
resource_uid_desc = "-id"
4949

5050

5151
class JobSortCriterion(str, enum.Enum):
52-
created_at_asc: str = "created"
53-
created_at_desc: str = "-created"
52+
created_at_asc = "created"
53+
created_at_desc = "-created"
5454

5555

5656
@cachetools.cached(

0 commit comments

Comments
 (0)