Skip to content

Commit

Permalink
feature: extend default card cache time to 6 hours (anuraghazra#3242)
Browse files Browse the repository at this point in the history
* feature: extend default card cache time to 8 hours

* reduce to six hours
  • Loading branch information
qwerty541 authored and setdebarr committed Jan 12, 2024
1 parent f0021ca commit c3e8417
Show file tree
Hide file tree
Showing 9 changed files with 45 additions and 33 deletions.
6 changes: 3 additions & 3 deletions api/gist.js
Original file line number Diff line number Diff line change
Expand Up @@ -34,8 +34,8 @@ export default async (req, res) => {
const gistData = await fetchGist(id);

let cacheSeconds = clampValue(
parseInt(cache_seconds || CONSTANTS.FOUR_HOURS, 10),
CONSTANTS.FOUR_HOURS,
parseInt(cache_seconds || CONSTANTS.SIX_HOURS, 10),
CONSTANTS.SIX_HOURS,
CONSTANTS.ONE_DAY,
);
cacheSeconds = process.env.CACHE_SECONDS
Expand All @@ -52,7 +52,7 @@ export default async (req, res) => {
const isBothOver1K = stars > 1000 && forks > 1000;
const isBothUnder1 = stars < 1 && forks < 1;
if (!cache_seconds && (isBothOver1K || isBothUnder1)) {
cacheSeconds = CONSTANTS.FOUR_HOURS;
cacheSeconds = CONSTANTS.SIX_HOURS;
}

res.setHeader(
Expand Down
2 changes: 1 addition & 1 deletion api/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ export default async (req, res) => {

let cacheSeconds = clampValue(
parseInt(cache_seconds || CONSTANTS.CARD_CACHE_SECONDS, 10),
CONSTANTS.FOUR_HOURS,
CONSTANTS.SIX_HOURS,
CONSTANTS.ONE_DAY,
);
cacheSeconds = process.env.CACHE_SECONDS
Expand Down
4 changes: 2 additions & 2 deletions api/pin.js
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ export default async (req, res) => {

let cacheSeconds = clampValue(
parseInt(cache_seconds || CONSTANTS.CARD_CACHE_SECONDS, 10),
CONSTANTS.FOUR_HOURS,
CONSTANTS.SIX_HOURS,
CONSTANTS.ONE_DAY,
);
cacheSeconds = process.env.CACHE_SECONDS
Expand All @@ -58,7 +58,7 @@ export default async (req, res) => {
const isBothOver1K = stars > 1000 && forks > 1000;
const isBothUnder1 = stars < 1 && forks < 1;
if (!cache_seconds && (isBothOver1K || isBothUnder1)) {
cacheSeconds = CONSTANTS.FOUR_HOURS;
cacheSeconds = CONSTANTS.SIX_HOURS;
}

res.setHeader(
Expand Down
2 changes: 1 addition & 1 deletion api/top-langs.js
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,7 @@ export default async (req, res) => {

let cacheSeconds = clampValue(
parseInt(cache_seconds || CONSTANTS.CARD_CACHE_SECONDS, 10),
CONSTANTS.FOUR_HOURS,
CONSTANTS.SIX_HOURS,
CONSTANTS.ONE_DAY,
);
cacheSeconds = process.env.CACHE_SECONDS
Expand Down
2 changes: 1 addition & 1 deletion api/wakatime.js
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ export default async (req, res) => {

let cacheSeconds = clampValue(
parseInt(cache_seconds || CONSTANTS.CARD_CACHE_SECONDS, 10),
CONSTANTS.FOUR_HOURS,
CONSTANTS.SIX_HOURS,
CONSTANTS.ONE_DAY,
);
cacheSeconds = process.env.CACHE_SECONDS
Expand Down
4 changes: 2 additions & 2 deletions readme.md
Original file line number Diff line number Diff line change
Expand Up @@ -293,12 +293,12 @@ You can customize the appearance of all your cards however you wish with URL par
* `bg_color` - Card's background color *(hex color)* **or** a gradient in the form of *angle,start,end*. Default: `fffefe`
* `hide_border` - Hides the card's border *(boolean)*. Default: `false`
* `theme` - Name of the theme, choose from [all available themes](./themes/README.md). Default: `default` theme.
* `cache_seconds` - Sets the cache header manually *(min: 14400, max: 86400)*. Default: `14400 seconds (4 hours)`.
* `cache_seconds` - Sets the cache header manually *(min: 21600, max: 86400)*. Default: `21600 seconds (6 hours)`.
* `locale` - Sets the language in the card *(e.g. cn, de, es, etc.)*. Default: `en`.
* `border_radius` - Corner rounding on the card. Default: `4.5`.

> [!WARNING]\
> We use caching to decrease the load on our servers (see <https://github.com/anuraghazra/github-readme-stats/issues/1471#issuecomment-1271551425>). Our cards have a default cache of 4 hours (14400 seconds). Also, note that the cache is clamped to a minimum of 4 hours and a maximum of 24 hours.
> We use caching to decrease the load on our servers (see <https://github.com/anuraghazra/github-readme-stats/issues/1471#issuecomment-1271551425>). Our cards have a default cache of 6 hours (21600 seconds). Also, note that the cache is clamped to a minimum of 6 hours and a maximum of 24 hours. If you want the data on your statistics card to be updated more often you can [deploy your own instance](#deploy-on-your-own) and set [environment variable](#disable-rate-limit-protections) `CACHE_SECONDS` to a value of your choosing.
##### Gradient in bg\_color

Expand Down
35 changes: 22 additions & 13 deletions src/common/utils.js
Original file line number Diff line number Diff line change
Expand Up @@ -373,21 +373,30 @@ const noop = () => {};
const logger =
process.env.NODE_ENV !== "test" ? console : { log: noop, error: noop };

// Cache settings.
const CARD_CACHE_SECONDS = 14400;
const ERROR_CACHE_SECONDS = 600;
const ONE_MINUTE = 60;
const FIVE_MINUTES = 300;
const TEN_MINUTES = 600;
const FIFTEEN_MINUTES = 900;
const THIRTY_MINUTES = 1800;
const TWO_HOURS = 7200;
const FOUR_HOURS = 14400;
const SIX_HOURS = 21600;
const EIGHT_HOURS = 28800;
const ONE_DAY = 86400;

const CONSTANTS = {
ONE_MINUTE: 60,
FIVE_MINUTES: 300,
TEN_MINUTES: 600,
FIFTEEN_MINUTES: 900,
THIRTY_MINUTES: 1800,
TWO_HOURS: 7200,
FOUR_HOURS: 14400,
ONE_DAY: 86400,
CARD_CACHE_SECONDS,
ERROR_CACHE_SECONDS,
ONE_MINUTE,
FIVE_MINUTES,
TEN_MINUTES,
FIFTEEN_MINUTES,
THIRTY_MINUTES,
TWO_HOURS,
FOUR_HOURS,
SIX_HOURS,
EIGHT_HOURS,
ONE_DAY,
CARD_CACHE_SECONDS: SIX_HOURS,
ERROR_CACHE_SECONDS: TEN_MINUTES,
};

const SECONDARY_ERROR_MESSAGES = {
Expand Down
19 changes: 11 additions & 8 deletions tests/api.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -162,22 +162,25 @@ describe("Test /api/", () => {
["Content-Type", "image/svg+xml"],
[
"Cache-Control",
`max-age=${CONSTANTS.FOUR_HOURS / 2}, s-maxage=${
CONSTANTS.FOUR_HOURS
`max-age=${CONSTANTS.SIX_HOURS / 2}, s-maxage=${
CONSTANTS.SIX_HOURS
}, stale-while-revalidate=${CONSTANTS.ONE_DAY}`,
],
]);
});

it("should set proper cache", async () => {
const { req, res } = faker({ cache_seconds: 15000 }, data_stats);
const cache_seconds = 35000;
const { req, res } = faker({ cache_seconds }, data_stats);
await api(req, res);

expect(res.setHeader.mock.calls).toEqual([
["Content-Type", "image/svg+xml"],
[
"Cache-Control",
`max-age=7500, s-maxage=${15000}, stale-while-revalidate=${
`max-age=${
cache_seconds / 2
}, s-maxage=${cache_seconds}, stale-while-revalidate=${
CONSTANTS.ONE_DAY
}`,
],
Expand Down Expand Up @@ -224,8 +227,8 @@ describe("Test /api/", () => {
["Content-Type", "image/svg+xml"],
[
"Cache-Control",
`max-age=${CONSTANTS.FOUR_HOURS / 2}, s-maxage=${
CONSTANTS.FOUR_HOURS
`max-age=${CONSTANTS.SIX_HOURS / 2}, s-maxage=${
CONSTANTS.SIX_HOURS
}, stale-while-revalidate=${CONSTANTS.ONE_DAY}`,
],
]);
Expand All @@ -239,8 +242,8 @@ describe("Test /api/", () => {
["Content-Type", "image/svg+xml"],
[
"Cache-Control",
`max-age=${CONSTANTS.FOUR_HOURS / 2}, s-maxage=${
CONSTANTS.FOUR_HOURS
`max-age=${CONSTANTS.SIX_HOURS / 2}, s-maxage=${
CONSTANTS.SIX_HOURS
}, stale-while-revalidate=${CONSTANTS.ONE_DAY}`,
],
]);
Expand Down
4 changes: 2 additions & 2 deletions tests/gist.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -188,8 +188,8 @@ describe("Test /api/gist", () => {
expect(res.setHeader).toBeCalledWith("Content-Type", "image/svg+xml");
expect(res.setHeader).toBeCalledWith(
"Cache-Control",
`max-age=${CONSTANTS.FOUR_HOURS / 2}, s-maxage=${
CONSTANTS.FOUR_HOURS
`max-age=${CONSTANTS.SIX_HOURS / 2}, s-maxage=${
CONSTANTS.SIX_HOURS
}, stale-while-revalidate=${CONSTANTS.ONE_DAY}`,
);
});
Expand Down

0 comments on commit c3e8417

Please sign in to comment.