From e107f8b6c250759ab0f884b2fdd0283fae15cfe5 Mon Sep 17 00:00:00 2001 From: Md Saban <45597394+mdsaban@users.noreply.github.com> Date: Sun, 30 Jun 2024 03:44:44 +0530 Subject: ui: refactor admin settings page (#249) * ui: refactor admin ui * fix: pr comments * chore: lint fix * chore: refactor * minor tweaks --------- Co-authored-by: MohamedBassem --- .../web/components/dashboard/admin/ServerStats.tsx | 130 +++++++++++++++++++++ 1 file changed, 130 insertions(+) create mode 100644 apps/web/components/dashboard/admin/ServerStats.tsx (limited to 'apps/web/components/dashboard/admin/ServerStats.tsx') diff --git a/apps/web/components/dashboard/admin/ServerStats.tsx b/apps/web/components/dashboard/admin/ServerStats.tsx new file mode 100644 index 00000000..06e3421f --- /dev/null +++ b/apps/web/components/dashboard/admin/ServerStats.tsx @@ -0,0 +1,130 @@ +"use client"; + +import LoadingSpinner from "@/components/ui/spinner"; +import { + Table, + TableBody, + TableCell, + TableHead, + TableHeader, + TableRow, +} from "@/components/ui/table"; +import { useClientConfig } from "@/lib/clientConfig"; +import { api } from "@/lib/trpc"; +import { keepPreviousData, useQuery } from "@tanstack/react-query"; + +const REPO_LATEST_RELEASE_API = + "https://api.github.com/repos/hoarder-app/hoarder/releases/latest"; +const REPO_RELEASE_PAGE = "https://github.com/hoarder-app/hoarder/releases"; + +function useLatestRelease() { + const { data } = useQuery({ + queryKey: ["latest-release"], + queryFn: async () => { + const res = await fetch(REPO_LATEST_RELEASE_API); + if (!res.ok) { + return undefined; + } + const data = (await res.json()) as { name: string }; + return data.name; + }, + staleTime: 60 * 60 * 1000, + enabled: !useClientConfig().disableNewReleaseCheck, + }); + return data; +} + +function ReleaseInfo() { + const currentRelease = useClientConfig().serverVersion ?? "NA"; + const latestRelease = useLatestRelease(); + + let newRelease; + if (latestRelease && currentRelease != latestRelease) { + newRelease = ( + + ({latestRelease} ⬆️) + + ); + } + return ( +
+ {currentRelease} + {newRelease} +
+ ); +} + +export default function ServerStats() { + const { data: serverStats } = api.admin.stats.useQuery(undefined, { + refetchInterval: 1000, + placeholderData: keepPreviousData, + }); + + if (!serverStats) { + return ; + } + + return ( + <> +
Server Stats
+
+
+
Total Users
+
{serverStats.numUsers}
+
+
+
+ Total Bookmarks +
+
+ {serverStats.numBookmarks} +
+
+
+
+ Server Version +
+ +
+
+ +
+
Background Jobs
+ + + Job + Queued + Pending + Failed + + + + Crawling Jobs + {serverStats.crawlStats.queuedInRedis} + {serverStats.crawlStats.pending} + {serverStats.crawlStats.failed} + + + Indexing Jobs + {serverStats.indexingStats.queuedInRedis} + - + - + + + Inference Jobs + {serverStats.inferenceStats.queuedInRedis} + {serverStats.inferenceStats.pending} + {serverStats.inferenceStats.failed} + + +
+
+ + ); +} -- cgit v1.2.3-70-g09d2