Added retry on TooManyRequests with 1sec delay.
Also added logging when it happens, with body and headers as context.
This commit is contained in:
parent
16d7a3ffa2
commit
901bad5341
@ -459,4 +459,45 @@ public class CajetanApiService(IAuthService authService, IConfigService configSe
|
||||
MediasCount = userDto.MediasCount,
|
||||
};
|
||||
}
|
||||
|
||||
protected new async Task<string?> BuildHeaderAndExecuteRequests(Dictionary<string, string> getParams, string endpoint, HttpClient client, HttpMethod? method = null, object? reqBody = null)
|
||||
{
|
||||
const int RETRY_ATTEMPTS = 3;
|
||||
|
||||
Log.Debug("Calling BuildHeaderAndExecuteRequests");
|
||||
|
||||
for (int i = 0; i < RETRY_ATTEMPTS; i++)
|
||||
{
|
||||
using HttpResponseMessage response = await BuildAndExecuteAsync();
|
||||
|
||||
if (response.IsSuccessStatusCode)
|
||||
return await ReadBodyAsync(response);
|
||||
|
||||
if (response.StatusCode != System.Net.HttpStatusCode.TooManyRequests)
|
||||
response.EnsureSuccessStatusCode();
|
||||
|
||||
string errorBody = await response.Content.ReadAsStringAsync();
|
||||
Log.ForContext("ErrorBody", errorBody)
|
||||
.ForContext("ErrorHeaders", response.Headers)
|
||||
.Warning("Too Many Requests -- Waiting and retrying");
|
||||
await Task.Delay(1000);
|
||||
continue;
|
||||
}
|
||||
|
||||
throw new Exception($"Request failed after {RETRY_ATTEMPTS} attempts!");
|
||||
|
||||
async Task<HttpResponseMessage> BuildAndExecuteAsync()
|
||||
{
|
||||
HttpRequestMessage request = await BuildHttpRequestMessage(getParams, endpoint, method, reqBody);
|
||||
HttpResponseMessage response = await client.SendAsync(request);
|
||||
return response;
|
||||
}
|
||||
|
||||
async Task<string?> ReadBodyAsync(HttpResponseMessage response)
|
||||
{
|
||||
string body = await response.Content.ReadAsStringAsync();
|
||||
Log.Debug(body);
|
||||
return body;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user