Skip to content
This repository was archived by the owner on Aug 10, 2022. It is now read-only.

Commit a08c5d5

Browse files
Retry 403 Forbidden Httt Status Codes
This is used to accomidate GitHub's Rate-Limit Abuse policy: https://docs.github.com/en/free-pro-team@latest/rest/guides/best-practices-for-integrators#dealing-with-abuse-rate-limits
1 parent 725ba0b commit a08c5d5

2 files changed

Lines changed: 7 additions & 6 deletions

File tree

GitHubReadmeWebTrends.Common/Services/GitHubGraphQLApiService.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,10 +26,10 @@ public Task<GitHubViewerResponse> GetViewerInformation() =>
2626
GetGraphQLResponseData(GetViewerInformationResponse());
2727

2828
public Task<ApiResponse<GraphQLResponse<CreateBranchResponseModel>>> CreateBranchResponse(string repositoryId, string repositoryName, string branchOid, Guid guid) =>
29-
ExecuteGraphQLRequest(_gitHubGraphQLApiClient.CreateBranchMutation(new CreateBranchMutationContent(repositoryId, repositoryName, branchOid, guid)));
29+
ExecuteGraphQLRequest(_gitHubGraphQLApiClient.CreateBranchMutation(new CreateBranchMutationContent(repositoryId, repositoryName, branchOid, guid)));
3030

3131
public Task<ApiResponse<GraphQLResponse<RepositoryConnectionResponse>>> GetRepositoryResponse(string repositoryOwner, string repositoryName) =>
32-
ExecuteGraphQLRequest(_gitHubGraphQLApiClient.RepositoryConnectionQuery(new RepositoryConnectionQueryContent(repositoryOwner, repositoryName)));
32+
ExecuteGraphQLRequest(_gitHubGraphQLApiClient.RepositoryConnectionQuery(new RepositoryConnectionQueryContent(repositoryOwner, repositoryName)));
3333

3434
public Task<ApiResponse<GraphQLResponse<CreatePullRequestResponseModel>>> CreatePullRequestResponse(in string repositoryId, in string baseRefName, in string headRefName, in string title, in string body, in Guid clientMutationId, in bool maintainerCanModify = true, in bool draft = false) =>
3535
ExecuteGraphQLRequest(_gitHubGraphQLApiClient.CreatePullRequestMutation(new CreatePullRequestMutationContent(repositoryId, baseRefName, headRefName, title, body, clientMutationId, maintainerCanModify, draft)));

GitHubReadmeWebTrends.Common/Services/StartupService.cs

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
using System.Net.Http.Headers;
55
using Microsoft.Extensions.DependencyInjection;
66
using Polly;
7+
using Polly.Extensions.Http;
78
using Refit;
89

910
namespace GitHubReadmeWebTrends.Common
@@ -23,7 +24,8 @@ public static void ConfigureServices(in IServiceCollection services)
2324
client.DefaultRequestHeaders.Authorization = getBearerToken();
2425
})
2526
.ConfigurePrimaryHttpMessageHandler(config => new HttpClientHandler { AutomaticDecompression = getDecompressionMethods() })
26-
.AddTransientHttpErrorPolicy(builder => builder.WaitAndRetryAsync(3, sleepDurationProvider));
27+
.AddPolicyHandler(getPolicyHandler());
28+
2729

2830
services.AddRefitClient<IGitHubRestApiClient>()
2931
.ConfigureHttpClient(client =>
@@ -32,7 +34,7 @@ public static void ConfigureServices(in IServiceCollection services)
3234
client.DefaultRequestHeaders.Authorization = getBearerToken();
3335
})
3436
.ConfigurePrimaryHttpMessageHandler(config => new HttpClientHandler { AutomaticDecompression = getDecompressionMethods() })
35-
.AddTransientHttpErrorPolicy(builder => builder.WaitAndRetryAsync(3, sleepDurationProvider));
37+
.AddPolicyHandler(getPolicyHandler());
3638

3739
services.AddSingleton<YamlService>();
3840
services.AddSingleton<OptOutDatabase>();
@@ -41,10 +43,9 @@ public static void ConfigureServices(in IServiceCollection services)
4143
services.AddSingleton<CloudAdvocateService>();
4244
services.AddSingleton<GitHubApiStatusService>();
4345

44-
static TimeSpan sleepDurationProvider(int attemptNumber) => TimeSpan.FromSeconds(Math.Pow(2, attemptNumber));
45-
4646
static AuthenticationHeaderValue getBearerToken() => new AuthenticationHeaderValue("bearer", _token);
4747
static DecompressionMethods getDecompressionMethods() => DecompressionMethods.Deflate | DecompressionMethods.GZip;
48+
static IAsyncPolicy<HttpResponseMessage> getPolicyHandler() => HttpPolicyExtensions.HandleTransientHttpError().OrResult(msg => msg.StatusCode is HttpStatusCode.Forbidden).WaitAndRetryAsync(10, count => TimeSpan.FromSeconds(60));
4849
}
4950
}
5051
}

0 commit comments

Comments
 (0)