Skip to content

Commit 19e5a1e

Browse files
committed
feat: reduce vercel function duration
1 parent c2fa12c commit 19e5a1e

6 files changed

Lines changed: 63 additions & 38 deletions

File tree

api/cards/most-commit-language.ts

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
1-
import {getCommitsLanguageSVGWithThemeName} from '../../src/cards/most-commit-language-card';
2-
import {changToNextGitHubToken} from '../utils/github-token-updater';
3-
import {getErrorMsgCard} from '../utils/error-card';
4-
import {translateLanguage} from '../../src/utils/translator';
5-
import type {VercelRequest, VercelResponse} from '@vercel/node';
1+
import { getCommitsLanguageSVGWithThemeName } from '../../src/cards/most-commit-language-card';
2+
import { changToNextGitHubToken } from '../utils/github-token-updater';
3+
import { getErrorMsgCard } from '../utils/error-card';
4+
import { translateLanguage } from '../../src/utils/translator';
5+
import type { VercelRequest, VercelResponse } from '@vercel/node';
66

77
export default async (req: VercelRequest, res: VercelResponse) => {
8-
let {username, theme = 'default', exclude = ''} = req.query;
8+
let { username, theme = 'default', exclude = '' } = req.query;
99

1010
if (typeof theme !== 'string') {
1111
res.status(400).send('theme must be a string');
@@ -31,13 +31,18 @@ export default async (req: VercelRequest, res: VercelResponse) => {
3131
try {
3232
const cardSVG = await getCommitsLanguageSVGWithThemeName(username, theme, excludeArr);
3333
res.setHeader('Content-Type', 'image/svg+xml');
34+
res.setHeader('Cache-Control', 'public, max-age=14400, s-maxage=86400');
3435
res.send(cardSVG);
3536
return;
3637
} catch (err: any) {
3738
console.log(err.message);
3839
// We update github token and try again, until getNextGitHubToken throw an Error
39-
changToNextGitHubToken(tokenIndex);
40-
tokenIndex += 1;
40+
if (err.response && (err.response.status === 403 || err.response.status === 401)) {
41+
changToNextGitHubToken(tokenIndex);
42+
tokenIndex += 1;
43+
} else {
44+
throw err;
45+
}
4146
}
4247
}
4348
} catch (err: any) {

api/cards/productive-time.ts

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
1-
import {getProductiveTimeSVGWithThemeName} from '../../src/cards/productive-time-card';
2-
import {changToNextGitHubToken} from '../utils/github-token-updater';
3-
import {getErrorMsgCard} from '../utils/error-card';
4-
import type {VercelRequest, VercelResponse} from '@vercel/node';
1+
import { getProductiveTimeSVGWithThemeName } from '../../src/cards/productive-time-card';
2+
import { changToNextGitHubToken } from '../utils/github-token-updater';
3+
import { getErrorMsgCard } from '../utils/error-card';
4+
import type { VercelRequest, VercelResponse } from '@vercel/node';
55

66
export default async (req: VercelRequest, res: VercelResponse) => {
7-
const {username, theme = 'default', utcOffset = '0'} = req.query;
7+
const { username, theme = 'default', utcOffset = '0' } = req.query;
88
if (typeof theme !== 'string') {
99
res.status(400).send('theme must be a string');
1010
return;
@@ -23,13 +23,18 @@ export default async (req: VercelRequest, res: VercelResponse) => {
2323
try {
2424
const cardSVG = await getProductiveTimeSVGWithThemeName(username, theme, Number(utcOffset));
2525
res.setHeader('Content-Type', 'image/svg+xml');
26+
res.setHeader('Cache-Control', 'public, max-age=14400, s-maxage=86400');
2627
res.send(cardSVG);
2728
return;
2829
} catch (err: any) {
2930
console.log(err.message);
3031
// We update github token and try again, until getNextGitHubToken throw an Error
31-
changToNextGitHubToken(tokenIndex);
32-
tokenIndex += 1;
32+
if (err.response && (err.response.status === 403 || err.response.status === 401)) {
33+
changToNextGitHubToken(tokenIndex);
34+
tokenIndex += 1;
35+
} else {
36+
throw err;
37+
}
3338
}
3439
}
3540
} catch (err: any) {

api/cards/profile-details.ts

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
1-
import {getProfileDetailsSVGWithThemeName} from '../../src/cards/profile-details-card';
2-
import {changToNextGitHubToken} from '../utils/github-token-updater';
3-
import {getErrorMsgCard} from '../utils/error-card';
4-
import type {VercelRequest, VercelResponse} from '@vercel/node';
1+
import { getProfileDetailsSVGWithThemeName } from '../../src/cards/profile-details-card';
2+
import { changToNextGitHubToken } from '../utils/github-token-updater';
3+
import { getErrorMsgCard } from '../utils/error-card';
4+
import type { VercelRequest, VercelResponse } from '@vercel/node';
55

66
export default async (req: VercelRequest, res: VercelResponse) => {
7-
const {username, theme = 'default'} = req.query;
7+
const { username, theme = 'default' } = req.query;
88
if (typeof theme !== 'string') {
99
res.status(400).send('theme must be a string');
1010
return;
@@ -19,13 +19,18 @@ export default async (req: VercelRequest, res: VercelResponse) => {
1919
try {
2020
const cardSVG = await getProfileDetailsSVGWithThemeName(username, theme);
2121
res.setHeader('Content-Type', 'image/svg+xml');
22+
res.setHeader('Cache-Control', 'public, max-age=14400, s-maxage=86400');
2223
res.send(cardSVG);
2324
return;
2425
} catch (err: any) {
2526
console.log(err.message);
2627
// We update github token and try again, until getNextGitHubToken throw an Error
27-
changToNextGitHubToken(tokenIndex);
28-
tokenIndex += 1;
28+
if (err.response && (err.response.status === 403 || err.response.status === 401)) {
29+
changToNextGitHubToken(tokenIndex);
30+
tokenIndex += 1;
31+
} else {
32+
throw err;
33+
}
2934
}
3035
}
3136
} catch (err: any) {

api/cards/repos-per-language.ts

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
1-
import {getReposPerLanguageSVGWithThemeName} from '../../src/cards/repos-per-language-card';
2-
import {changToNextGitHubToken} from '../utils/github-token-updater';
3-
import {getErrorMsgCard} from '../utils/error-card';
4-
import {translateLanguage} from '../../src/utils/translator';
5-
import type {VercelRequest, VercelResponse} from '@vercel/node';
1+
import { getReposPerLanguageSVGWithThemeName } from '../../src/cards/repos-per-language-card';
2+
import { changToNextGitHubToken } from '../utils/github-token-updater';
3+
import { getErrorMsgCard } from '../utils/error-card';
4+
import { translateLanguage } from '../../src/utils/translator';
5+
import type { VercelRequest, VercelResponse } from '@vercel/node';
66

77
export default async (req: VercelRequest, res: VercelResponse) => {
8-
let {username, theme = 'default', exclude = ''} = req.query;
8+
let { username, theme = 'default', exclude = '' } = req.query;
99

1010
if (typeof theme !== 'string') {
1111
res.status(400).send('theme must be a string');
@@ -31,13 +31,18 @@ export default async (req: VercelRequest, res: VercelResponse) => {
3131
try {
3232
const cardSVG = await getReposPerLanguageSVGWithThemeName(username, theme, excludeArr);
3333
res.setHeader('Content-Type', 'image/svg+xml');
34+
res.setHeader('Cache-Control', 'public, max-age=14400, s-maxage=86400');
3435
res.send(cardSVG);
3536
return;
3637
} catch (err: any) {
3738
console.log(err.message);
3839
// We update github token and try again, until getNextGitHubToken throw an Error
39-
changToNextGitHubToken(tokenIndex);
40-
tokenIndex += 1;
40+
if (err.response && (err.response.status === 403 || err.response.status === 401)) {
41+
changToNextGitHubToken(tokenIndex);
42+
tokenIndex += 1;
43+
} else {
44+
throw err;
45+
}
4146
}
4247
}
4348
} catch (err: any) {

api/cards/stats.ts

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
1-
import {getStatsSVGWithThemeName} from '../../src/cards/stats-card';
2-
import {changToNextGitHubToken} from '../utils/github-token-updater';
3-
import {getErrorMsgCard} from '../utils/error-card';
4-
import type {VercelRequest, VercelResponse} from '@vercel/node';
1+
import { getStatsSVGWithThemeName } from '../../src/cards/stats-card';
2+
import { changToNextGitHubToken } from '../utils/github-token-updater';
3+
import { getErrorMsgCard } from '../utils/error-card';
4+
import type { VercelRequest, VercelResponse } from '@vercel/node';
55

66
export default async (req: VercelRequest, res: VercelResponse) => {
7-
const {username, theme = 'default'} = req.query;
7+
const { username, theme = 'default' } = req.query;
88
if (typeof theme !== 'string') {
99
res.status(400).send('theme must be a string');
1010
return;
@@ -19,13 +19,18 @@ export default async (req: VercelRequest, res: VercelResponse) => {
1919
try {
2020
const cardSVG = await getStatsSVGWithThemeName(username, theme);
2121
res.setHeader('Content-Type', 'image/svg+xml');
22+
res.setHeader('Cache-Control', 'public, max-age=14400, s-maxage=86400');
2223
res.send(cardSVG);
2324
return;
2425
} catch (err: any) {
2526
console.log(err.message);
2627
// We update github token and try again, until getNextGitHubToken throw an Error
27-
changToNextGitHubToken(tokenIndex);
28-
tokenIndex += 1;
28+
if (err.response && (err.response.status === 403 || err.response.status === 401)) {
29+
changToNextGitHubToken(tokenIndex);
30+
tokenIndex += 1;
31+
} else {
32+
throw err;
33+
}
2934
}
3035
}
3136
} catch (err: any) {

src/utils/request.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ export default function request(header: any, data: any): AxiosPromise<any> {
1111
headers: header,
1212
data: data,
1313
raxConfig: {
14-
retry: 10,
14+
retry: 3,
1515
noResponseRetries: 3,
1616
retryDelay: 1000,
1717
backoffType: 'linear',

0 commit comments

Comments
 (0)