Skip to content

Commit

Permalink
♻️ Cache API response for 10 min
Browse files Browse the repository at this point in the history
  • Loading branch information
AnandChowdhary committed Dec 6, 2020
1 parent 79b3f24 commit 9177df4
Show file tree
Hide file tree
Showing 8 changed files with 94 additions and 72 deletions.
22 changes: 12 additions & 10 deletions src/components/ActiveIncidents.svelte
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
import Loading from "../components/Loading.svelte";
import { onMount } from "svelte";
import config from "../data/config.json";
import { createOctokit, handleError } from "../utils/createOctokit";
import { cachedResponse, createOctokit, handleError } from "../utils/createOctokit";
let loading = true;
const octokit = createOctokit();
Expand All @@ -13,15 +13,17 @@
onMount(async () => {
try {
incidents = (
await octokit.issues.listForRepo({
owner,
repo,
state: "open",
filter: "all",
sort: "created",
direction: "desc",
labels: "status",
})
await cachedResponse(`issues-${owner}-${repo}`, () =>
octokit.issues.listForRepo({
owner,
repo,
state: "open",
filter: "all",
sort: "created",
direction: "desc",
labels: "status",
})
)
).data;
incidents = incidents.map((incident, index) => {
incident.showHeading =
Expand Down
16 changes: 9 additions & 7 deletions src/components/Graph.svelte
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
import { onMount } from "svelte";
import config from "../data/config.json";
import Line from "svelte-chartjs/src/Line.svelte";
import { createOctokit, handleError } from "../utils/createOctokit";
import { cachedResponse, createOctokit, handleError } from "../utils/createOctokit";
export let slug;
let loading = true;
Expand All @@ -18,12 +18,14 @@
onMount(async () => {
try {
commits = (
await octokit.repos.listCommits({
owner,
repo,
path: `history/${slug}.yml`,
per_page: 28,
})
await cachedResponse(`commits-${owner}-${repo}-${slug}`, () =>
octokit.repos.listCommits({
owner,
repo,
path: `history/${slug}.yml`,
per_page: 28,
})
)
).data.reverse();
} catch (error) {
handleError(error);
Expand Down
22 changes: 12 additions & 10 deletions src/components/History.svelte
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
import Loading from "../components/Loading.svelte";
import { onMount } from "svelte";
import config from "../data/config.json";
import { createOctokit, handleError } from "../utils/createOctokit";
import { cachedResponse, createOctokit, handleError } from "../utils/createOctokit";
export let slug;
let loading = true;
Expand All @@ -14,15 +14,17 @@
onMount(async () => {
try {
incidents = (
await octokit.issues.listForRepo({
owner,
repo,
state: "closed",
filter: "all",
sort: "created",
direction: "desc",
labels: `status,${slug}`,
})
await cachedResponse(`closed-issues-${owner}-${repo}-${slug}`, () =>
octokit.issues.listForRepo({
owner,
repo,
state: "closed",
filter: "all",
sort: "created",
direction: "desc",
labels: `status,${slug}`,
})
)
).data;
} catch (error) {
handleError(error);
Expand Down
30 changes: 17 additions & 13 deletions src/components/Incident.svelte
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
import { onMount } from "svelte";
import snarkdown from "snarkdown";
import config from "../data/config.json";
import { createOctokit, handleError } from "../utils/createOctokit";
import { cachedResponse, createOctokit, handleError } from "../utils/createOctokit";
export let number;
Expand All @@ -20,25 +20,29 @@
onMount(async () => {
try {
incident = (
await octokit.issues.get({
owner,
repo,
issue_number: number,
sort: "created",
direction: "desc",
})
await cachedResponse(`issue-${owner}-${repo}-${number}`, () =>
octokit.issues.get({
owner,
repo,
issue_number: number,
sort: "created",
direction: "desc",
})
)
).data;
} catch (error) {
handleError(error);
}
loadingIncident = false;
try {
comments = (
await octokit.issues.listComments({
owner,
repo,
issue_number: number,
})
await cachedResponse(`issue-comments-${owner}-${repo}-${number}`, () =>
octokit.issues.listComments({
owner,
repo,
issue_number: number,
})
)
).data.reverse();
} catch (error) {
handleError(error);
Expand Down
22 changes: 12 additions & 10 deletions src/components/Incidents.svelte
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
import Loading from "../components/Loading.svelte";
import { onMount } from "svelte";
import config from "../data/config.json";
import { createOctokit, handleError } from "../utils/createOctokit";
import { cachedResponse, createOctokit, handleError } from "../utils/createOctokit";
let loading = true;
const octokit = createOctokit();
Expand All @@ -13,15 +13,17 @@
onMount(async () => {
try {
incidents = (
await octokit.issues.listForRepo({
owner,
repo,
state: "closed",
filter: "all",
sort: "created",
direction: "desc",
labels: "status",
})
await cachedResponse(`closed-issues-${owner}-${repo}`, () =>
octokit.issues.listForRepo({
owner,
repo,
state: "closed",
filter: "all",
sort: "created",
direction: "desc",
labels: "status",
})
)
).data;
} catch (error) {
handleError(error);
Expand Down
13 changes: 2 additions & 11 deletions src/components/LiveStatus.svelte
Original file line number Diff line number Diff line change
Expand Up @@ -21,17 +21,8 @@
onMount(async () => {
try {
sites = JSON.parse(
atob(
(
await octokit.repos.getContent({
owner,
repo,
path: "history/summary.json",
})
).data.content.replace(/\n/g, "")
)
);
const res = await fetch(`${userContentBaseUrl}/${owner}/${repo}/master/history/summary.json`);
sites = await res.json();
} catch (error) {
handleError(error);
}
Expand Down
13 changes: 2 additions & 11 deletions src/components/Summary.svelte
Original file line number Diff line number Diff line change
Expand Up @@ -13,17 +13,8 @@
onMount(async () => {
try {
summary = JSON.parse(
atob(
(
await octokit.repos.getContent({
owner,
repo,
path: "history/summary.json",
})
).data.content
)
).find((item) => item.slug === slug);
const res = await fetch(`${userContentBaseUrl}/${owner}/${repo}/master/history/summary.json`);
summary = (await res.json()).find((item) => item.slug === slug);
} catch (error) {
handleError(error);
}
Expand Down
28 changes: 28 additions & 0 deletions src/utils/createOctokit.js
Original file line number Diff line number Diff line change
Expand Up @@ -29,3 +29,31 @@ export const handleError = (error) => {
console.log(error.message);
}
};

/**
* Memoize a GitHub API response in local storage
* @param {string} key - Local storage cache key
* @param {Function} fn - Function that returns the result
*/
export const cachedResponse = async (key, fn) => {
try {
if (typeof window !== "undefined") {
if ("localStorage" in window) {
const data = localStorage.getItem(key);
if (data) {
const item = JSON.parse(data);
if (new Date().getTime() - new Date(item.createdAt || "").getTime() > 600000) {
localStorage.removeItem(key);
} else {
console.log("Got cached item");
return item.data;
}
}
}
}
} catch (error) {}
console.log("Got here");
const i = await fn();
localStorage.setItem(key, JSON.stringify({ data: i, createdAt: new Date() }));
return i;
};

0 comments on commit 9177df4

Please sign in to comment.