diff options
| author | Mohamed Bassem <me@mbassem.com> | 2025-10-12 13:42:24 +0000 |
|---|---|---|
| committer | Mohamed Bassem <me@mbassem.com> | 2025-10-12 18:29:40 +0000 |
| commit | fda1c851cf507ca7e309e80ff068444dfaab93c3 (patch) | |
| tree | d349fdae4fa1a3a1e32152f0df41948fd56b7f89 /apps/web/components/admin/ServerStats.tsx | |
| parent | 7ee9416e8f1689b6390ea51c7a8484936c12026d (diff) | |
| download | karakeep-fda1c851cf507ca7e309e80ff068444dfaab93c3.tar.zst | |
feat: Add service dependency checks in the server overview page
Diffstat (limited to 'apps/web/components/admin/ServerStats.tsx')
| -rw-r--r-- | apps/web/components/admin/ServerStats.tsx | 97 |
1 files changed, 0 insertions, 97 deletions
diff --git a/apps/web/components/admin/ServerStats.tsx b/apps/web/components/admin/ServerStats.tsx deleted file mode 100644 index e60f0fbe..00000000 --- a/apps/web/components/admin/ServerStats.tsx +++ /dev/null @@ -1,97 +0,0 @@ -"use client"; - -import LoadingSpinner from "@/components/ui/spinner"; -import { useClientConfig } from "@/lib/clientConfig"; -import { useTranslation } from "@/lib/i18n/client"; -import { api } from "@/lib/trpc"; -import { keepPreviousData, useQuery } from "@tanstack/react-query"; - -const REPO_LATEST_RELEASE_API = - "https://api.github.com/repos/karakeep-app/karakeep/releases/latest"; -const REPO_RELEASE_PAGE = "https://github.com/karakeep-app/karakeep/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 = ( - // oxlint-disable-next-line no-html-link-for-pages - <a - href={REPO_RELEASE_PAGE} - target="_blank" - className="text-blue-500" - rel="noreferrer" - title="Update available" - > - ({latestRelease} ⬆️) - </a> - ); - } - return ( - <div className="text-nowrap"> - <span className="text-3xl font-semibold">{currentRelease}</span> - <span className="ml-1 text-sm">{newRelease}</span> - </div> - ); -} - -export default function ServerStats() { - const { t } = useTranslation(); - const { data: serverStats } = api.admin.stats.useQuery(undefined, { - refetchInterval: 5000, - placeholderData: keepPreviousData, - }); - - if (!serverStats) { - return <LoadingSpinner />; - } - - return ( - <div className="flex flex-col gap-4"> - <div className="mb-2 text-xl font-medium"> - {t("admin.server_stats.server_stats")} - </div> - <div className="flex flex-col gap-4 sm:flex-row"> - <div className="rounded-md border bg-background p-4 sm:w-1/4"> - <div className="text-sm font-medium text-gray-400"> - {t("admin.server_stats.total_users")} - </div> - <div className="text-3xl font-semibold">{serverStats.numUsers}</div> - </div> - <div className="rounded-md border bg-background p-4 sm:w-1/4"> - <div className="text-sm font-medium text-gray-400"> - {t("admin.server_stats.total_bookmarks")} - </div> - <div className="text-3xl font-semibold"> - {serverStats.numBookmarks} - </div> - </div> - <div className="rounded-md border bg-background p-4 sm:w-1/4"> - <div className="text-sm font-medium text-gray-400"> - {t("admin.server_stats.server_version")} - </div> - <ReleaseInfo /> - </div> - </div> - </div> - ); -} |
