Skip to content

Commit

Permalink
Log a message when a retried requests succeeds
Browse files Browse the repository at this point in the history
  • Loading branch information
marcospri committed Feb 19, 2025
1 parent 5ebc0d4 commit 69c2c6e
Show file tree
Hide file tree
Showing 4 changed files with 34 additions and 2 deletions.
14 changes: 13 additions & 1 deletion lms/static/scripts/frontend_apps/utils/api.ts
Original file line number Diff line number Diff line change
Expand Up @@ -78,6 +78,9 @@ export type APICallOptions = {

/** Signal that can be used to cancel the request. */
signal?: AbortSignal;

/** Additional headers to include in the request. */
extraHeaders?: Record<string, string>;
};

function delay(ms: number) {
Expand Down Expand Up @@ -107,12 +110,14 @@ export async function apiCall<Result = unknown>(
retryCount = 0,
retryDelay = 1000,
signal,
extraHeaders,
} = options;

let body;

const headers: Record<string, string> = {
Authorization: authToken,
...extraHeaders,
};

if (data !== undefined) {
Expand All @@ -136,7 +141,14 @@ export async function apiCall<Result = unknown>(
retryCount < maxRetries
) {
await delay(retryDelay);
return apiCall({ ...options, retryCount: retryCount + 1 });
return apiCall({
...options,
extraHeaders: {
...extraHeaders,
['Retry-Count']: (retryCount + 1).toString(),
},
retryCount: retryCount + 1,
});
}

// Refresh expired access tokens for external APIs, if required. Only one
Expand Down
2 changes: 2 additions & 0 deletions lms/views/api/grading.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
APIRecordResultSchema,
APIRecordSpeedgraderSchema,
)
from lms.views.helpers import log_retries_callback

LOG = logging.getLogger(__name__)

Expand Down Expand Up @@ -150,6 +151,7 @@ def record_canvas_speedgrader_submission(self):
self.request.registry.notify(
LTIEvent.from_request(request=self.request, type_=LTIEvent.Type.SUBMISSION)
)
self.request.add_finished_callback(log_retries_callback)
return {}


Expand Down
3 changes: 2 additions & 1 deletion lms/views/helpers/__init__.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
from lms.views.helpers._logging import log_retries_callback
from lms.views.helpers._via import via_url, via_video_url

__all__ = ["via_url", "via_video_url"]
__all__ = ["log_retries_callback", "via_url", "via_video_url"]
17 changes: 17 additions & 0 deletions lms/views/helpers/_logging.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
import logging

LOG = logging.getLogger(__name__)


def log_retries_callback(request):
"""Log a message when a retried requests succeeds."""
if (
request.headers.get("Retry-Count")
and request.response.status_code >= 200
and request.response.status_code < 300
):
LOG.debug(
"Request to %s succeeded after %s retries",
request.path_info,
request.headers["Retry-Count"],
)

0 comments on commit 69c2c6e

Please sign in to comment.