From a4d50a11dbd6560527243202cd5ca5c9782daf9a Mon Sep 17 00:00:00 2001 From: ryo-ma Date: Thu, 28 Sep 2023 00:56:48 +0900 Subject: [PATCH] Fixed the number of Github API requests that were being executed twice. --- index.ts | 2 +- src/github_api_client.ts | 51 +++++++++++++++++++++++++++++----------- src/utils.ts | 1 + 3 files changed, 39 insertions(+), 15 deletions(-) diff --git a/index.ts b/index.ts index 5f7f6cda..0bbbcce8 100644 --- a/index.ts +++ b/index.ts @@ -101,4 +101,4 @@ async function app (req: Request): Promise{ headers: defaultHeaders, }, ); -}; +} diff --git a/src/github_api_client.ts b/src/github_api_client.ts index c23bc60c..c4b8361e 100644 --- a/src/github_api_client.ts +++ b/src/github_api_client.ts @@ -24,6 +24,7 @@ export class GithubAPIClient { this.requestUserRepository(username), ]); if (results.some((r) => r == null)) { + console.error(`Can not find a user with username:'${username}'`); return null; } return new UserInfo(results[0]!, results[1]!, results[2]!, results[3]!); @@ -109,28 +110,50 @@ export class GithubAPIClient { private async request( query: string, username: string, + retryDelay = CONSTANTS.DEFAULT_GITHUB_RETRY_DELAY, ) { const tokens = [ Deno.env.get("GITHUB_TOKEN1"), Deno.env.get("GITHUB_TOKEN2"), ]; + const maxRetries = tokens.length; + const variables = { username: username }; let response; - for (const token of tokens) { - response = await soxa.post( - this.apiEndpoint, - {}, - { - data: { query: query, variables }, - headers: { Authorization: `bearer ${token}` }, - }, - ).catch((error) => { - console.error(error.response.data); - }); - if (response.data.data !== undefined) { - break; + + for (let attempt = 0; attempt < maxRetries; attempt++) { + try { + response = await soxa.post( + this.apiEndpoint, + {}, + { + data: { query: query, variables }, + headers: { Authorization: `bearer ${tokens[attempt]}` }, + }, + ); + if (response.data.errors !== undefined) { + throw new Error( + response.data.errors.map((e: { message: string; type: string }) => + e.message + ).join("\n"), + ); + } + if (response.data.data !== undefined) { + return response.data.data.user; + } else { + return null; + } + } catch (error) { + console.error( + `Attempt ${attempt} failed with GITHUB_TOKEN${attempt + 1}:`, + error, + ); } + + console.log(`Retrying in ${retryDelay / 1000} seconds...`); + await new Promise((resolve) => setTimeout(resolve, retryDelay)); } - return response.data.data.user; + + throw new Error(`Max retries (${maxRetries}) exceeded.`); } } diff --git a/src/utils.ts b/src/utils.ts index 3b650435..0ed5cd30 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -65,6 +65,7 @@ export const CONSTANTS = { DEFAULT_NO_BACKGROUND: false, DEFAULT_NO_FRAME: false, DEFAULT_GITHUB_API: "https://api.github.com/graphql", + DEFAULT_GITHUB_RETRY_DELAY: 1000, REVALIDATE_TIME: HOUR_IN_MILLISECONDS, };