Skip to content

Commit

Permalink
feat: optimize used_by
Browse files Browse the repository at this point in the history
  • Loading branch information
xhofe committed Nov 14, 2023
1 parent 394b3f0 commit b171984
Show file tree
Hide file tree
Showing 2 changed files with 23 additions and 12 deletions.
20 changes: 14 additions & 6 deletions app/(main)/used_by/show.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,10 @@ export function Show() {
const router = useRouter()
const perPage = parseInt(searchParams.get("per_page") || "12")
const { data, error, isLoading } = useSWR<{
data: string[]
data: {
name: string
pages: number
}[]
total: number
}>(`${host}/api/used_by?` + searchParams.toString(), fetcher)
if (error) {
Expand Down Expand Up @@ -54,19 +57,24 @@ export function Show() {
<div className="w-full pt-4 md:px-10 lg:px-[14%] flex gap-2 flex-col">
<div className="grid grid-cols-1 md:grid-cols-[repeat(auto-fill,minmax(400px,1fr))] gap-4">
{data!.data.map((repo) => (
<Card isPressable key={repo}>
<Card isPressable key={repo.name}>
<CardHeader className="pb-0">
<Link
href={`https://github.com/${repo}`}
href={`https://github.com/${repo.name}`}
isExternal
className=" hover:underline"
>
{repo}
{repo.name}
</Link>
</CardHeader>
<CardBody className="p-3">
<Link isExternal href={`/api?repo=${repo}`}>
<Image src={`${host}/api?repo=${repo}`} />
<Link
isExternal
href={`/api?repo=${repo.name}&pages=${repo.pages}`}
>
<Image
src={`${host}/api?repo=${repo.name}&pages=${repo.pages}`}
/>
</Link>
</CardBody>
</Card>
Expand Down
15 changes: 9 additions & 6 deletions app/api/github.ts
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ const throttleSaveRepoExists = throttle(() => {
saveByPath(repoExists, repo_exists_file_path)
}, 1000 * 60)

const repoExists = new LRUCache<string, boolean>({
const repoExists = new LRUCache<string, number>({
max: 100,
ttl: 1000 * 60 * 60 * 12,
})
Expand All @@ -69,10 +69,13 @@ const avatarCache = new LRUCache<string, Buffer>({
})

export function usedBy(per_page: number, page: number) {
let repos = [] as string[]
let repos = [] as { name: string; pages: number }[]
repoExists.forEach((value, key) => {
if (value) {
repos.push(key)
repos.push({
name: key,
pages: value,
})
}
})
const res = repos.slice((page - 1) * per_page, page * per_page)
Expand Down Expand Up @@ -103,7 +106,7 @@ async function fetchRepoOnePage(repo: string, page: number) {
const usersPage = await res.json()
if (usersPage.message) {
if (usersPage.message === "Not Found") {
repoExists.set(repo, false)
repoExists.set(repo, 0)
throw new Error(`repo ${repo} not found`)
}
throw new Error(`failed to fetch repo ${cacheKey}: ${usersPage.message}`)
Expand All @@ -118,7 +121,7 @@ async function fetchRepoOnePage(repo: string, page: number) {
})
repoCache.set(cacheKey, usersUse)
throttleSaveRepoCache()
repoExists.set(repo, true)
repoExists.set(repo, page)
throttleSaveRepoExists()
return usersUse
}
Expand All @@ -129,7 +132,7 @@ export async function fetchRepo(repo: string, maxPages: number = 1) {
if (!repoRegex.test(repo)) {
throw new Error(`invalid repo: ${repo}`)
}
if (repoExists.get(repo) === false) {
if (repoExists.get(repo) === 0) {
throw new Error(`repo ${repo} not found`)
}
console.log(`fetching ${repo}`)
Expand Down

0 comments on commit b171984

Please sign in to comment.