"use client";
import { ActionButton } from "@/components/ui/action-button";
import { toast } from "@/components/ui/use-toast";
import { useTranslation } from "@/lib/i18n/client";
import { api } from "@/lib/trpc";
import { keepPreviousData } from "@tanstack/react-query";
import LoadingSpinner from "../ui/spinner";
import {
Table,
TableBody,
TableCell,
TableHead,
TableHeader,
TableRow,
} from "../ui/table";
function AdminActions() {
const { t } = useTranslation();
const { mutate: recrawlLinks, isPending: isRecrawlPending } =
api.admin.recrawlLinks.useMutation({
onSuccess: () => {
toast({
description: "Recrawl enqueued",
});
},
onError: (e) => {
toast({
variant: "destructive",
description: e.message,
});
},
});
const { mutate: reindexBookmarks, isPending: isReindexPending } =
api.admin.reindexAllBookmarks.useMutation({
onSuccess: () => {
toast({
description: "Reindex enqueued",
});
},
onError: (e) => {
toast({
variant: "destructive",
description: e.message,
});
},
});
const { mutate: reprocessAssetsFixMode, isPending: isReprocessingPending } =
api.admin.reprocessAssetsFixMode.useMutation({
onSuccess: () => {
toast({
description: "Reprocessing enqueued",
});
},
onError: (e) => {
toast({
variant: "destructive",
description: e.message,
});
},
});
const {
mutate: reRunInferenceOnAllBookmarks,
isPending: isInferencePending,
} = api.admin.reRunInferenceOnAllBookmarks.useMutation({
onSuccess: () => {
toast({
description: "Inference jobs enqueued",
});
},
onError: (e) => {
toast({
variant: "destructive",
description: e.message,
});
},
});
const { mutateAsync: tidyAssets, isPending: isTidyAssetsPending } =
api.admin.tidyAssets.useMutation({
onSuccess: () => {
toast({
description: "Tidy assets request has been enqueued!",
});
},
onError: (e) => {
toast({
variant: "destructive",
description: e.message,
});
},
});
return (
recrawlLinks({ crawlStatus: "failure", runInference: true })
}
>
{t("admin.actions.recrawl_failed_links_only")}
recrawlLinks({ crawlStatus: "all", runInference: true })}
>
{t("admin.actions.recrawl_all_links")}
recrawlLinks({ crawlStatus: "all", runInference: false })
}
>
{t("admin.actions.recrawl_all_links")} (
{t("admin.actions.without_inference")})
reRunInferenceOnAllBookmarks({ type: "tag", status: "failure" })
}
>
{t("admin.actions.regenerate_ai_tags_for_failed_bookmarks_only")}
reRunInferenceOnAllBookmarks({ type: "tag", status: "all" })
}
>
{t("admin.actions.regenerate_ai_tags_for_all_bookmarks")}
reRunInferenceOnAllBookmarks({ type: "summarize", status: "failure" })
}
>
{t("admin.actions.regenerate_ai_summaries_for_failed_bookmarks_only")}
reRunInferenceOnAllBookmarks({ type: "summarize", status: "all" })
}
>
{t("admin.actions.regenerate_ai_summaries_for_all_bookmarks")}
reindexBookmarks()}
>
{t("admin.actions.reindex_all_bookmarks")}
reprocessAssetsFixMode()}
>
{t("admin.actions.reprocess_assets_fix_mode")}
tidyAssets()}
>
{t("admin.actions.compact_assets")}
);
}
export default function BackgroundJobs() {
const { t } = useTranslation();
const { data: serverStats } = api.admin.backgroundJobsStats.useQuery(
undefined,
{
refetchInterval: 1000,
placeholderData: keepPreviousData,
},
);
if (!serverStats) {
return ;
}
return (
{t("admin.background_jobs.background_jobs")}
{t("admin.background_jobs.job")}
{t("admin.background_jobs.queued")}
{t("admin.background_jobs.pending")}
{t("admin.background_jobs.failed")}
{t("admin.background_jobs.crawler_jobs")}
{serverStats.crawlStats.queued}
{serverStats.crawlStats.pending}
{serverStats.crawlStats.failed}
{t("admin.background_jobs.indexing_jobs")}
{serverStats.indexingStats.queued}
-
-
{t("admin.background_jobs.inference_jobs")}
{serverStats.inferenceStats.queued}
{serverStats.inferenceStats.pending}
{serverStats.inferenceStats.failed}
{t("admin.background_jobs.tidy_assets_jobs")}
{serverStats.tidyAssetsStats.queued}
-
-
{t("admin.background_jobs.video_jobs")}
{serverStats.videoStats.queued}
-
-
{t("admin.background_jobs.webhook_jobs")}
{serverStats.webhookStats.queued}
-
-
{t("admin.background_jobs.asset_preprocessing_jobs")}
{serverStats.assetPreprocessingStats.queued}
-
-
{t("admin.background_jobs.feed_jobs")}
{serverStats.feedStats.queued}
-
-
);
}